traceroute 有时不打印整个路线

网络工程 跟踪路由
2021-07-19 00:17:44

监控我的网络 前段时间我意识到 traceroute 过去常常打印比现在更完整的路由……而且,现在,traceroute 有时会忽略一些设备。

例如,这是一个更完整的traceroute,包括我的网关:

$ sudo traceroute -F xxx.xx.136.5

traceroute to xxx.xx.136.5 (xxx.xx.136.5), 30 hops max, 60 byte packets

 1  * * *

 2  192.168.1.1 (192.168.1.1)  1.607 ms  1.604 ms  1.627 ms

 3  xxx.xx.136.5 (xxx.xx.136.5)  3.286 ms  5.729 ms  7.416 ms

现在,完全相同的命令省略了我的网关:

$ sudo traceroute -F xxx.xx.136.5

traceroute to xxx.xx.136.5 (xxx.xx.136.5), 30 hops max, 60 byte packets

1  xxx.xx.136.5 (xxx.xx.136.5)  24.004 ms  28.267 ms  42.343 ms

这些命令是在同一台机器上给出的。

如何设置始终拥有整个路线?

4个回答

任何形式的跟踪路由都通过将 IP 数据包的 TTL 加 1 来工作。第一个数据包的 TTL 为 1,第 1 个路由器递减计时器并通过 ICMP(超过生存时间)发送错误消息。标准 *NIX traceroute 使用 UDP,Windows tracert ICMP,也有使用 TCP 的版本。

看不到跳的原因有多种:

  • 人们认为ICMP是邪恶的一个阻止它。这将导致许多问题(例如 PMTU 发现)。
  • 人们只会想到windows并阻止UDP。尝试跑步traceroute -I应该是诀窍。
  • 您可能还想尝试使用 tcptraceroute
  • 如果路由器正忙于路由数据包,则我没有资源发送 ICMP 数据包。

我更喜欢使用tcptraceroutehop-to-hop 路由的更好细节。

tcptraceroute基本上绕过大多数保护性防火墙,忽略traceroute. 使用端口 80 或 53。

如果您的网关有日志记录选项,请启用它。您可能会找到解释观察到的行为的条目。路由器可能会将重复的 ICMP 解释为 DOS。

...虽然,直觉上,人们可能期望来源在外部网络上。

我发现了我的 Intranet 上 traceroute(以及 mtr、tpctraceroute 等)的真正作用。这是我自己的路由器隐藏了已知的跃点。我的路由器(类似 TP-Link WAP,使用 Linux 2.6.15)用于隐藏已知路由的跃点。所以,在谷歌上给出 traceroute 的 vg 将只输出一跳,谷歌本身,因为我的路由器非常了解路由(我整天都在使用谷歌)。但是,只需在接入点上直接连接 PC,然后向 google 提供 traceroute,它就会输出从这里到 google 的整个路由。

所以,现在我知道发生了什么,但不知道为什么会这样。

作为一种解决方法,我使用在(有问题的)路由器上运行的嵌入式 linux 提供的 tracerout:也就是说,路由器通过我的 PC 隐藏跃点,在其自己的嵌入式系统中提供了一个可以正确执行 tracerout 的接口......

不管怎样,谢谢回复!