echo "200 rj45" >> /etc/iproute2/rt_tables
echo "201 WIFI" >> /etc/iproute2/rt_tables
ip route add default via 192.168.5.9 dev eth0
ip rule add from 192.168.5.8/24 table rj45
ip rule add from 192.168.61.128/24 table WIFI
ip route add default via 192.168.5.9 dev eth0 table rj45
ip route add default via 192.168.61.38 dev wlan0 table WIFI
iptables -t nat -A POSTROUTING -s 10.196.0.0/16 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.196.0.0/16 -o wlan0 -j MASQUERADE
ip route flush cache
你好。上述命令是在 Linux 服务器 1 启动时输入的。
在Linux服务器1中,有3个接口。 2个接口是WAN接口,eth0具有192.168.5.8/24 IP,wlan0 具有192.168.61.128/24 IP。另一个接口是LAN ,IP为10.196.3.254/16。
Linux 服务器 1 eth0通过IP 192.168.5.9/24连接到Linux 服务器 2 eth0。
上述策略路由命令是针对Linux策略路由实现的。默认路由是 rj45,但在某些情况下默认路由更改为 WIFI。
当以下 NAT iptables 命令不生效时,我遇到问题,特别是使用命令ip Rule add from 192.168.5.8/24 table rj45。当客户端IP 10.196.3.253/16 ping 192.168.5.9时,这是Linux Server 1 eth0的子网。 如果10.196.3.253 ping 192.168.3.9哪个Linux服务器2别名IP,就可以ping通。
Linux 服务器 2 上的 tcpdump -i eth0 icmp 显示它尝试回复 10.196.3.253 的 icmp ping,这意味着 ICMP ping 很可能不是 NAT。下面是输出
12:31:14.519000 IP 192.168.5.8 > 192.168.5.9: ICMP echo request, id 4213, seq 155, length 64
12:31:14.519018 IP 192.168.5.9 > 192.168.5.8: ICMP echo reply, id 4213, seq 155, length 64
12:31:14.520018 IP 192.168.5.9 > 10.196.3.253: ICMP echo reply, id 4213, seq 155, length 64
知道为什么 NAT 在此设置中不起作用吗?为了清晰起见,下面是网络图。
您的 ip 规则与子网 id 而不是地址匹配,因为您在那里有前缀长度
/24
(而不是/32
或省略)。前缀长度
/24
仅当您在接口上配置 IP 时才合适/必需,在这种情况下,它用于表示子网掩码/大小。在其他情况下,除非您确实想要匹配子网,否则不应包含它(在这种情况下,您也应该使用正确的地址,例如192.168.5.0
for/24
)。虽然
192.168.5.8/24
作为子网 ID 并不完全有效/有意义,但它可能会导致192.168.5.9
被规则覆盖。因此,来自的“反向 DNAT”回复将通过服务器 1 上的路由192.168.5.9
路由/转发回其自身,而不是路由/转发到。default
rj45
10.196.3.253