![如何将每个 NAT 客户端的流量绑定到外部 IP 地址?](https://linux22.com/image/621555/%E5%A6%82%E4%BD%95%E5%B0%86%E6%AF%8F%E4%B8%AA%20NAT%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E7%9A%84%E6%B5%81%E9%87%8F%E7%BB%91%E5%AE%9A%E5%88%B0%E5%A4%96%E9%83%A8%20IP%20%E5%9C%B0%E5%9D%80%EF%BC%9F.png)
我有一个具有 2 个 IP 地址的 NAT 路由器,假设111.111.111.111
和分别222.222.222.222
与接口eth0
和相关联eth0:1
。
我有两台服务器通过接口tap0
(OpenVPN 客户端)连接到此 NAT 网关,其 IP 分别为10.0.0.1
和10.0.0.2
。我希望它们模拟每个 NAT 路由器的 IP 地址。
到目前为止,我制定了以下iptables
规则:
iptables -A PREROUTING -d 111.111.111.111/32 -i eth0 -j DNAT --to-dest 10.0.0.1
iptables -A PREROUTING -d 222.222.222.222/32 -i eth0 -j DNAT --to-dest 10.0.0.2
这会将所有传入连接路由到正确的服务器。但是,传出连接仍使用相同的 IP 地址来访问网络。我如何创建一条规则,强制这些本地服务器的所有传出流量使用其各自的外部 IP 地址并实现我想要的模拟效果?
答案1
好吧,我最终自己解决了这个问题,显然我的问题是必须在规则之前添加这条规则-A POSTROUTING -o eth0 -j MASQUERADE
。
iptables -t nat -A POSTROUTING -s 10.0.0.1/32 -o eth0 -j SNAT --to 111.111.111.111
iptables -t nat -A POSTROUTING -s 10.0.0.2/32 -o eth0 -j SNAT --to 222.222.222.222
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE