DNAT:ed 数据包消失

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。

答案1

您还需要一个 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

相关内容