如果没有阻止流量,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 和响应时间配置,取决于设备之间的配置、路由表和网络拓扑。