这是这个问题我在 SuperUser 上看到,但尚未提供任何答案。
用户删除了路由表中的第二条路由,
# ip route show
default via 192.168.73.1 dev eth0 proto static
192.168.73.0/24 dev eth0 scope link
只留下默认设置。他发现他可以连接ping
网络上的其他电脑,但是它们无法ping
支持路由表不完整的电脑。
我在真实网络上调查了这个问题(而不是原来的虚拟设置),方法是tcpdump
:事实证明不完整pc 确实向 ping 返回了回复,但是这并没有到达原始的、完整的 pc。
因此,我尝试在两个方向上打开 ssh 会话,但现在两次尝试都失败了。这是 Wireshark 对失败连接的捕获:
PUSH(PSH/ACK)的存在和大量的重传清楚地表明任何一台 PC 都无法连接到另一台。
有人能详细解释一下原因吗?
答案1
我猜你忘记了另一个站点的返回路由。另一边的 PC 需要设置适当的网关才能访问网络,而不是使用默认网关。
答案2
[@moderators ecc,评论太长了,所以我只能打赌我的答案了。我会更新此内容]
由于现在无法进行全面测试,我只能猜测。缺少 eth0 子网上的路由意味着所有内容都应该通过默认网关。
实际上,我尝试在我的计算机上 ping 同一子网中的另一台主机和网关,但我看到的结果似乎与我的猜测一致。
来自我的机器(缺少本地子网的路由)的数据包与我 ping 的 IP 一致,但带有网关的 arp 地址。在 wireshark 中检查嗅探 arp 地址,以便我们可以获得更多数据。
清除 ARP 缓存后,进行清理测试,并在此发布您的发现。
我认为正在发生的事情是,网络堆栈需要 (nosubnet) 客户端 IP 上的路由才能知道在哪里可以自由“arp”,因为它无需网关即可访问。
拉出来,唯一可能的路线是默认GW,并且我认为该(无子网)机器上只有一个网络接口。
现在,考虑到您正在向网关发送 arp 数据包,这意味着向其 arp 地址发送数据包,该数据包是发往同一子网中具有另一个 IP(目标)的客户端的。
GW 在目标的 ARP 地址转发它们,具有正确配置的本地路由的目标回复发送主机(没有子网的主机)。
简而言之,不对称路由。
第一个主机(没有正确本地子网路由的发送方)将其视为格式错误的数据包(Alien),因为它将其发送到网关的 ARP 地址。
[/我希望没有网络人员会因为我最终的错误而严厉打击我]