Номер TTL туннеля GRE

Номер TTL туннеля GRE

Вот настройки на сервере А:

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 Time Exceeded обратно исходному источнику. Эта обработка TTL важна для предотвращения вечной пересылки немаршрутизируемых IP-пакетов в IP-сети, потребляя ресурсы.

Traceroute использует это поведение TTL для определения того, какие переходы и сколько переходов (маршрутизаторов) есть на пути к месту назначения. Он отправляет пробные IP-пакеты с небольшими TTL в последовательности: 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.

Итак, когда вы используете ttl 255, зонд, отправленный traceroute с TTL=1, будет инкапсулирован в пакет GRE IPv4 с TTL=255. Он будет переслан всеми промежуточными маршрутизаторами и достигнет конечной точки туннеля, а также будет получен и обработан конечным пунктом назначения. Когда вы не используете ttl 255, по умолчанию используется ttl inherit. Это означает, что зонд traceroute с TTL=1 будет инкапсулирован в пакет GRE IPv4 с TTL=1. Он будет отброшен первым маршрутизатором. Однако отбрасывается именно пакет GRE, и если маршрутизатор отправляет превышенное время ICMP, то он будет ссылаться на инкапсулирующий пакет (GRE), а не на инкапсулированный зонд traceroute. Поэтому процесс traceroute не получит никаких ошибок ICMP, зонд истечет по времени, и отобразится звездочка (*). Когда значение TTL достаточно велико для того, чтобы инкапсулированный пакет GRE достиг конечной точки туннеля, зонд наконец достигает конечного пункта назначения, и отображается его IP-адрес.

Итак, подводя итог, можно сказать, что у вас действительно нет никаких проблем, и все работает именно так, как и должно!

Связанный контент