我想在具有多个公共 IP 地址(位于不同的子网和不同的网关,但具有相同的物理以太网接口)的服务器/路由器上设置 nat,使用地址 A 来处理来自服务器的所有本地流量,使用地址 B 来处理 nat 后面的其他机器。我之前做过很多简单的 nat 设置,但很少在同一台机器上使用多个非本地网络专用地址。假设我想要的设置是可行的,我该如何设置它?
答案1
从您的要求中我了解到,您需要两个 nat,一个用于本地网络,另一个用于服务器本身。您希望本地 ips/LAN 应通过地址 A 发出,服务器生成的流量应通过地址 B 发出。
首先通过子接口在外部以太网上添加地址 A 和地址 B。
ifconfig eth0 address A/x.x.x.x
ifconfig eth0:1 address B/x.x.x.x
第二步 添加LAN网络的SNAT规则
iptables -t nat -A POSTROUTING -s < LAN IP NETWORK > -o eth0 -j SNAT --to < address a >
第三,为其余部分添加 SNAT(这也将包括源机器)
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to < address B >
如果这不起作用,我们可以测试一下。
答案2
假设我们有一个A
名为的主要接口eth0
:
inet 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255
另一个接口B
名为eth1
:
inet 192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255
C
另外,子网中还有第三个网络10.0.0.0/24
,我们希望将流量路由到A
或B
。
首先检查ip rule ls
:
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
和主路由策略ip route list table main
default via 192.168.1.1 dev eth0
10.0.0.0/24 dev lxc proto kernel scope link src 10.0.0.1
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.1 metric 100
现在我们要为具有 IP 地址的邮件服务器添加一条规则,10.0.0.13
以通过B
接口进行路由。
echo "200 mail" >> /etc/iproute2/rt_tables
ip rule add from 10.0.0.13 table mail
检查路由表ip rule ls
0: from all lookup local
32765: from 10.0.0.13 lookup mail
32766: from all lookup main
32767: from all lookup default
最后我们添加默认路由并刷新缓存:
ip route add default via 192.168.2.1 dev eth1 table mail
ip route flush cache