среда, 22 марта 2023 г.

Mikrotik и несколько провайдеров. Резервирование каналов

 Данная статья предназначена для RouterOS 6.x

Ниже показана схема, реализованная в нашей лаборатории с указанием адресов и интерфейсов, подключенных к двум условным провайдерам, а также их шлюзы.

Mikrotik-2-ISP-Failover-002.pngДля правильной работы всех описанных ниже способов вам потребуется отключить динамическое добавление маршрутов, которое может быть включено если вы получаете сетевые настройки от провайдера по DHCP или используете PPPoE:

Mikrotik-2-ISP-Failover-003.png

Важно! Во время выполнения операций с настройкой маршрутов у вас кратковременно пропадет доступ в интернет. Поэтому все указанные действия следует выполнять имея физический доступ к устройству.

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

Резервирование на основе дистанции маршрута

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

Для этого перейдем в IP - Routes и добавим маршрут к первому провайдеру: Dst. Address - оставляем по умолчанию - 0.0.0.0/0Gateway - указываем шлюз первого провайдера, в нашем случае 192.168.3.1, включаем механизм проверки доступности шлюза - Check Gateway - ping, и устанавливаем административную дистанцию маршрута - Distance - 1.

Mikrotik-2-ISP-Failover-004.png

Эти же действия в терминале:

/ip route
add check-gateway=ping distance=1 gateway=192.168.3.1

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

Mikrotik-2-ISP-Failover-005.pngИли в терминале:

/ip route
add check-gateway=ping distance=2 gateway=192.168.233.2

После этого у вас появится интернет и будет активен маршрут через первого провайдера:

Mikrotik-2-ISP-Failover-006.pngТеперь имитируем аварию, в нашем случае мы просто отключим патч-корд от интерфейса ether1, через небольшое время роутер обнаружит недоступность шлюза и сделает маршрут не активным, после чего автоматически заработает маршрут через второго провайдера и трафик пойдет туда.

Mikrotik-2-ISP-Failover-007.pngПосле восстановления доступности шлюза провайдера обратное переключение произойдет автоматически.

Резервирование при помощи рекурсивной маршрутизации

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

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


Прежде всего выберем два высокодоступных узла, в нашем случае это будут 8.8.8.8 и 9.9.9.9 и пропишем к каждому из них маршрут через шлюзы первого и второго провайдеров.

Переходим в IP - Routes и создаем маршрут: Dst. Address - 8.8.8.8 - узел для проверки первого провайдера, Gateway - 192.168.3.1 - шлюз первого провайдера, Distance - 1, Scope - 10. Обратите внимание на значение области (Scope), если вы оставите там значение по умолчанию - 30, то рекурсивная маршрутизация работать не будет! Затем добавим второй аналогичный маршрут, но уже к узлу 9.9.9.9 через шлюз второго провайдера.

Mikrotik-2-ISP-Failover-008.pngТоже самое быстро в терминале:

/ip route
add distance=1 dst-address=8.8.8.8/32 gateway=192.168.3.1 scope=10
add distance=1 dst-address=9.9.9.9/32 gateway=192.168.233.2 scope=10

Теперь добавим рекурсивные маршруты для каждого из провайдеров со следующими настройками: Dst. Address оставляем по умолчанию - 0.0.0.0/0Gateway - 8.8.8.8 - высокодоступный узел для первого провайдера, Check Gateway - ping - указываем проверку доступности шлюза, Distance - 1. Для второго провайдера все тоже самое, но Gateway - 9.9.9.9 и Distance - 2.

Mikrotik-2-ISP-Failover-009.pngВ терминале воспользуйтесь командами:

/ip route
add check-gateway=ping distance=1 gateway=8.8.8.8
add check-gateway=ping distance=2 gateway=9.9.9.9

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

На рисунке ниже мы можем видеть, что активный маршрут переключился на резервный канал несмотря на то, что шлюз основного провайдера доступен:

Mikrotik-2-ISP-Failover-010.pngПри восстановлении работы первого провайдера обратное переключение произойдет автоматически.

Резервирование при помощи Netwatch

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

Mikrotik-2-ISP-Failover-011.pngВ терминале:

/ip route
add comment=ISP1 distance=1 gateway=192.168.3.1
add comment=ISP2 distance=2 gateway=192.168.233.2

Затем выбираем высокодоступный хост и добавляем к нему маршрут через первого провайдера:

Mikrotik-2-ISP-Failover-012.pngЭти же действия в терминале:

/ip route
add distance=1 dst-address=8.8.8.8/32 gateway=192.168.3.1

Затем переходим в Tools - Netwatch и добавляем там новый узел, на закладке Host указываем адрес выбранного высокодоступного узла, при необходимости меняем интервал опроса.

Mikrotik-2-ISP-Failover-013.pngНа закладе Up вводим следующий скрипт:

/ip route set [find comment="ISP1"] disabled=no
/ip route set [find comment="ISP2"] disabled=yes

Затем на закладке Down:

/ip route set [find comment="ISP1"] disabled=yes
/ip route set [find comment="ISP2"] disabled=no

Их смысл предельно прост, если узел через первого провайдера доступен, то включаем маршрут с меткой ISP1, а маршрут с меткой ISP2 выключаем, если недоступен - то делаем ровно наоборот.

В терминале все это можно быстро сделать при помощи "заклинания":

/tool netwatch
add down-script="/ip route set [find comment=\"ISP1\"] disabled=yes\r\
\n/ip route set [find comment=\"ISP2\"] disabled=no" host=8.8.8.8 \
up-script="/ip route set [find comment=\"ISP1\"] disabled=no\r\
\n/ip route set [find comment=\"ISP2\"] disabled=yes"

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

Mikrotik-2-ISP-Failover-014.pngОбратное переключение произойдет автоматически после восстановления связи с высокодоступным узлом.

Комментариев нет:

Отправить комментарий