Linux iptables DNAT для входящего пакета без conntrack (без сохранения состояния)

Linux iptables DNAT для входящего пакета без conntrack (без сохранения состояния)

В моем linux box 10.20.1.1я получил два UDP-приложения, привязанных к порту 46000 (App A)и 36000(App B)соответственно. Приложения взаимодействуют с двумя UDP-серверами, привязанными как 10.10.1.1:36000 (Srv X)и 10.10.1.2:36000 (Srv Y)соответственно.

Когда я отправляю пакет, у меня есть требование всегда использовать порт UDP src как 36000. Пакет на проводе всегда будет иметь 36000 - 36000порты src и dst.

Мои правила iptables такие, как ниже. Я намерен DNATвходящий пакет от Srv X из порта 36000 to 46000так, чтобы App A получил его.

*nat
-A PREROUTING -s 10.10.1.1/32 -p udp --dport 36000 -j DNAT --to-destination :46000

*raw
-A PREROUTING -p udp --dport 36000 -j CT --notrack
-A PREROUTING -p udp -j ACCEPT
-A OUTPUT -p udp --dport 36000 -j CT --notrack
-A OUTPUT -p udp -j ACCEPT

*filter

-A INPUT -p udp -m udp --dport 36000 -j ACCEPT --> rule 1
-A INPUT -p udp -m udp --dport 46000 -j ACCEPT --> rule 2
-A OUTPUT -p udp -m udp --dport 36000 -j ACCEPT -> rule 3

Когда я отправляю пакет из, App A to Srv Xвсе идет нормально. Нет записи conntrack в /proc/net/ip_conntrackи OUT пакет совпадает rule 3. Когда приходит ответ из Srv X to App A, пакет проходит через таблицу raw, но он DOES NOTподвергается DNATи напрямую переходит к правилу таблицы фильтров 1. Это означает, что ответ Srv X приходит на мой ящик, но он идет в App B вместо App A.

Вопросы:

  1. Таблица RAW показывает, что нет CONNTRACK. Однако, приведенное выше поведение указывает на то, что первый пакет App A -> Srv Xс src и dst port 36000 - 36000отслеживается каким-то модулем где-то. Следовательно, ответ от, Srv X -> App Aпохоже, не подвергается DNAT. Как этого избежать CONNTRACK?

  2. Как гарантировать, что каждый входящий пакет от Srv X с портом назначения 36000 всегда проходит DNAT?

Спасибо заранее, Телекс

решение1

Глядя наДокументация Netfilter, он сказал, что«Отслеживание соединений имеет основополагающее значение для NAT», поэтому вы не можете иметь DNAT без включенияconntrack.

Связанный контент