我有一台机器,它具有将数据重定向到邻近服务器的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盒,Linux2.6.9-67.0.1.ELsmp。
发布于 2011-10-10 15:22:14
您还需要一个前向规则,例如:
iptables -t filter -I FORWARD -m udp -p udp --dst 10.99.193.115 --dport 54321 -j ACCEPT当然,为了便于转发:
sysctl -w net.ipv4.ip_forward=1https://serverfault.com/questions/320181
复制相似问题