Você também precisa de uma regra FORWARD, por exemplo:
iptables -t filter -I FORWARD -m udp -p udp --dst 10.99.193.115 --dport 54321 -j ACCEPT
e para habilitar o encaminhamento, é claro:
sysctl -w net.ipv4.ip_forward=1
Eu tenho uma máquina que tem uma regra DNAT que redireciona os dados para o servidor vizinho:
iptables -t nat -A PREROUTING -p udp -d 10.99.193.116 --dport 54321 -j DNAT --to 10.99.193.115:54321
Como pode ser visto, esta regra é acionada com bastante frequência:
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
No entanto, olhando para a interface, os pacotes redirecionados não são enviados na interface.
$ 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
Esse problema ocorreu depois que a máquina foi reinicializada pela primeira vez depois de adicionar essas regras, então, presumivelmente, existe alguma diferença entre o momento atual e o atual. Mas o que? Ou há algum bug no kernel que significa que esses pacotes são descartados mesmo quando o contador é incrementado?
A máquina é uma caixa do CentOS4, Linux 2.6.9-67.0.1.ELsmp.