====== Mikrotik и несколько провайдеров. Резервирование каналов ====== В данной статье мы не будем рассматривать базовую настройку роутера: выход в интернет, правила брандмауэра и т.п., будем считать, что читатель владеет этими вещами и уделим внимание только обеспечению резервирования внешних каналов. Ниже показана схема, реализованная в нашей лаборатории с указанием адресов и интерфейсов, подключенных к двум условным провайдерам, а также их шлюзы. {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/microtik/Mikrotik-2-ISP-Failover-002-thumb-600xauto-17021.png?nolink&}} Для правильной работы всех описанных ниже способов вам потребуется отключить динамическое добавление маршрутов, которое может быть включено если вы получаете сетевые настройки от провайдера по DHCP или используете PPPoE: {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/microtik/Mikrotik-2-ISP-Failover-003-thumb-600xauto-17024.png?nolink&}} **Важно!** Во время выполнения операций с настройкой маршрутов у вас кратковременно пропадет доступ в интернет. Поэтому все указанные действия следует выполнять **имея физический доступ** к устройству. Хотя можно обойтись и без этого, просто перед настройкой создайте дополнительный нулевой маршрут через основной шлюз и укажите ему самую меньшую административную дистанцию. Но помните, что любое неверное ваше действие грозит потерей сетевого доступа к устройству из внешней сети. ==== Резервирование на основе дистанции маршрута ==== Самый простой, можно даже сказать примитивный способ, в этом случае мы добавляем два маршрута с разной административной дистанцией и включаем проверку доступности шлюза для них. Для этого перейдем в** IP - Routes** и добавим маршрут к первому провайдеру: **Dst. Address** - оставляем по умолчанию - **0.0.0.0/0**, **Gateway** - указываем шлюз первого провайдера, в нашем случае **192.168.3.1**, включаем механизм проверки доступности шлюза - **Check Gateway - ping**, и устанавливаем административную дистанцию маршрута - **Distance - 1**. {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/microtik/Mikrotik-2-ISP-Failover-004-thumb-600xauto-17027.png?nolink&}} Эти же действия в терминале: /ip route add check-gateway=ping distance=1 gateway=192.168.3.1 Аналогичным образом добавляем маршрут ко второму провайдеру, только указываем административную дистанцию **Distance - 2**. В данном случае абсолютные цифры не так важны, при наличии нескольких маршрутов к одному адресу назначения работать будет тот, у которого административная дистанция меньше. {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/microtik/Mikrotik-2-ISP-Failover-005-thumb-600xauto-17030.png?nolink&}} Или в терминале: /ip route add check-gateway=ping distance=2 gateway=192.168.233.2 После этого у вас появится интернет и будет активен маршрут через первого провайдера: {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/microtik/Mikrotik-2-ISP-Failover-006-thumb-600xauto-17033.png?nolink&}} Теперь имитируем аварию, в нашем случае мы просто отключим патч-корд от интерфейса **ether1**, через небольшое время роутер обнаружит недоступность шлюза и сделает маршрут не активным, после чего автоматически заработает маршрут через второго провайдера и трафик пойдет туда. {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/microtik/Mikrotik-2-ISP-Failover-007-thumb-600xauto-17036.png?nolink&}} После восстановления доступности шлюза провайдера обратное переключение произойдет автоматически. ==== Резервирование при помощи рекурсивной маршрутизации ==== Предыдущий способ имеет один серьезный недостаток, он проверяет доступность шлюза провайдера, но не проверяет наличие интернета за этим шлюзом, и вы можете оказаться в ситуации, когда интернет отсутствует, но переключения на резервный канал не произошло. Чтобы избежать такой ситуации следует проверять доступность не шлюза провайдера, а внешних высокодоступных узлов. Один из методов, позволяющих это сделать, называется рекурсивной маршрутизацией, мы подробно рассматривали ее в отдельной статье, поэтому здесь просто покажем последовательность настройки, не вдаваясь в подробности. Прежде всего выберем два высокодоступных узла, в нашем случае это будут **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** через шлюз второго провайдера. {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/microtik/Mikrotik-2-ISP-Failover-008-thumb-600xauto-17039.png?nolink&}} Тоже самое быстро в терминале: /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/0**, **Gateway - 8.8.8.8** - высокодоступный узел для первого провайдера, **Check Gateway - ping** - указываем проверку доступности шлюза, **Distance - 1**. Для второго провайдера все тоже самое, но **Gateway - 9.9.9.9 ** и **Distance - 2**. {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/microtik/Mikrotik-2-ISP-Failover-009-thumb-600xauto-17042.png?nolink&}} В терминале воспользуйтесь командами: /ip route add check-gateway=ping distance=1 gateway=8.8.8.8 add check-gateway=ping distance=2 gateway=9.9.9.9 Мы сейчас не будем вдаваться в подробности как это работает, для этого есть отдельная статья, но общий смысл заключается в том, что рекурсивные маршруты в итоге работают через реальные шлюзы провайдеров, но проверяют доступность не провайдерского шлюза, а высокодоступного узла за ним. Если связь пропала - маршрут деактивируется и начинает работать следующий, с большей дистанцией. На рисунке ниже мы можем видеть, что активный маршрут переключился на резервный канал несмотря на то, что шлюз основного провайдера доступен: {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/microtik/Mikrotik-2-ISP-Failover-010-thumb-600xauto-17045.png?nolink&}} При восстановлении работы первого провайдера обратное переключение произойдет автоматически. ==== Резервирование при помощи Netwatch ==== Прежде всего добавим маршруты к каждому из провайдеров с разными дистанциями, никаких проверок включать не надо, но обязательно следует добавить к каждому маршруту комментарий, в нашем случае это будут **"ISP1"** и **"ISP2"**. {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/microtik/Mikrotik-2-ISP-Failover-011-thumb-600xauto-17048.png?nolink&}} В терминале: /ip route add comment=ISP1 distance=1 gateway=192.168.3.1 add comment=ISP2 distance=2 gateway=192.168.233.2 Затем выбираем высокодоступный хост и добавляем к нему маршрут через первого провайдера: {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/microtik/Mikrotik-2-ISP-Failover-012-thumb-600xauto-17051.png?nolink&}} Эти же действия в терминале: /ip route add distance=1 dst-address=8.8.8.8/32 gateway=192.168.3.1 Затем переходим в **Tools - Netwatch** и добавляем там новый узел, на закладке **Host** указываем адрес выбранного высокодоступного узла, при необходимости меняем интервал опроса. {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/microtik/Mikrotik-2-ISP-Failover-013.png?nolink&}} На закладе **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" Для проверки блокируем доступ через первого провайдера и убеждаемся, что переключение происходит: {{https://fatalex.cifro.net/lib/plugins/ckgedit/fckeditor/userfiles/image/hardware/microtik/Mikrotik-2-ISP-Failover-014-thumb-600xauto-17055.png?nolink&}} Обратное переключение произойдет автоматически после восстановления связи с высокодоступным узлом.