以下是服务器A上的设置:
iface serverA_gre0 inet tunnel
address 172.24.0.85
mode gre
endpoint x.x.x.x
dstaddr 172.24.0.86
netmask 255.255.255.252
ttl 255在服务器B上设置:
iface serverB_gre0 inet tunnel
address 172.24.0.86
mode gre
endpoint x.x.x.x
dstaddr 172.24.0.85
netmask 255.255.255.252
ttl 255没有"ttl 255":
traceroute to 172.24.0.86 (172.24.0.86), 30 hops max, 60 byte packets
1 * * *
2 * * *
3 * * *
4 * * *
5 * * *
6 172.24.0.86 54.507 ms 62.888 ms 51.369 ms与"ttl 255":
traceroute to 172.24.0.86 (172.24.0.86), 30 hops max, 60 byte packets
1 172.24.0.86 51.123 ms 51.733 ms 51.943 ms当TTL 255不存在时,究竟是什么原因导致了这些"*“问题?
发布于 2017-11-24 07:25:01
TTL代表活下去的时候。它是IP包报头中的一个字段。该值最初由发送方设置,通常设置为64,然后由每个路由器减少一个。当在到达最终目的地之前到达0时,路由器会丢弃数据包,并将ICMP时间超过的消息发送回原始源。这种TTL处理对于防止不可路由的IP数据包永远在IP网络上被转发,消耗资源是非常重要的。
Traceroute使用这种TTL行为来确定到达目的地的路径上有哪些跳和多少个跳(路由器)。它按以下顺序发送带有小TTL的探测IP数据包: TTL=1、TTL=2、TTL=3,第一个路由器丢弃TTL=1,第一个路由器转发TTL=2,第二个路由器丢弃TTL=2等等。如果traceroute收到来自路由器的ICMP时间超过的消息,它将显示其IP地址。如果探测超时,则显示星号。
为了回到你所看到的效果,这是因为GRE隧道是如何与TTL有关的。对于IPv4 GRE隧道,默认情况是将TTL从隧道包复制到IPv4 GRE数据包。这可以被ttl选项重写,就像您所做的那样。手册的有关摘录:
ttl N
hoplimit N
set a fixed TTL (IPv4) or hoplimit (IPv6) N on tunneled
packets. N is a number in the range 1--255. 0 is a special
value meaning that packets inherit the TTL value. The default
value for IPv4 tunnels is: inherit. The default value for IPv6
tunnels is: 64.因此,当您使用ttl 255时,traceroute用TTL=1发送的探针将被封装到带有TTL=255的GRE IPv4数据包中。这将由所有中间路由器转发并到达隧道端点,并由最终目的地接收和处理。当您不使用ttl 255时,默认情况是ttl inherit。这意味着带有TTL=1的traceroute探针将被封装在带有TTL=1的GRE IPv4数据包中,由第一个路由器丢弃。但是,被丢弃的是GRE数据包,如果路由器发送的时间超过ICMP,那么它将引用封装数据包(GRE),而不是封装的traceroute探针。因此,traceroute进程将不会收到任何ICMP错误,探针超时,并显示星号(*)。当TTL足够大到GRE封装包到达隧道端点时,最终探针也到达最终目的地,并显示其IP地址。
因此,最后,你真的没有问题,但事情完全按照他们的工作!
https://serverfault.com/questions/827239
复制相似问题