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

DNAT: пропадание пакетов ed

У меня есть машина с правилом DNAT, которое перенаправляет данные на соседний сервер:

iptables -t nat -A PREROUTING -p udp -d 10.99.193.116 --dport 54321 -j DNAT --to 10.99.193.115:54321

Как видно, это правило срабатывает довольно часто:

pkts bytes target     prot opt in     out     source               destination         
192K   19M DNAT       udp  --  *      *       0.0.0.0/0            10.99.193.116       udp dpt:54321 to:10.99.193.115:54321 

Однако, глядя на интерфейс, перенаправленные пакеты не отправляются через интерфейс.

$ tcpdump -i eth0 -n port 54321
17:03:36.553363 IP 172.21.0.159.54321 > 10.99.193.116.54321: UDP, length 82
17:03:37.514257 IP 172.21.0.20.54321 > 10.99.193.116.54321: UDP, length 39
17:03:37.633556 IP 172.21.0.91.54321 > 10.99.193.116.54321: UDP, length 82
17:03:37.678211 IP 172.21.0.196.54321 > 10.99.193.116.54321: UDP, length 68
17:03:38.542620 IP 172.21.0.185.54321 > 10.99.193.116.54321: UDP, length 39

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

Машина представляет собой коробку CentOS4, Linux 2.6.9-67.0.1.ELsmp.

Вам также понадобится правило FORWARD, например:

iptables -t filter -I FORWARD -m udp -p udp --dst 10.99.193.115 --dport 54321 -j ACCEPT

и, конечно же, для включения пересылки:

sysctl -w net.ipv4.ip_forward=1