iptables SNAT 规则适用于 ICMP 和 TCP,但不适用于 UDP

iptables SNAT 规则适用于 ICMP 和 TCP,但不适用于 UDP

我的一个设置出现了奇怪的情况。我已在下面描述了该设置,但我有多个这样的设置,所有设置都具有相同的规则,但问题只发生在一个设置上。

我在 Centos 6.5 上执行此操作,内核版本为 3.10.14。我尝试对来自 eth0 的流量进行 SNAT,并在 eth1 上转发。我有一条 iptable 规则,其中规定(在 nat 表中)

-A POSTROUTING -s 10.92.0.0/14 -o eth1 -j SNAT --to-source 70.70.70.5 --random --persistent

70.70.70.5 是 eth1 上的 IP 地址。

我看到一个 UDP 数据包从 进入eth0,有一个 IP10.92.0.1并被路由出eth1,但从未被 NAT 化。我添加了 iptables 日志+跟踪,我看到数据包击中了 mangle POSTROUTING,但没有击中 NAT POSTROUTING。来自同一 IP 的 TCP 和 ICMP 工作正常。而且这种情况只发生在许多设置中的一个上。

我已经检查了 iptables 计数器,没有看到该数据包符合 NAT POSTROUTING 规则。

我启用了连接跟踪,可以看到 TCP 和 ICMP 的连接被跟踪。我还看到由盒子发起的 UDP 数据包被跟踪(并进行了网络地址转换),只有转发的数据包没有被跟踪。

iptables 日志显示数据包已正确从 eth1 路由出去。

我尝试通过将 17(对于 UDP)写入 /proc/sys/net/netfilter/nf_conntrack_log_invalid 来启用 conntrack 日志记录。但我没有看到任何日志。

我尝试了不同的目标地址和端口,但还是不行。我没有任何地方有 UDP 特定规则。

我在 conntrack 表中可能有 15 个连接。最大值为 65K。

有什么方法可以检查为什么 UDP 连接未被跟踪?有什么日志可以提供帮助吗?

UDP 和 NAT 是否存在问题?

还有其他方法可以调试NF模块吗?

提前感谢任何帮助/指点。

相关内容