通过 Linux 路由器的一个接口 ping 该路由器的另一个接口

通过 Linux 路由器的一个接口 ping 该路由器的另一个接口

我有这样一个由网络命名空间和 veth 对组成的拓扑:

------                           ------                            ------
| a1 |                           | r1 |                            | r2 |
|    | a1-eth0-----------r1-eth0 |    |r1-eth1--------------r2-eth1|    |
-----(11.0.0.1/30)   (11.0.0.2/30)----(11.0.0.9/30)   (11.0.0.10/30)----- 

为了r1net.ipv4.ip_forward is 1

我可以使用以下命令成功 pingr2通:a1

ping -I a1-eth0 -c1 11.0.0.10

另外,我可以r2通过r1使用r1-eth1接口和命令成功 ping 通:

ping -I r1-eth1 -c1 11.0.0.10

那么,为什么我无法使用接口pingr2通呢?我明白了r1r1-eth0目标主机不可达:

ping -I r1-eth0 -c1 11.0.0.10
PING 11.0.0.10 (11.0.0.10) from 11.0.0.2 r1-eth0: 56(84) bytes of data.
From 11.0.0.2 icmp_seq=1 Destination Host Unreachable

--- 11.0.0.10 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

同样,我无法通过该路由器的另一个接口 ping 通路由器 r1 的一个接口:

# here I get Destination Host Unreachable again:
ping -I r1-eth0 -c1 11.0.0.9

# here I get Redirect Host(New nexthop: 11.0.0.9):
ping -I r1-eth1 -c1 11.0.0.2

这是r1的主路由表:

ip route
default via 11.0.0.10 dev r1-eth1 
11.0.0.0/30 dev r1-eth0  proto kernel  scope link  src 11.0.0.2 
11.0.0.8/30 dev r1-eth1  proto kernel  scope link  src 11.0.0.9

所以在我看来,问题在于路由器的接口r1无法相互通信。但是,正常情况下会在和r1之间转发流量。a1r2

感谢您的关注!

更新:

我需要解决上面讨论的问题才能解决问题tcpdump 记录中未看到 Tc qdisc 延迟。我已经找到了该问题的解决方案,并通过链接发布到那里。所以我不再需要这个问题了,我关闭它。感谢大家的阅读和参与!

答案1

为什么要通过错误的接口发送数据包,即使用与您想要到达的网络没有连接的接口?这就像在错误的站台上跳上地铁一样。接口之间不进行通信,主机之间进行通信。主机通过网络与其他主机通信。接口选择是根据路由表条目完成的。据我所知,如果您-I完全删除这些选项,您的 ping 命令应该可以工作。

相关内容