1

只是在玩 netfilter REDIRECT-Target 。我想知道使用“--to-ports”(复数)时如何更改目标端口。

iptables -I PREROUTING -t nat -i test -p TCP --dport 2800 -j REDIRECT --to-ports 2900-2905

第一场比赛/命中 2800 -> 2900 ?
第二场比赛/命中 2800 -> 2901 ?
第三场比赛/命中 2800 -> 2902 ?

在我的测试中,唯一使用的端口是第一个: 2900 。在这种情况下,范围参数“--to-ports”让我感到困惑。原始端口会影响范围内正在使用的端口吗? 使用“--to-ports”指定范围,使用哪个端口?“--to-port” 也可以,但手册页中没有提到。

谢谢。

4

1 回答 1

1

netfilter是无状态的,它不能跟踪端口状态,所以循环是不可能实现的。

此参数旨在解决端口冲突问题,例如检查此规则:

iptables -t nat -A PREROUTING -p tcp --dport 1000:2000 -j REDIRECT --to-ports 2900

如果客户端想要建立 2 个连接

client:3000 <---> server:1000
client:3000 <---> server:1001

这是可能的,因为客户端可以重用其端口。如果服务器将两个连接都重定向到端口 2900,则会导致问题,这两个连接变得相同。

所以服务器需要多个冗余端口来避免这个问题。但如果客户端不重用其端口,则不会发生这种情况。

于 2013-03-14T14:59:37.617 回答