Динамический шлюз в multiWan конфигурации

Тема в разделе "Вопросы начинающих", создана пользователем CheshirCa, 1 мар 2018.

  1. CheshirCa

    CheshirCa Новый участник

    Сначала предыстория. У меня сейчас 2 провайдера (назовем их ISP1 и ISP2) заведены на 2011 микротик, на котором настроена типовая multiWAN конфигурация с иcпользованием mangle. Исходящие пакеты выбираются по round robin в правиле роутинга с указанием нескольких шлюзов.
    Наблюдаю неустойчивую работу при работе с интернетом из локалки. Все признаки кривого DNS ответа. Опытным путем выясняю, что виноват DNS ISP1, который работает крайне нестабильно. Причем его DNS пингуется, а вот шлюз пинговаться не хочет. То есть может отдать один пакетик на сотню, но не всегда.

    Захожу на микротик, в winbox, в /ip route вижу что отвалились все static маршруты из-за недоступности шлюза. Позвонил в суппорт ISP1, там говорят что на интерфейсе не видно ничего необычного и у них все работает. Захожу на вкладку Nexthops и вижу, что доступность интерфейса определяется пингом.
    "А вдруг на шлюзе понизили приоритет ICMP и он отвечает только в состоянии простоя?" - подумал я и видимо не ошибся. Выбрал в качестре средства проверки ARP - и тут же все забегало и зашевелилось. То есть получается механизм такой - если раз в сколько-то секунд шлюз не откликается на пинг, микротик считает его умершим и запрещает маршрутизацию через этот шлюз. Если шлюз отвечает на пинги не всегда - будут глюки. Наиболее правильное решение - использовать при проверке шлюза ARP запросы, то есть при создании правила в /ip route, значение Check Gateway надо установить в ARP, а не ping - как часто пишут в инструкциях по быстрой настройке.

    Но радость была недолгой. На следующее утро наблюдаю ту же картину - все маршруты на ISP1 в состоянии gateway unreachable. Причем время от времени состояние меняется на reachable, потом отвалились окончательно. В ARP таблице отсутствует мак шлюза. Линк есть, более того, на меня сыпятся какие-то пакеты, а от меня ничего не уходит. Поменял static IP на DHCP Client для ISP1, адрес выдался, вроде все то же... Оказалось все просто, ночью у провайдера были работы и поменялся шлюз по умолчанию. Причем какое-то время по arp виделся и старый шлюз, что в итоге и привело к некоторой путанице. Часть внешних подсетей у меня принудительно разведено маршрутизацией, где шлюз указывается в виде IP адреса, поэтому пришлось сидеть и переписывать адреса

    Вопрос на самом деле такой - как на микротиках подхватывать шлюз, получаемый по DHCP и автоматически вставлять его в таблицу роутинга, в том числе в правило round robin для исходящих пакетов? Неужели нельзя это как-то автоматизировать, то есть в нижеприведенном примере вместо 1.1.1.1 и 2.2.2.2 подставить какую-то переменную? Или это можно делать только скриптом?

    /ip route
    add distance=1 gateway=2.2.2.2 routing-mark=to_isp2
    add distance=1 gateway=1.1.1.1 routing-mark=to_isp1
    add distance=1 gateway=1.1.1.1,2.2.2.2
     
  2. Мне кажется это возможно только скриптом.