我购买了一台有 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(即服务器托管公司)上 - 他们实际上并没有正确地将地址路由到您的服务器。