使用 iptables 进行多个端口转发

使用 iptables 进行多个端口转发

我在 VPS A(1.1.1.1) 的 30000-32000 端口上运行了服务。

我希望 VPS B(2.2.2.2) 将它们端口转发到 20000 - 22000。

(您可以查看下面的演示图链接来了解我想要实现的目标:D)

转发到不同的端口

我使用下面的命令来设置 iptables:

iptables -t nat -A PREROUTING -p tcp --dport 20000:22000 -j DNAT --to-destination 1.1.1.1:30000-32000
iptables -t nat -A POSTROUTING -p tcp -d 1.1.1.1 --dport 30000:32000 -j SNAT --to-source 2.2.2.2
20000:22000
iptables -t nat -A PREROUTING -p udp --dport 20000:22000 -j DNAT --to-destination 1.1.1.1:30000-32000
iptables -t nat -A POSTROUTING -p udp -d 1.1.1.1 --dport 30000:32000 -j SNAT --to-source 2.2.2.2
20000:22000

经过一番测试,我发现似乎只有端口20000在转发原始服务器的端口30000。但是其他端口不起作用。

我检查了以下 4 件事: 1. VPS A(1.1.1.1)的服务在端口 30000 - 32000 上运行的服务功能齐全

  1. VPS B 端口转发设置 检查 VPS B 上的 sysctl 后,ipv4 转发已启用。

(IE net.ipv4.ip_forward = 1

  1. VPS B 的 iptable 设置。我觉得没问题。您可以点击下面的链接查看具体设置。

iptables 设置

  1. 我还尝试从 VPS A 到 VPS B 进行正常的多端口转发(即 VPS A(30000-32000)>> VPS B(30000-32000))

(您可以查看下面的演示图链接,了解我想要实现的目标:D)

一切正常。

我真的不知道该怎么做。任何帮助我都感激不尽!提前谢谢!

答案1

您需要更改 iptables 规则。您的 DNAT 规则不会过滤来自用户的传入流量的目标 IP 地址。您的 SNAT 规则不会过滤来自 A 服务器的传入流量的源 IP 地址和源端口 30000:32000 范围。您需要在 B 服务器上:

iptables -t nat -A PREROUTING -p tcp -d 2.2.2.2 --dport 20000:22000 -j DNAT --to-destination 1.1.1.1:30000-32000
iptables -t nat -A POSTROUTING -p tcp -s 1.1.1.1 --sport 30000:32000 -j SNAT --to-source 2.2.2.2:20000:22000

iptables -t nat -A PREROUTING -p udp -d 2.2.2.2 --dport 20000:22000 -j DNAT --to-destination 1.1.1.1:30000-32000
iptables -t nat -A POSTROUTING -p udp -s 1.1.1.1 --sport 30000:32000 -j SNAT --to-source 2.2.2.2:20000:22000

相关内容