我有一个运行在 Ubuntu 14.04 上的云服务器,它通过 IPsec 隧道连接。
该服务器有一个实际接口,其公共 IP 为 xxxx,还有一个虚拟接口 172.16.100.1。所有到远程网络的流量都应通过 IP 为 172.16.100.1 的虚拟接口路由。因此,我设置了一个路由条目。这对于该服务器上生成的所有流量都有效。
route add -net 172.17.1.2/21 gw 172.16.100.1 dev eth0:1
但另一个要求是,如果云服务器在其具有特定端口的公共 IP 上接收流量,则该流量也应转发到远程网络。我尝试通过添加 IP 表条目来实现这一点:
iptables -t nat -A PREROUTING -p tcp --dport 45678 -j DNAT --to-destination 172.17.1.2:29871
但问题是它以某种方式忽略了路由配置,只使用源 IP 转发请求,而不是使用 172.16.xx
这种配置是否正确,还是我完全错了?我还需要配置什么才能正确转发流量?
答案1
添加以下 POSTROUTING 条目已解决问题:
iptables -t nat -A POSTROUTING -p tcp --dport 29871 -j SNAT --to-source 172.16.100.1