Контакты

Телефонные номера:
+7 (495) 777-83-40 (многокан.)
+7 (965) 169-0075 (моб.)
Продажа оборудования:
sales[at]routerz.ru
Тех. поддержка:
support[at]routerz.ru
Обучение, тренинги:
tr[at]routerz.ru
Ежедневно 9:00-21:00
[at] = @

Каталог оборудования

СПСР-Экспресс

Невозможность возобновления UDP-подключений при смене IP в случае использования NAT

Столкнулись с интересным случаем.

У одного из пользователей, использующего  интернет-подключение с балансировкой между двумя провайдерами (DualWAN) на Mikrotik возникла проблема: периодически перестают подключаться SIP-телефоны к внешнему SIP-серверу. Исследование показало, что при переключении маршрутов с одного провайдера на другого, UDP-подключения, в частности  регистрации на SIP-сервере остаются в таблицах Connection Tracker и NAT,  и как следствие, udp-пакеты этих подключений продолжают передаваться через тот  внешний IP, через который было установлено подключение.

Смена маршрута может произойти как в результате работы скрипта мониторинга DualWAN, так и в результате активации маршрута с большим значением distance, или даже в результате ручного изменения таблицы маршрутов.

Такое поведение является следствием того, что для UDP нет явного завершения и начала соединения и механизм Connection Tracking не может отличить новую попытку подключения от старой и продолжает выполнять NAT для такого подключения в соответствии со старыми правилами. Следует отметить, что такая же проблема будет проявляться при смене внешнего IP.

В нашу техподдержку уже были обращения с аналогичной проблемой, вызванной сменой маршрутизации в результате недоступности шлюза у маршрута с меньшей метрикой.

В случае ручного переконфигурирования проблема чаще всего решается перезагрузкой маршрутизатора, но если причина заключается в автоматической смене настроек (маршрутизации или адреса) то проблема будет регулярно возникать снова и снова.

Что можно предпринять? Решение — в скрипте переключения каналов для DualWAN или в скрипте мониторинга (в случае динамического IP) при смене конфигурации нужно выполнять очистку таблицы connection tracker, например вот так (фрагмент скрипта):

/ip firewall connection tracking
set enabled=no;
:delay 1;
set enabled=yes;
:local message "Contrack cleared";
:log info $message;
:put $message;

2 комментария Невозможность возобновления UDP-подключений при смене IP в случае использования NAT

  • Maksimka

    Эта проблема никак не связана с NAT. Она возникает при любой смене маршрутов, не обязательно для Contrack соединений. Т.е. для UDP соединений, если точнее сказать. Поэтому, если у вас несколько филиалов + несколько провайдеров в каждом филиале и между ними настроены VPN туннели с избыточной надёжностью. То при обрыве связи и смены основного VPN туннеля на резервный, вы практически со 100% уверенностью получите timeout регистрации SIP, пока не сбросите соединения.

  • mmv

    Спасибо за внимание к статье. Однако вы не правы.

    При любой сменен маршрута, если на одном из маршрутов настроен NAT. Ваш пример с VPN показательный. Проблема возникает, поскольку в какой то момент новое соединение во внутреней сети, которое должно маршрутизироваться через VPN, уходит через WAN, на котором настроен NAT. И новое соединение создается с соответствующим, неподходящим для него, NAT.

    В случае VPN есть более простое решение — создание unreachable маршрута для внутренних подсетей. Например, если внутренние сети используют адреса 172.16.0.0/12

    /ip route

    add comment="Block routing Private destinations by default gateway" distance=254 \

    dst-address=172.16.0.0/12 type=unreachable

    Если смена маршрутов происходит без изменения NAT правил, то эта проблема не возникает. Например на магистральных маршрутизаторах.

    В качестве контрольного эксперимента можно отключить NAT на WAN интерфейсах и попытаться воспроизвести проблему с «залипанием» соединения.

    LAN пользователи при этом не будут иметь доступа в Интернет, но на работу VPN и трафик внутри VPN это не повлияет.

    Или иначе, можно посмотреть параметры «залипшего» соединения и увидеть там NAT обработку. Новые версии ROS показывают это в явном виде.

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>