Я уже 2 недели ищу ответ на эту проблему и не знаю, как ее решить.Я работаю с довольно сложным сетевым дизайном в AWS с использованием Transit Gateway, поэтому я просто начну с высокоуровневого описания, и, пожалуйста, просто дайте мне знать, нужна ли оттуда конкретная информация для помощи в устранении неполадок.
У меня есть два сервера Amazon Linux (производная Centos), которые действуют как блоки NAT между двумя сетями (на данный момент мы можем называть их «net A» и «net B»).Каждый из блоков NAT имеет одинаковую конфигурацию с точки зрения их SNAT / DNAT, маршрутизации, настроек ядра и т. Д.
Вот что я протестировал:
УСПЕХ (одна коробка NAT навремя):
- Пинг от сети A к сети B успешен при использовании только первого блока NAT (второй блок NAT отключен для этого теста).
- Пинг из сети B в сеть A также успешен через первый блок NAT (второй блок NAT все еще не работает)
- Пинг из сети A в сеть B успешен при использовании только второго блока NAT(первая коробка NAT отключена для этого теста)
- Пинг-запросы из сети B в сеть A также успешны через второй блок NAT (первая коробка NAT все еще не работает)
FAILURE (обаодновременно блокируется, вызывая случайную асимметричную маршрутизацию):
- Эхо-запросы ICMP от сети A успешно передаются в сеть B через первый блок NAT.Эти запросы также попадают на хост в сети B
- Эхо-ответы ICMP попадают во второй блок NAT.Они проходят через таблицу iptables mangle PREROUTING, но никогда не переходят в таблицу iptables nat PREROUTING
- Такое же поведение происходит при проверке связи из сети 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, из-за которого обратный трафик не попадает в него?Если да, то есть ли обходной путь для этого?