![使用 iptables 进行多个端口转发](https://linux22.com/image/711280/%E4%BD%BF%E7%94%A8%20iptables%20%E8%BF%9B%E8%A1%8C%E5%A4%9A%E4%B8%AA%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91.png)
我在 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 上运行的服务功能齐全
- VPS B 端口转发设置 检查 VPS B 上的 sysctl 后,ipv4 转发已启用。
(IE net.ipv4.ip_forward = 1
)
- VPS B 的 iptable 设置。我觉得没问题。您可以点击下面的链接查看具体设置。
- 我还尝试从 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