IPTables nat 在满足多条规则时会限制 TCP SYN

IPTables nat 在满足多条规则时会限制 TCP SYN

Linux内核是4.9.17-8.31

我打开了许多映射到单个内部端口的外部端口。原因是每个客户组都有自己的端口,这允许使用 tc 进行上游计费。

规则如下: iptables -t nat -A PREROUTING -i eth0 -p tcp --match multiport --dports 3000,3032,3064,3096,3128,3160,3192,3224,3256,3288 -j REDIRECT --to-port 54321 iptables -t nat -A PREROUTING -i eth0 -p tcp --match multiport --dports 3330,3352,3384,3416,3448,3480,3512,3544,3576,3608 -j REDIRECT --to-port 54321 iptables -t nat -A PREROUTING -i eth0 -p tcp --match multiport --dports 3640,3672,3704,3736,3768,3800,3832,3864,3896,3928 -j REDIRECT --to-port 54321 iptables -t nat -A PREROUTING -i eth0 -p tcp --match multiport --dports 3960,3992,3024,3056,3088,3113,3152,3184,3216,3248 -j REDIRECT --to-port 54321

如果我测试 400 个连接,并满足其中一条规则,则所有连接都会顺利进行。

如果我测试 100 个连接,命中 4 条规则行中的每一条,我会看到 TCP SYN 数据包的超时和重新传输,我可以使用 tcpdump 捕获 TCP SYN 到达但尚未响应的 TCP SYN ACK 响应。

我找不到丢失或错误点,并且所有符合一条规则的连接都非常稳定。在我的测试场景中,所有 400 个连接都来自单个主机,不确定在更现实的场景中是否存在问题,因为连接将来自多个主机。

为了测试目的,我取消了 tc 的配置,并且可以仅使用 iptables 重现错误。

有兴趣看看过去是否观察到过这种行为。

相关内容