为什么 traceroute 在到达目的地后会以额外的跳数结束?

为什么 traceroute 在到达目的地后会以额外的跳数结束?

如果没有阻止流量,traceroute通常以目标 IP 作为最后一跳。(在本例中为 10.1.1.10)

正常情况traceroute都会这样。

user@linux:~$ traceroute 10.1.1.10
traceroute to 10.1.1.10 (10.1.1.10), 30 hops max, 60 byte packets
 1  10.2.8.2 (10.2.8.2)  0.572 ms  0.692 ms  0.837 ms
 2  10.1.9.50 (10.1.9.50)  202.638 ms 10.1.9.78 (10.1.9.78)  202.547 ms 10.1.9.50 (10.1.9.50)  202.139 ms
 3  10.1.4.9 (10.1.4.9)  202.508 ms  202.483 ms 10.1.4.13 (10.1.4.13)  204.149 ms
 4  10.1.1.10 (10.1.1.10)  202.133 ms  202.100 ms  202.692 ms
user@linux:~$ 

最近,我遇到了一个问题,即输出中有一个额外的跳数(10.1.1.9)traceroute(查看跳数 5)。

源 IP 地址:10.2.8.8

user@linux:~$ ifconfig | head -2
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.2.8.8  netmask 255.255.255.0  broadcast 10.2.8.255
user@linux:~$ 

目标 IP 地址:10.1.1.10

附加跳数:10.1.1.9 ???

user@linux:~$ traceroute 10.1.1.10
traceroute to 10.1.1.10 (10.1.1.10), 30 hops max, 60 byte packets
 1  10.2.8.2 (10.2.8.2)  0.572 ms  0.692 ms  0.837 ms
 2  10.1.9.50 (10.1.9.50)  202.638 ms 10.1.9.78 (10.1.9.78)  202.547 ms 10.1.9.50 (10.1.9.50)  202.139 ms
 3  10.1.4.9 (10.1.4.9)  202.508 ms  202.483 ms 10.1.4.13 (10.1.4.13)  204.149 ms
 4  10.1.1.10 (10.1.1.10)  202.133 ms  202.100 ms  202.692 ms
 5  10.1.1.9 (10.1.1.9)  6201.720 ms !H * *
user@linux:~$ 

另外,如果您查看跳 2 和 3,则会发现有额外的 IP 地址(10.1.9.78 和 10.1.9.50)

为什么会发生这种情况?我以前从未见过这样的事情。

这是因为服务器配置吗?

答案1

traceroute其工作原理是发送带有连续增加的生存时间 (TTL) 字段的 UDP 或 ICMP Echo 数据包。处理数据包的每个路由器都会将 TTL 减 1。

它期望对其探测做出两种类型的响应。

  • 如果当路由器减少 TTL 时 TTL 达到 0,它会以 ICMP 超时消息进行响应并且不会转发数据包。
  • 最终目的地以 ICMP 端口不可达消息(在 UDP 情况下)或 ICMP 回显响应消息(在 ICMP 情况下)进行响应。

当它收到第二种类型时,它知道它已经到达目的地,并停止发送具有更高 TTL 的探测。请注意,它没有根据响应来自的地址做出这一决定——如果它从目标地址收到超出时间的消息,它将继续递增。

因此,您的跟踪表明路由器以 Time-Exceeded 响应,并以目标地址作为其来源。这可能意味着它是执行 NAT 的路由器,而目标地址是其后面的私有地址对应的公共地址。

但奇怪的是,最终的回应来自不同的地址。通常情况下,您会期望响应通过路由器返回,因此其私有 IP 将被转换回公共 IP。在这种情况下,您会看到两行地址均为 10.1.1.10。

显然,在这种情况下,从 10.1.1.9 到原始机器的路径不需要经过 NAT 路由器,因此其地址不会被转换。非对称路由通常会产生异常traceroute结果。在这种情况下,您的所有机器都在 10.0.0.0/8 私有地址空间内,因此有直接路径可用并不完全令人惊讶。

答案2

如果不知道路由器的配置,就无法确定 - 但是,可能的原因是目标 NAT 又名反向 NAT 又名端口转发,或者 - 在这种情况下 - 暴露的主机。

10.1.1.10 路由器可能配置为转发/DNAT一切到 10.1.1.9 主机(= 公开主机),包括来自私有 IP 的请求。从公共 IP 中,您会看到双重最后一跳,因为实际目的地 10.1.1.9 被 NAT 路由器隐藏。在这种情况下,可能只有请求被 DNATed,而回复只是按原样转发。

也有可能 10.1.1.10 和 10.1.1.9 都在其他地方进行了 DNAT,而后者是默认回复地址。这可以解释 RTT 大幅增加的原因。

答案3

注意时间。Traceroute 发送数据包,要求交换机或路由器向源回复“我正在处理”。但这些数据包可能会以不同的顺序到达目的地(本例中是您的机器),具体取决于 TTL 和响应时间配置,取决于设备之间的配置、路由表和网络拓扑。

相关内容