基于策略的路由导致 NAT 无法正常工作

基于策略的路由导致 NAT 无法正常工作
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个接口广域网界面,以太网0192.168.5.8/24知识产权和无线局域网0 与 192.168.61.128/24知识产权。另一个接口是局域网10.196.3.254/16知识产权。

Linux服务器1 eth0连接到Linux服务器2 eth0192.168.5.9/24知识产权。

上述策略路由命令是针对Linux策略路由实现的。默认路由是 rj45,但在某些情况下默认路由更改为 WIFI。

当以下 NAT iptables 命令不生效时,我遇到问题,特别是使用以下命令从 192.168.5.8/24 表 rj45 添加 ip 规则。当。。。的时候客户端 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 在此设置中不起作用吗?为了清楚起见,下面是网络图。

在此输入图像描述

答案1

您的 ip 规则与子网 ID 而不是地址匹配,因为您在那里有前缀长度/24(而不是/32或省略)。

前缀长度/24仅当您在接口上配置 IP 时才合适/必需,在这种情况下,它用于表示子网掩码/大小。在其他情况下,除非您确实想要匹配子网,否则不应包含它(在这种情况下,您也应该使用正确的地址,例如192.168.5.0for /24)。

虽然192.168.5.8/24作为子网 ID 并不完全有效/有意义,但它可能会导致被192.168.5.9规则覆盖。因此,来自的“反向 DNAT”回复将通过服务器 1 上的路由192.168.5.9路由/转发回其自身,而不是路由/转发到。defaultrj4510.196.3.253

相关内容