Назад | Перейти на главную страницу

Двунаправленный NAT с iptables

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

Установка

Кластер состоит из главного устройства и ряда узлов, а также некоторой периферии. Узлы находятся во внутренней сети, скрытой от нашей интрасети или Интернета. NAT уже установлен на главном сервере, поэтому узлы имеют доступ к внутренним и внешним серверам. Эта часть работает.

Внешний интерфейс ведущего устройства находится в той же подсети, что и наши рабочие станции, которые имеют общий шлюз вне нашего контроля.

Изменить: кластер работает под управлением CentOS 7, ПК запускают дистрибутив на основе Ubuntu xenial.

Задание

Некоторым из наших программных пакетов требуется прямой доступ к узлам. Для этого мы хотели настроить второй NAT на главном устройстве с помощью iptables и добавить IP-маршрут на ПК для отправки трафика на 10.10.1.0/24 через мастер.

Конфигурация

мастер: IP-маршрут

default via 123.45.67.254 dev eth0 proto static metric 100
10.10.0.0/16 dev eth1 proto kernel scope link src 10.10.0.1
123.45.67.0/23 dev eth0 proto kernel scope link src 123.45.67.204 metric 100

мастер: iptables -vnL -t nat

Chain PREROUTING (policy ACCEPT 7356 packets, 880K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 4884 packets, 687K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 3445 packets, 225K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 3445 packets, 225K bytes)
 pkts bytes target     prot opt in     out     source               destination
  439 33324 MASQUERADE  all  --  *     eth0    10.10.1.0/24         0.0.0.0/0
61828 3710K MASQUERADE  all  --  *     eth1    123.45.67.0/23       10.10.1.0/24

Использование SNAT вместо MASQUERADE не имеет значения.

узел: IP-маршрут

default via 10.10.0.1 dev eth1
10.10.0.0/16 dev eth1 proto kernel scope link src 10.10.1.1

pc: ip route

default via 123.45.67.254 dev eth0  proto static  metric 100
10.10.0.0/16 via 123.45.67.204 dev eth0
123.45.67.0/23 dev eth0  proto kernel  scope link  src 123.45.67.191  metric 100

Диагноз на данный момент

Мое лучшее предположение состоит в том, что маршрутизатор с отслеживанием состояния по пути сбрасывает пакет SYN + ACK из-за того, что его исходный адрес перезаписывается на ведущем устройстве, поэтому его связь с исходным пакетом SYN теряется.

Как мы можем заставить это работать?

Сообщите мне, если нужны дополнительные конфиги / логи.