如何使用 iptables 根据 DST PORT 修改 SRC 以及修改 DST PORT

如何使用 iptables 根据 DST PORT 修改 SRC 以及修改 DST PORT

我有一个有趣的问题。

我有一台客户端机器 IP 10.10.10.55,需要连接到服务器机器 IP 10.10.10.5 它们都是 Windows 机器,并且都通过 IP 为 10.10.10.111 的网关 Linux 机器

客户端向服务器发出许多请求,出于测试目的,我希望服务器认为许多不同的 IP 正在访问它。

所以我想到使用 iptables 来从客户端模拟许多源 IP。

我制作了如下表格:

PORT | IP
1020 | 10.10.10.20
1021 | 10.10.10.21
... etc ...

然后我从不同的端口向服务器发送连接,以便网关上的 iptables 可以修改它们。

iptables -t nat -A POSTROUTING -p tcp --dport 1020 -j SNAT --to-source 10.10.10.20
iptables -t nat -A POSTROUTING -p tcp --dport 1021 -j SNAT --to-source 10.10.10.21
... etc ...

现在,问题是我实际上只需要通过端口 1418 访问服务器。这意味着我还必须修改目标端口。但这必须在 PREROUTING 中进行,这意味着我无法在 POSTROUTING 中捕获端口。

iptables -t nat -A PREROUTING -d 10.10.10.5 -p tcp -j DNAT --to-destination 10.10.10.5:1418

所以,我在这里被难住了。

我如何使用 iptables 来获得我想要的结果?我想过做某种回送。我修改预路由中的目标地址以返回网关,并更改源地址。然后当它第二次进入时,它会再次更改目标地址/端口。

iptables -t nat -A PREROUTING -s 10.10.10.55 -d 10.10.10.5 -p tcp -j DNAT --to-destination 10.10.10.111
iptables -t nat -A POSTROUTING -p tcp --dport 1020 -j SNAT --to-source 10.10.10.20

iptables -t nat -A PREROUTING -s 10.10.10.20 -d 10.10.10.111 -p tcp -j DNAT --to-destination 10.10.10.5:1418

但这根本行不通。我确信这一定有办法。谢谢帮助。

输出自iptables -L -v -n(按照标签要求):

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

答案1

我找到了使用 MARK 选项的解决方案。

对于每个端口我制定如下规则:

iptables -t nat -A PREROUTING -s 10.10.10.55 -d 10.10.10.5 -p tcp --dport 1020 -j MARK --set-mark 1020

还有一个是这样的:

iptables -t nat -A POSTROUTING -m mark --mark 1020 -j SNAT --to-source 10.10.10.20

我还有这条规则可以覆盖目的地,以便它始终能够到达它需要去的地方。

iptables -t nat -A PREROUTING -s 10.10.10.55 -d 10.10.10.5 -p tcp -j DNAT --to-destination 10.10.10.5:1418

我还需要制定一条规则来确保能够收到答复!

iptables -t nat -A PREROUTING -d 10.10.10.20 -j DNAT --to-destination 10.10.10.55

差不多就是这样了!

相关内容