Ящик NAT с несколькими внутренними и внешними интерфейсами

Подобные вопросы были заданы раньше, но моя настройка немного отличается, и решения этих вопросов не работают. A имеет сервер CentOS 6 с iptables с 5 интерфейсами:

  • eth0: Управление 136.2.188.0/24
  • eth1: Cluster1 internal 10.1.0.0/16
  • eth2: Кластер1 внешний 136.2.217.96/27
  • eth3: Cluster2 internal 10.6.0.0/20
  • eth4: Кластер2 внешний 136.2.178.32/28

То, что я пытаюсь сделать, – это трафик с eth1, чтобы выйти из eth2 и быть NATd, трафик с eth3 выйти eth4 и быть NATd, весь другой трафик (например, SSH к самому ящику) использовать eth0.

Для этого я сконфигурировал таблицы маршрутов следующим образом:

ip route add default via 136.2.178.33 src 136.2.178.37 table 1 ip route add default via 136.2.217.97 src 136.2.217.124 table 2 ip rule add fwmark 1 pref 1 table 1 ip rule add fwmark 2 pref 2 table 2 

Исходные IP-адреса относятся к ящику NAT. Обычный маршрут по умолчанию, используемый интерфейсом управления, находится в таблице 0, как обычно.

Затем я сконфигурировал iptables для маркировки пакетов с использованием таблицы mangle, чтобы они использовали определенную таблицу маршрутов (если я это правильно понимаю) и NAT конкретный трафик источника для определенного интерфейса:

 iptables -A PREROUTING -t mangle -j CONNMARK --restore-mark iptables -A PREROUTING -t mangle -m mark --mark 0x0 -s 10.6.0.0/20 -j MARK --set-mark 1 iptables -A PREROUTING -t mangle -m mark --mark 0x0 -s 10.1.0.0/16 -j MARK --set-mark 2 iptables -A POSTROUTING -t mangle -j CONNMARK --save-mark iptables -A POSTROUTING -t nat -s 10.6.0.0/20 -o eth4 -j MASQUERADE iptables -A POSTROUTING -t nat -s 10.1.0.0/16 -o eth2 -j MASQUERADE iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -j LOG --log-level debug iptables -A FORWARD -m state --state NEW -s 10.6.0.0/20 -o eth4 -j ACCEPT iptables -A FORWARD -m state --state NEW -s 10.1.0.0/16 -o eth2 -j ACCEPT iptables -A FORWARD -j DROP 

Когда я тестирую это (простое wget of google.com с клиентской машины), я вижу, что трафик поступает во внутренний интерфейс (eth3 в тесте), а затем выходит внешний интерфейс (eth4) с внешним IP-адресом NAT, как источник IP. Таким образом, сам NAT работает. Однако, когда система получает пакет ответа, он приходит в eth4, как и должно, но потом ничего не происходит, он никогда не получает un-NAT'd и никогда не появляется на eth3, чтобы вернуться на клиентскую машину.

Внутренний интерфейс:

 11:52:08.570462 IP 10.6.0.50.50783 > 74.125.198.103.80: Flags [S], seq 4030201376, win 14600, options [mss 1460,sackOK,TS val 34573 ecr 0,nop,wscale 7], length 0 11:52:09.572867 IP 10.6.0.50.50783 > 74.125.198.103.80: Flags [S], seq 4030201376, win 14600, options [mss 1460,sackOK,TS val 35576 ecr 0,nop,wscale 7], length 0 11:52:11.576943 IP 10.6.0.50.50783 > 74.125.198.103.80: Flags [S], seq 4030201376, win 14600, options [mss 1460,sackOK,TS val 37580 ecr 0,nop,wscale 7], length 0 11:52:15.580846 IP 10.6.0.50.50783 > 74.125.198.103.80: Flags [S], seq 4030201376, win 14600, options [mss 1460,sackOK,TS val 41584 ecr 0,nop,wscale 7], length 0 11:52:23.596897 IP 10.6.0.50.50783 > 74.125.198.103.80: Flags [S], seq 4030201376, win 14600, options [mss 1460,sackOK,TS val 49600 ecr 0,nop,wscale 7], length 0 

Внешние интерфейсы:

 11:52:08.570524 IP 136.2.178.37.50783 > 74.125.198.103.80: Flags [S], seq 4030201376, win 14600, options [mss 1460,sackOK,TS val 34573 ecr 0,nop,wscale 7], length 0 11:52:08.609213 IP 74.125.198.103.80 > 136.2.178.37.50783: Flags [S.], seq 1197168065, ack 4030201377, win 42540, options [mss 1380,sackOK,TS val 1835608368 ecr 34573,nop,wscale 7], length 0 11:52:08.909188 IP 74.125.198.103.80 > 136.2.178.37.50783: Flags [S.], seq 1197168065, ack 4030201377, win 42540, options [mss 1380,sackOK,TS val 1835608668 ecr 34573,nop,wscale 7], length 0 11:52:09.572882 IP 136.2.178.37.50783 > 74.125.198.103.80: Flags [S], seq 4030201376, win 14600, options [mss 1460,sackOK,TS val 35576 ecr 0,nop,wscale 7], length 0 11:52:09.611414 IP 74.125.198.103.80 > 136.2.178.37.50783: Flags [S.], seq 1197168065, ack 4030201377, win 42540, options [mss 1380,sackOK,TS val 1835609370 ecr 34573,nop,wscale 7], length 0 11:52:11.576967 IP 136.2.178.37.50783 > 74.125.198.103.80: Flags [S], seq 4030201376, win 14600, options [mss 1460,sackOK,TS val 37580 ecr 0,nop,wscale 7], length 0 

Итак, почему трафик выходит, но iptables не отправляет обратный трафик обратно клиенту? Кажется, что маршрутизация правильная, так как пакеты уходят и поступают на правильные интерфейсы, так что iptables делает с обратным трафиком?

One Solution collect form web for “Ящик NAT с несколькими внутренними и внешними интерфейсами”

Хорошо, я понял это. Я должен был добавить внутренний маршрут подсети к каждой таблице маршрутов, а затем установить правила для управления маршрутами трафика интерфейса в / из. Тогда в iptables не нужны маркировочные пакеты с таблицей mangle, просто типичные правила прямого и nat.

 ip route add 136.2.178.32/28 dev eth4 table 1 ip route add 10.6.0.0/20 dev eth3 table 1 ip route add default via 136.2.178.33 src 136.2.178.37 table 1 ip rule add iif eth4 table 1 ip rule add from 10.6.0.0/20 table 1 ip route add 136.2.217.96/28 dev eth2 table 2 ip route add 10.1.0.0/16 dev eth1 table 2 ip route add default via 136.2.217.113 src 136.2.217.124 table 2 ip rule add iif eth2 table 2 ip rule add from 10.1.0.0/16 table 2 iptables -A FORWARD -i eth2 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth1 -o eth2 -m state --state NEW -j LOG --log-level debug iptables -A FORWARD -i eth1 -o eth2 -j ACCEPT iptables -A FORWARD -i eth4 -o eth3 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth3 -o eth4 -m state --state NEW -j LOG --log-level debug iptables -A FORWARD -i eth3 -o eth4 -j ACCEPT iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE iptables -t nat -A POSTROUTING -o eth4 -j MASQUERADE 
  • Как перенаправить туннель SSL VPN через HTTP CONNECT-прокси, используя iptables?
  • Как добавить метки в iptables (цели MARK и CONNMARK)
  • маршрутизация нескольких маршрутов для определенного порта src
  • Добавление маршрута с ограниченным сроком действия?
  • Входные и входные маршруты маршрутизации iptables
  • Устранение неполадок Ubuntu 16.04 при конфигурации сети NAT
  • Маршрутизация трафика для конкретного пользователя для конкретного интерфейса
  • Сделать запрос через интерфейс vpn
  • Не разрешено добавлять eth0 в bond0
  • добавить маршрут в Linux, если суб-сеть, где расположен шлюз, не настроена
  • Как сделать работу по балансировке нагрузки самой коробкой pfSense?
  • Linux и Unix - лучшая ОС в мире.