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个接口是广域网界面,以太网0和192.168.5.8/24知识产权和无线局域网0 与 192.168.61.128/24知识产权。另一个接口是局域网和10.196.3.254/16知识产权。
Linux服务器1 eth0连接到Linux服务器2 eth0和192.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.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