由于某些原因,我需要将服务器 IP 切换到另一个 IP,以便通过 vpn 被其他地方的另一台计算机看到。因此,我使用 iptables(直到昨天才知道这一点)并在自己的网络中进行了测试,结果如下:
- 服务器A= 172.19.128.239
- Ubuntu= 172.19.128.237
- 客户B= 172.19.128.248
客户B可以直接请求服务器A服务,以及服务器A提供它。
那么我想要那个客户B请求服务Ubuntu,然后 ubuntu 要求它服务器A;服务器A将回答Ubuntu和Ubuntu将回答客户B,它接收服务却不知道服务器A
它使用以下指令工作:
sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport 28000 -j DNAT --to-destination 172.19.128.239:28000
iptables -t nat -A POSTROUTING -p tcp -j SNAT --to-source 172.19.128.237
请注意,为了使其正常工作,我需要将源地址重置为 ubuntu,以便客户端 B 接收它,就好像它是他指定的相同 IP 一样。我不知道为什么如果我设置 MASQUERADE 指令而不是 SNAT 指令,它也会正常工作:
iptables -t nat -A POSTROUTING -j MASQUERADE
所以这个测试成功了,但是,我需要使用通过 VPN(ipsec)连接的另一个网络中的另一个 IP 进行同样的事情,即服务器A2192.168.200.202
所以我尝试用以下方式替换上面的 IP:
sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport 28000 -j DNAT --to-destination 192.168.200.202:28000
iptables -t nat -A POSTROUTING -p tcp -j SNAT --to-source 172.19.128.237
但它不起作用。请注意,VPN 运行正常,因为我可以 ping 通服务器A2192.168.200.202 均来自客户B以及来自Ubuntu。此外,即使我直接连接,它也能正常工作客户B到服务器A2无需通过Ubuntu。
对于我来说现在不清楚,我应该检查什么?
答案1
已解决:我输入了以下命令,但我漏掉了一个。
iptables -t nat -A PREROUTING -s 172.19.128.248 -j DNAT --to-destination 192.168.200.202
iptables -t nat -A PREROUTING -s 192.168.200.202 -j DNAT --to-destination 172.19.128.248
iptables -t nat -A POSTROUTING -p tcp -j SNAT --to-source 172.19.128.237