Траблшутинг асимметричной маршрутизации при двух провайдерах (Multi-Homing)
- Случайные разрывы TCP соединений, зависание SSH и HTTPS сессий при наличии двух интернет-провайдеров.
- Межсетевые экраны (Cisco ASA, FortiGate, iptables/conntrack) отбрасывают пакеты с ошибкой
TCP First packet isn't SYNилиState-table out of sync. - Исходящий трафик уходит через канал ISP1, а входящий ответный трафик возвращается через ISP2.
- Невозможность прохождения трафика через VPN туннели с включенным RPF (Reverse Path Forwarding).
1. Причины и природа сбоев при асимметричном роутинге
Маршрутизация в глобальном интернете является асимметричной по своей природе: путь пакета от клиента к серверу не обязан совпадать с обратным путем. Однако современные **Stateful Firewalls (NGFW)** отслеживают состояния сессий. Если фаервол видит ответный пакет TCP SYN-ACK или ACK без предварительного прохождения прямого SYN-пакета через этот же физический интерфейс, сессия немедленно уничтожается.
2. Решение 1: Устранение асимметрии на BGP уровне (Multi-Homing)
Синхронизируйте входящий и исходящий трафик: направляйте исходящий поток в того же оператора, от которого анонсируется конкретный префикс.
# Использование BGP Community оператора для гарантированного управления входящим путем
route-map RM_ISP2_OUT permit 10
set community 64500:80 # Указание ISP2 установить низкий Local Pref внутри своей сети
set as-path prepend 65001 650013. Решение 2: Настройка Connection Marking и PBR (Policy Routing)
Если сервер имеет публичный IP на интерфейсе ISP2, ответные пакеты должны принудительно уходить через шлюз ISP2 независимо от глобального Default Gateway.
# Пример на MikroTik RouterOS v7:
/ip firewall mangle
add chain=input in-interface=ether2-isp2 action=mark-connection new-connection-mark=conn-isp2 passthrough=yes
add chain=output connection-mark=conn-isp2 action=mark-routing new-routing-mark=to-isp2 passthrough=no
/ip route
add dst-address=0.0.0.0/0 gateway=203.0.113.1 routing-table=to-isp24. Решение 3: Кластеризация и TCP State-Sharing на NGFW
Для межсетевых экранов в Active/Active режиме включите синхронизацию сессий (State Synchronization / ASR Cluster) для свободного прохождения асимметричных пакетов.
Частые вопросы (FAQ)
Что такое Strict uRPF и почему он блокирует асимметричный трафик?
Strict Unicast RPF требует, чтобы входящий пакет поступал строго на тот интерфейс, через который согласно таблице FIB лежит наилучший обратный маршрут к источнику. При асимметрии такой пакет мгновенно отбрасывается.
Как перевести uRPF в режим, совместимый с асимметричной маршрутизацией?
Переключите режим со Strict на Loose: ip verify unicast source reachable-via any. В режиме Loose проверяется только наличие маршрута к источнику в таблице FIB без привязки к конкретному интерфейсу.
Можно ли отключить проверку состояния TCP (TCP State Check) на фаерволе?
Да, большинство межсетевых экранов позволяют настроить правила 'TCP State Bypass' или 'No-SYN Check' для определенных IP-адресов, но это снижает общий уровень безопасности периметра.
Почему асимметричная маршрутизация ломает работу IPsec туннелей?
Если входящий пакет поступает снаружи в открытом виде, а ответный пакет заворачивается в шифрованный туннель IPsec (или наоборот), конечный узел сбросит соединение из-за нарушения согласованности сокетов.