Асимметричный маршрутизируемый ответ Ping отсутствует IPTABLES Nat Таблица - PullRequest
0 голосов
/ 05 июля 2019

Я уже 2 недели ищу ответ на эту проблему и не знаю, как ее решить.Я работаю с довольно сложным сетевым дизайном в AWS с использованием Transit Gateway, поэтому я просто начну с высокоуровневого описания, и, пожалуйста, просто дайте мне знать, нужна ли оттуда конкретная информация для помощи в устранении неполадок.

У меня есть два сервера Amazon Linux (производная Centos), которые действуют как блоки NAT между двумя сетями (на данный момент мы можем называть их «net A» и «net B»).Каждый из блоков NAT имеет одинаковую конфигурацию с точки зрения их SNAT / DNAT, маршрутизации, настроек ядра и т. Д.

Вот что я протестировал:

УСПЕХ (одна коробка NAT навремя):

  1. Пинг от сети A к сети B успешен при использовании только первого блока NAT (второй блок NAT отключен для этого теста).
  2. Пинг из сети B в сеть A также успешен через первый блок NAT (второй блок NAT все еще не работает)
  3. Пинг из сети A в сеть B успешен при использовании только второго блока NAT(первая коробка NAT отключена для этого теста)
  4. Пинг-запросы из сети B в сеть A также успешны через второй блок NAT (первая коробка NAT все еще не работает)

FAILURE (обаодновременно блокируется, вызывая случайную асимметричную маршрутизацию):

  1. Эхо-запросы ICMP от сети A успешно передаются в сеть B через первый блок NAT.Эти запросы также попадают на хост в сети B
  2. Эхо-ответы ICMP попадают во второй блок NAT.Они проходят через таблицу iptables mangle PREROUTING, но никогда не переходят в таблицу iptables nat PREROUTING
  3. Такое же поведение происходит при проверке связи из сети B через первый и второй блоки NAT

IPTABLES:

Мои iptables широко открыты для приема ВСЕГО трафика.Существуют только эти пользовательские правила

правила для пакетов, предназначенных для сети B (172.31.0.0/16)

iptables -t mangle -A PREROUTING -i vti1 ! -s 169.0.0.0/8 ! -d 169.0.0.0/8 -j MARK --set-mark 2
iptables -t nat -A PREROUTING -i vti1 ! -s 169.0.0.0/8 ! -d 169.0.0.0/8 -j NETMAP 172.31.0.0/16
iptables -t nat -A POSTROUTING -o vti3 ! -s 169.0.0.0/8 ! -d 169.0.0.0/8 -j NETMAP 10.18.0.0.0/16

правила для пакетов, предназначенных для сети A (192.168.0.0/16)

iptables -t mangle -A PREROUTING -i vti3 ! -s 169.0.0.0/8 ! -d 169.0.0.0/8 -j MARK --set-mark 4
iptables -t nat -A PREROUTING -i vti3 ! -s 169.0.0.0/8 ! -d 169.0.0.0/8 -j NETMAP 192.168.0.0/16
iptables -t nat -A POSTROUTING -o vti1 ! -s 169.0.0.0/8 ! -d 169.0.0.0/8 -j NETMAP 10.17.0.0.0/16

ПРАВИЛА И МАРШРУТЫ IP:

ip rule add fwmark 2 table to_net_b
>>ip route show table to_net_b
172.31.0.0/16 via 169.254.3.1 dev vti3

ip rule add fwmark 4 table to_net_a
>>ip route show table to_net_a
192.168.0.0/16 via 169.254.4.1 dev vti1

СООТВЕТСТВУЮЩИЕ ПАРАМЕТРЫ ЯДРА:

net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.netfilter.nf_conntrack_tcp_be_liberal = 1

В моем случае использования должна быть допустима асимметричная маршрутизация.Тем не менее, блоки NAT предназначены для обработки сетевого трафика в активной / активной настройке, поэтому пакеты протоколов, ориентированных на установление соединения, могут проходить через любой блок в любое время.Я что-то упускаю из-за собственного поведения таблицы iptables nat, из-за которого обратный трафик не попадает в него?Если да, то есть ли обходной путь для этого?

...