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

iptables / nat / prerouting игнорирует UDP-пакеты?

Тот же эффект на многих серверах с разными версиями ядра.

Существует несколько правил DNAT Iptables:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 12345 -j DNAT --to-destination 10.20.30.40:5678
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 23456 -j DNAT --to-destination 10.11.12.13:5789
....
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 34567 -j LOG --log-prefix 'natudp: '
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 34567 -j DNAT --to-destination 10.55.66.77:34567

Проблема: правила UDP не работают для входящих запросов от eth0.
Счетчики пакетов и байтов для них имеют нулевые значения.
Упрощение (удаление dport) не дает никакого эффекта.
В результате запросы передаются в цепочку filter / INPUT вместо FORWARD.

Для пакетов с виртуальных интерфейсов (tap, veth) такой проблемы нет - они перехватываются правилами предварительной маршрутизации.
Для TCP такой проблемы нет.
Для UDP такой проблемы нет ответы.
Но входящие UDP-запросы от eth0 вообще игнорируются правилами предварительной маршрутизации:

# iptables -t nat -nvL PREROUTING
Chain PREROUTING (policy ACCEPT 3 packets, 174 bytes)
 pkts bytes target   prot opt in     out   source        destination         

(testing rules)
    2   126 LOG      udp  --  *      *     0.0.0.0/0     0.0.0.0/0      LOG flags 0 level 4 prefix "prerouting-udp: "
    0     0          udp  --  *      *     1.2.3.4       0.0.0.0/0               
    0     0          udp  --  *      *     1.2.3.4       0.0.0.0/0      udp dpt:25826
    0     0          udp  --  eth0   *     0.0.0.0/0     0.0.0.0/0      udp dpt:25826
    0     0          udp  --  eth0   *     1.2.3.4       0.0.0.0/0           
    0     0          udp  --  eth0   *     1.2.3.4       0.0.0.0/0      udp dpt:25826

(production rules)
    7   412 DNAT     tcp  --  eth0   *     0.0.0.0/0     0.0.0.0/0      tcp dpt:12345 to:10.20.30.40:8080
   63  3804 DNAT     tcp  --  eth0   *     0.0.0.0/0     0.0.0.0/0      tcp dpt:56789 to:10.30.40.50:8000
    0     0 DNAT     udp  --  eth0   *     1.2.3.4       0.0.0.0/0      udp dpt:25826 to:10.40.50.60:25826

Любые идеи?