TTL 在传输过程中已过期

TTL 在传输过程中已过期

我购买了一台有 4 个 IP 地址的服务器,需要手动配置

  • yy.zz.159.7/23 (gw yy.zz.156.1)
  • yy.zz.159.8/23 (gw yy.zz.156.1)
  • yy.zz.159.13/23 (gw yy.zz.156.1)
  • xxx.144.29.243 (gw xxx.144.28.1)主 IP 地址

我为每个子接口添加了一个子接口 ifcfg-eth0:1/2/3,这是我的路由表:

Kernel IP routing table Destination     Gateway         Genmask        Flags Metric Ref    Use Iface
xxx.144.28.0    0.0.0.0         255.255.254.0   U     0      0        0 eth0
yy.zz.156.0     0.0.0.0         255.255.252.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         yy.zz.156.1     0.0.0.0         UG    0      0        0 eth0
0.0.0.0         xxx.144.28.1    0.0.0.0         UG    0      0        0 eth0

当我 ping 添加的 IP 地址时,我收到TTL expired in transit消息,根据我的研究,我认为我的路由表中存在无限循环,有人可以指出这里的问题吗?

答案1

我猜到了您的地址,traceroute对所有四个地址运行了一次(嗯,mtr),虽然它显示了一个循环,但它在两个地址之间来回切换,看起来很像两个路由器之间的点对点链接。尝试从子网 ping/traceroute 各种其他地址时也会发生同样的循环,因此对于此提供商尚未分配的地址来说,这可能是“正常”的。

由此我猜测问题出在你的服务器提供商上 –他们没有正确的路由将额外的地址指向您的服务器。


与此同时,你自己的路由表看起来正常,没有遗漏任何明显的信息。虽然这不是整个路由表——有些条目是过时的路线命令看不到。如果你直接将 IP 地址分配给接口(例如,它显示在IP 地址),这会创建一个隐藏的 /32 路由,该路由会告诉操作系统始终使用数据包,并且该路由优先于常规子网路由。

因此,如果您已验证地址在ip addr,则循环通常不是您的错。


你现在应该检查的是你是否收到完全捕获数据包。使用数据包捕获工具,例如tcpdump

tcpdump -n -i eth0 "icmp"

在运行时尝试 ping 服务器的地址。如果出现循环,tcpdump 会在每次 ping 尝试时显示“ICMP Echo”数据包风暴。另一方面,如果出现循环,tcpdump 会在每次 ping 尝试时显示“ICMP Echo”数据包风暴。没有显示任何回显数据包,则问题出在您的 ISP(即服务器托管公司)上 - 他们实际上并没有正确地将地址路由到您的服务器。

相关内容