我有这样一个由网络命名空间和 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)-----
为了r1
,net.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
通呢?我明白了r1
r1-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
之间转发流量。a1
r2
感谢您的关注!
更新:
我需要解决上面讨论的问题才能解决问题tcpdump 记录中未看到 Tc qdisc 延迟。我已经找到了该问题的解决方案,并通过链接发布到那里。所以我不再需要这个问题了,我关闭它。感谢大家的阅读和参与!
答案1
为什么要通过错误的接口发送数据包,即使用与您想要到达的网络没有连接的接口?这就像在错误的站台上跳上地铁一样。接口之间不进行通信,主机之间进行通信。主机通过网络与其他主机通信。接口选择是根据路由表条目完成的。据我所知,如果您-I
完全删除这些选项,您的 ping 命令应该可以工作。