GRE 隧道 TTL 编号

Tho*_*Lau 7 networking gre

这是服务器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
Run Code Online (Sandbox Code Playgroud)

服务器 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
Run Code Online (Sandbox Code Playgroud)

没有“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
Run Code Online (Sandbox Code Playgroud)

使用“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
Run Code Online (Sandbox Code Playgroud)

当 TTL 255 不存在时,究竟是什么导致了那些“*”问题?

小智 5

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

Traceroute 使用此 TTL 行为来确定到达目的地的路径上有哪些跃点和多少跃点(路由器)。它依次发送具有小 TTL 的探测 IP 数据包:TTL=1、TTL=2、TTL=3。TTL=1 将被第一个路由器丢弃,TTL=2 将被第一个转发并被第二个丢弃,依此类推。如果 traceroute 收到来自路由器的 ICMP Time Exceeded 消息,它将显示其 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.
Run Code Online (Sandbox Code Playgroud)

因此,当您使用 时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 地址。

因此,总而言之,您确实没有问题,但事情完全按照预期进行!