У меня есть машина с правилом 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