Диагностика туннелей GRE: рекурсивная маршрутизация и Keepalive таймауты
- Интерфейс Tunnel циклически переходит из состояния UP в DOWN каждые несколько секунд с ошибкой
%TUN-5-RECURDOWN: Tunnel0 temporarily disabled due to recursive routing. - Падение сессий динамической маршрутизации OSPF/EIGRP/BGP, установленных поверх GRE-туннеля.
- Интерфейс GRE находится в статусе
up/downиз-за неполучения ответных Keepalive-пакетов. - Транзитный трафик через туннель теряется, несмотря на физическую доступность внешних адресов (Underlay IP).
1. Причина возникновения Recursive Routing
Ошибка рекурсивной маршрутизации возникает, когда маршрутизатор узнает маршрут к Tunnel Destination IP (внешнему адресу туннеля) через сам этот Tunnel-интерфейс (Overlay сеть). Маршрутизатор пытается отправить туннелированный пакет внутрь самого себя, фиксирует логическую петлю и отключает интерфейс на защитный интервал.
2. Методы устранения ошибки RECURDOWN
- Исключение Tunnel Destination из протоколов динамической маршрутизации: убедитесь, что сети Underlay (публичные IP адреса маршрутизаторов) не анонсируются в OSPF/BGP внутри туннеля.
- Использование статических маршрутов с высокой административной дистанцией (AD): жестко зафиксируйте маршрут к endpoint через физический интерфейс:
# Пример правильной изоляции маршрутов на Cisco IOS
ip route 203.0.113.2 255.255.255.255 GigabitEthernet0/0/0 198.51.100.1
!
interface Tunnel0
ip address 10.255.255.1 255.255.255.252
tunnel source GigabitEthernet0/0/0
tunnel destination 203.0.113.2
tunnel path-mtu-discovery
!
# Ограничение анонсов OSPF внутри туннеля
router ospf 1
passive-interface GigabitEthernet0/0/0
network 10.255.255.0 0.0.0.3 area 0
network 192.168.0.0 0.0.255.255 area 03. Настройка и траблшутинг GRE Keepalive
По умолчанию туннель GRE не имеет механизмов проверки L2/L3 доступности и остается в статусе UP/UP даже при обрыве связи на стороне провайдера. Для быстрого переключения маршрутов включите Keepalive:
interface Tunnel0
# Отправлять keepalive каждые 3 секунды, считать упавшим после 3 потерь (9 секунд)
keepalive 3 34. Диагностика счетчиков и сбросов
show interfaces Tunnel0
show ip route 203.0.113.2
show log | include %TUN-5-RECURDOWN Частые вопросы (FAQ)
Как работает механизм GRE Keepalive на сетевом уровне?
Маршрутизатор генерирует специальный GRE-пакет сам к себе: во внутренний заголовок помещается пакет от удаленного endpoint к локальному IP, инкапсулированный в стандартный GRE к удаленному роутеру. Удаленный роутер, получая такой пакет, просто декапсулирует его и, глядя на IP получателя, отправляет обратно инициатору.
Почему нельзя использовать маршрут по умолчанию (0.0.0.0/0) через Tunnel интерфейс без исключений?
Если направить default route в туннель, адрес Tunnel Destination также попадет под этот маршрут, что мгновенно вызовет ошибку рекурсивной маршрутизации и падение интерфейса.
Какой дополнительный оверхед (overhead) вносит чистый туннель GRE?
Чистый GRE добавляет 24 байта к каждому пакету (20 байт нового внешнего IPv4 заголовка + 4 байта базового заголовка GRE). Если включены ключи (GRE Key) или секвенция, оверхед возрастает до 28–32 байт.
Как защитить трафик внутри GRE с помощью IPsec?
Используйте профили IPsec в режиме Tunnel/Transport: создайте 'crypto ipsec profile' и примените его напрямую к туннелю командой 'tunnel protection ipsec profile <name>'.