![返回数据包未在我构建的 Linux 路由器上路由](https://linux22.com/image/141832/%E8%BF%94%E5%9B%9E%E6%95%B0%E6%8D%AE%E5%8C%85%E6%9C%AA%E5%9C%A8%E6%88%91%E6%9E%84%E5%BB%BA%E7%9A%84%20Linux%20%E8%B7%AF%E7%94%B1%E5%99%A8%E4%B8%8A%E8%B7%AF%E7%94%B1.png)
我创建了一个在 Pi 上运行 Raspbian 的路由器,并将一堆客户端连接到它。
这只是一个玩具项目,我只关心节点之间的路由,所以我没有使用 NAT 或类似的东西。
布局如下所示(我正在使用 ECMP,因此两个节点的地址为10.0.0.4
):
我已在路由器上启用 ARP 代理和 IP 转发
pi@raspberrypi-router:~ sysctl net.ipv4.conf.all.proxy_arp
net.ipv4.conf.all.proxy_arp = 1
pi@raspberrypi-router:~ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
并且反向路径过滤被禁用
pi@raspberrypi-router:~ sysctl net.ipv4.conf.all.rp_filter
net.ipv4.conf.all.rp_filter = 0
我在路由器上配置了一些路由
pi@raspberrypi-router:~ ip route show
10.0.0.4
nexthop dev eth0 weight 1
nexthop dev eth1 weight 1
10.0.0.50 via 10.0.0.8 dev eth2
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.85
10.0.0.50
从路由器执行 Ping操作很顺利
pi@raspberrypi-router:~ ping 10.0.0.50
PING 10.0.0.50 (10.0.0.50) 56(84) bytes of data.
64 bytes from 10.0.0.50: icmp_seq=1 ttl=64 time=1.07 ms
64 bytes from 10.0.0.50: icmp_seq=2 ttl=64 time=1.04 ms
^C
--- 10.0.0.50 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 1.049/1.064/1.079/0.015 ms
10.0.0.4
与从路由器执行 ping 操作一样
pi@raspberrypi-router:~ ip roping 10.0.0.4
PING 10.0.0.4 (10.0.0.4) 56(84) bytes of data.
64 bytes from 10.0.0.4: icmp_seq=1 ttl=64 time=1.08 ms
64 bytes from 10.0.0.4: icmp_seq=2 ttl=64 time=1.05 ms
^C
--- 10.0.0.4 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 1.052/1.069/1.087/0.037 ms
10.0.0.4
但是ping10.0.0.50
不工作。来自的回复10.0.0.4
永远不会路由回10.0.0.50
,我已经使用 TCPDump 验证了这一点
在 上10.0.0.4
,我看到 ICMP 回显请求到达并发送回复
21:30:01.078281 IP 10.0.0.50 > 10.0.0.4: ICMP echo request, id 3819, seq 2109, length 64
21:30:01.078388 IP 10.0.0.4 > 10.0.0.50: ICMP echo reply, id 3819, seq 2109, length 64
在路由器eth0
界面上,我看到回复已经到此为止
21:30:47.078732 IP 10.0.0.50 > 10.0.0.4: ICMP echo request, id 3819, seq 2155, length 64
21:30:47.079286 IP 10.0.0.4 > 10.0.0.50: ICMP echo reply, id 3819, seq 2155, length 64
但这就是结束,回复永远不会回到10.0.0.50
我已经做了一些调试,ip route
看起来不错?
pi@raspberrypi-router:~ $ sudo ip route get to 10.0.0.50 from 10.0.0.4 iif eth0
10.0.0.50 from 10.0.0.4 dev eth2
cache iif eth0
任何想法有什么问题吗?