2

В моем 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 чтобы приложение 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 все идет хорошо. В файле /proc/net/ip_conntrack нет записи conntrack, а пакет OUT соответствует rule 3 . Когда ответ приходит от Srv X to App A , пакет пересекает необработанную таблицу, но он DOES NOT проходит DNAT и напрямую переходит к правилу таблицы фильтрации 1. Это означает, что ответ Srv X приходит на мою коробку, но идет в приложение B вместо приложения A.

Вопросы:

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

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

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

1 ответ1

2

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .