GRE隧道TTL数量

GRE隧道TTL数量

以下是服务器 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 不存在时,究竟是什么原因导致这些“*”问题?

答案1

生存时间代表生存时间。它是 IP 数据包头中的一个字段。该值最初由发送方设置,通常为 64,并由每个路由器减一。当它在到达最终目的地之前达到 0 时,路由器会丢弃数据包并向原始源发送 ICMP 超时消息。此 TTL 处理对于防止无法路由的 IP 数据包在 IP 网络上永久转发并消耗资源非常重要。

Traceroute 使用此 TTL 行为来确定到达目的地的路径上有哪些跳数和有多少跳数(路由器)。它会按顺序发出具有较小 TTL 的探测 IP 数据包:TTL=1、TTL=2、TTL=3。TTL=1 将被第一个路由器丢弃,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 地址。

因此,总而言之,您确实没有问题,但事情完全按照应有的方式运行!

相关内容