$ traceroute -n 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 8.8.8.8 3.158 ms 4.246 ms 5.054 ms
2 * * *
3 8.8.8.8 9.121 ms 10.245 ms 9.327 ms
4 8.8.8.8 12.134 ms 13.160 ms 13.144 ms
5 8.8.8.8 9.727 ms 10.938 ms 9.899 ms
6 * * *
7 8.8.8.8 8.138 ms 12.061 ms 11.841 ms
$ traceroute -n --icmp 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 8.8.8.8 2.046 ms 1.976 ms 1.962 ms
2 8.8.8.8 9.557 ms 9.547 ms 9.536 ms
$ traceroute -n --udp 8.8.8.8
<similar output to default mode but keeps going with * * * after last hop>
这是默认模式(上面的第一次调用)的正确跳数,具有正确的时间,但每次跳转的路由器 IP 在哪里?
跟踪路由 2.1.0
iptables 已被清除:iptables -F && iptables -F -t nat
路由表中没有什么特殊内容:
$ ip route
default via 192.168.0.1 dev eth0 proto static
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.9
最奇怪的是,这个问题发生在同一 LAN 上的 3 个不同的 Linux 主机上(x86_64 和 aarch64 以及 armv7h 上的 Arch Linux),但不会发生在第三个主机上(Windows 上 WSL 子系统上的 Arch Linux)。
更新:主机之间的区别在于主机的 IP 分配是通过路由器的 DHCP(traceroute 有效)还是在客户端配置中静态分配(traceroute 中断)。
答案1
对我来说,解决问题的一个方法是让 NATing 路由器通过 DHCP 为客户端分配 IP,而不是在客户端中设置静态 IP 配置。
据推测,路由器中的 NAT 配置在注册到路由器的 DHCP 服务器的客户端和仅出现在交换机子网上的客户端之间存在细微的差异。我努力尝试但未能找出路由器配置的具体内容,除非客户端使用 DHCP,否则不会发生这种情况。我尝试通过 Web 界面在路由器的数据库中注册静态客户端,但没有任何区别。还查看了 telnet 界面,但 shell 中没有 iptables,在命令和转储中找不到任何相关内容。路由器有专有固件。