Время на прочтение
5 мин
Количество просмотров 187K
Написать данный пост меня сподвигла ситуация с отключением одного из каналов Интернета.
В самом же Интернете ответов по данному вопросу много, но не каждый является рабочим.
Что я хотел сделать, если отключается основной канал Интернета:
1. Переключиться на резервный канал (после «появления», разумеется, вернуться на основной);
2. Отправить уведомление по email о факте изменения состояния.
Кому интересно, прошу под кат.
Нам дано:
— Mikrotik RB450G с прошивкой 5.19 версии;
— 2 порта с Интернетом, один из которых для подключения использует PPPoE соединение.
Сперва добавим 2 скрипта, один из которых будет переключать на резервный канал, а второй вернет подключение к первому.
Составим первый скрипт, который будет активировать резервный канал и назовем его «change-to-reserv» и содержать в себе код:
/ip route set gateway=1.1.1.1 [find dst-address=0.0.0.0/0];
(Примечание: IP-адрес 1.1.1.1 выбран как пример и символизирует резервный канал)
То есть, при обнаружении отсутствия пинга на сервер (об этом чуть позже) мы будем выключать маршрут с шлюзом, указывающим на «pppoe-main«.
P.S.: После комментария erazel данная схема была улучшена, а именно раннее скрипт переключался между двумя маршрутами, которые давали сбой, а именно, если запустить с компа, например, команду ping google.ru -t, то при изменении маршрута пинг будет уходить на старый интерфейс, так как трансляция не обновилась. В предложенном же методе изменения только шлюза очистка трансляции не требуется.
Следующей строкой в этом же скрипте укажем:
/tool e-mail send server=192.168.1.1 port=25 user=robot@mysite.ru password=1PaSsW0rD1 tls=no to=admin@mysite.ru from="ROBOT<robot@mysite.ru>" \
subject="MikroTik: $[/system clock get date], $[/system clock get time]" \
body="Переключение на резервный канал\nДата: $[/system clock get date]\nAВремя: $[/system clock get time]";
где:
/tool e-mail send — отправляем уведомление на email администратора о факте изменения статуса
server=192.168.1.1 — SMTP-сервер. Так как у нас используется свой, указываю его;
port=25 — в версии RouterOS 5.x порт указывается отдельно. В нашем случае он по-умолчанию 25;
user=robot@mysite.ru — логин пользователя для авторизации на SMTP-сервере (если требуется);
password=1PaSsW0rD1 — указываем пароль (если требуется);
tls=no — TLS-шифрование трафика. У нас нет, ставлю «no», а если и будет — «yes»;
to=admin@mysite.ru — на какой email-адрес будет приходить уведомление;
from=«ROBOT<robot@mysite.ru>» — от кого будет приходить уведомление (в моем случае совпадает с логином авторизации. В скобках указывается адрес отправителя, а перед ним имя, отображаемое во входящей почте);
subject=«MikroTik: $[/system clock get date], $[/system clock get time]» — указываем заголовок письма. В данном случае он будет иметь вид «MikroTik: jul/30/2014, 10:52:13» (дата и время отправки сообщения);
body=«Переключение на резервный канал\nДата: $[/system clock get date]\nAВремя: $[/system clock get time]»; — соответственно, само тело сообщения, которое будет иметь вид:
Переключение линии на резервный канал
Дата: jul/30/2014
Время: 10:52:13
В итоге, наш скрипт будет иметь вид (RouterOS 5.19):
/ip route set gateway=1.1.1.1 [find dst-address=0.0.0.0/0];
/tool e-mail send server=192.168.1.1 port=25 user=robot@mysite.ru password=1PaSsW0rD1 tls=no to=admin@mysite.ru from="ROBOT<robot@mysite.ru>" \
subject="MikroTik: $[/system clock get date], $[/system clock get time]" \
body="Переключение на резервный канал\nДата: $[/system clock get date]\nAВремя: $[/system clock get time]";
И для RouterOS 6.17:
/ip route set gateway=1.1.1.1 [find dst-address=0.0.0.0/0];
/tool e-mail send server=192.168.1.1 port=25 user=robot@mysite.ru password=1PaSsW0rD1 to=admin@mysite.ru from="ROBOT<robot@mysite.ru>" \
subject="MikroTik: $[/system clock get date], $[/system clock get time]" \
body="Переключение на резервный канал\nДата: $[/system clock get date]\nAВремя: $[/system clock get time]";
Как уже писал выше, сохраним его под именем «change-to-reserv» и приступим к написанию второго скрипта:
/ip route set gateway=pppoe-main [find dst-address=0.0.0.0/0];
/tool e-mail send server=192.168.1.1 port=25 user=robot@mysite.ru password=1PaSsW0rD1 tls=no to=admin@mysite.ru from="ROBOT<robot@mysite.ru>" \
subject="MikroTik: $[/system clock get date], $[/system clock get time]" \
body="Переключение на основной канал\nДата: $[/system clock get date]\nAВремя: $[/system clock get time]";
В отличие от первого скрипта, в теле отправляемого email-сообщения мы укажем «Переключение на основной канал» и включим раннее отключенный маршрут.
Сохраним наш скрипт под именем «change-to-main«.
Так как память у Mikrotik не резиновая, мы оптимизируем наш скрипт для выполнения поставленной задачи.
Для этого нам необходимо использование утилиты Netwatch, которая работает как тригер. То есть, если состояние подключение изменится, то сменится и статус с выполнением нужных нам скриптов.
В Netwatch мы добавим новое правило, где укажем хост 8.8.8.8 и имена скриптов во вкладках «Up» — «change-to-main» и «change-to-reserv» во вкладке «Down» соответственно.
Также следует указать период проверки состояния. У нас указана 1 минута.
Дальше следует завершающий шаг — проброс маршрута. Если этого не сделать, то скрипт сработает на переключение к резервному каналу и останется в данном положении. Обратный переход будет возможен если резервный канал «упадет».
В общем, добавляем маршрут с указанием следующих данных:
Dst. Address = 8.8.8.8 // Указываем, что будем пинговать DNS-сервер Гугла (для меня не критично, указываю его);
Gateway = pppoe-main // То самое PPPoE-соединение на основной канал
Distance = 1
Остальные параметры оставляем как есть.
Всё!
Отныне принцип работы следующий:
Netwatch через основной канал будет проверять пинг до DNS-сервера Google. Как только пинг пропадет, выполнится скрипт «change-to-reserv«, указанный на вкладке «Down«. Данный скрипт отключит основной маршрут (PPPoE) и все пакеты будут идти по резервному каналу. Как только пинг по основному каналу возобновится, скрипт вновь активирует маршрут основного канала (параметр Distance которого, разумеется, «1«, а резервного — «2«). Вместе с этим будут приходить уведомления на email-адрес о фактах изменения состояния.
Profit!
ВНИМАНИЕ!!! Для работы скриптов под управлением RouterOS 6.17 необходимо внести изменения в скрипт отправки email-адреса, а именно убрать параметр «tls=«.
То есть, наш код (например, для переключения на резервный канал) будет иметь вид:
/ip route set gateway=1.1.1.1 [find dst-address=0.0.0.0/0];
/tool e-mail send server=192.168.1.1 port=25 user=robot@mysite.ru password=1PaSsW0rD1 to=admin@mysite.ru from="ROBOT<robot@mysite.ru>" \
subject="MikroTik: $[/system clock get date], $[/system clock get time]" \
body="Переключение на резервный канал\nДата: $[/system clock get date]\nAВремя: $[/system clock get time]";
UPDATED: Изменены маршруты в скриптах
UPDATED 2: Чтобы во входящей почте не отображался email-адрес «robot@mysite.ru» как отправителя, был изменен параметр «from» (исправления с комментариями внесены в код выше)
Инструкция по настройке 2-ух провайдеров на роутере MikroTik. В описании буду рассмотрены два распространённых типа работы двух провайдеров: резервирование и балансировка.
Резервирование(автопереключение) – при обрыве провайдера-1, весь интернет трафик переключается на провайдера-2;
Балансировка – тип настройки, когда две линии интернета работают одновременно. Распределение между провайдером-1 и провайдером-2 может быть в ручном или автоматическом режиме.
Данный набор настроек будет считаться контрольной точкой для дальнейших режимов работы роутера MikroTik, а именно резервирования(автопереключения) и балансировки.
В исходной настройке роутера MikroTik произведена базовая настройка и как минимум один интернет провайдер уже работает.
Начать нужно с того, что требуется физическое подключение 2-ого провайдера. Для этого нужно подготовить свободный порт и исключить его из Bridge(LAN).
Освободить порт для 2-ого провайдера
Настройка находится Bridge→Ports
На данном примере, был удалён ether2 со списка портов, принадлежащих к Bridge-LAN.
Настроить 2-ого провайдера
Добавление 2-ого провайдера в список WAN
Настройка находится Interfaces→Interface List
Список WAN должен включать интерфейсы двух провайдеров для того, чтобы правило Masquerade в IP→Firewall→NAT работало сразу для двух провайдеров
Отключить добавление DNS серверов для провайдера-1
Эти действия приведут к тому, что роутер MikroTik не будет использовать DNS сервера текущих интернет провайдеров. К примеру ситуация переключения на резервную линию может спровоцировать отсутствие DNS ответа, т.к. клиент или сам роутер осуществляет DNS запрос через основного провайдера. А он в то время уже перестал работать. Поэтому будут установлены общедоступные DNS сервера, который будут работать с двух провайдеров.
Определить общедоступные DNS сервера
Настройка находится IP→DNS
Отсутствие записей DNS серверов в разделе Dynamic Servers указывает на то, что роутер MikroTik не использует автоматические DNS сервера, которые назначаются в автоматическом режиме.
В Servers стоит указать общедоступные DNS сервера типа Cloudflare DNS и удалить любые другие DNS сервера.
Отключить автоматическое добавление маршрутов
Т.к. все маршруты будут добавлены в ручном режиме, следует отключить все динамические маршруты для основного провайдера. Такие маршруты помечены буквой D(Dynamic) в таблице маршрутизации:
Настройка находится IP→Routes
Добавление маршрутов для двух провайдеров
Для переключение между провайдерами, будет использоваться скрипт, который будет находить маршрут с комментарием ISP-1 или ISP-2 и выключать или включать его в зависимости от статуса работы интернета. Ниже будет описан метод, как это можно сделать для типов подключения: статический IP, dhcp клиент, PPPoE подключение. Этим методом нужно воспользоваться для назначения комментария двух провайдеров.
Кроме обозначенных комментариев нужно определить distance = 2.
Mangle маркировка ответов для двух провайдеров
Правила маркировки маршрутов нужно определять только для белых(постоянных) IP адресов! Этот набор правил будет гарантировать то, что если пришёл input запрос на порт второго(или первого) провайдера, через этот же порт будет отправлен ответ. При отсутствии этих правил, доступ к роутеру по внешним IP может сопровождаться непредсказуемой работой.
Маркировка будет состоять из двух каскадных правил: маркировки соединения и маркировки маршрута
Настройка находится IP→Firewall→Mangle
/ip firewall mangle add action=mark-connection chain=input in-interface=pppoe-out1 \ new-connection-mark=From-ISP-1 add action=mark-routing chain=output connection-mark=From-ISP-1 \ new-routing-mark=To-ISP-1 add action=mark-connection chain=input in-interface=ether2 \ new-connection-mark=From-ISP-2 add action=mark-routing chain=output connection-mark=From-ISP-2 \ new-routing-mark=To-ISP-2
Статическая маршрутизация для маркированных маршрутов
Кроме стандартных правил маршрутизации, нужно добавить маршруты для промаркированных ответов с раздела Mangle.
Настройка находится IP→Routes
И все текущие правила статической маршрутизации будут иметь вид:
/ip route add distance=1 gateway=pppoe-out1 routing-mark=To-ISP-1 add distance=1 gateway=109.87.159.126 routing-mark=To-ISP-2 add comment=ISP-1 distance=1 gateway=pppoe-out1 add comment=ISP-2 distance=2 gateway=109.87.159.126
Настройка двух провайдеров MikroTik, режим резервирования(автопереключение)
Как было сказано выше, резервирование или автоматическое переключение между провайдерами это режим работы роутера MikroTik, когда есть основной провайдер и резервный. При отсутствии интернета у основного провайдера, должно происходить переключение на резервного провайдера. А когда услуга интернета на основном провайдере будет восстановлена, то следует снова вернуться с резервной линии на основную.
Резервирование(автопереключение) это самый распространённый метод работы двух и более интернет провайдеров на роутере MikroTik.
Описание переключение на резервную линию условно такое: роутер MikroTik будет отправлять ICMP(ping) запросы на 8.8.8.8(Google DNS) и в случае отсутствия ответа или большой задержки, интернет будет переключаться с основной(провайдер-1) линии на резервную(провайдер-2).
Добавить статический маршрут для Google DNS
Настройка находится IP→Routes
/ip route add comment=Netwatch distance=1 dst-address=8.8.8.8/32 gateway=pppoe-out1
Запретить ICMP запросы через провайдера-2
Настройка находится IP→Firewall
/ip firewall filter add action=drop chain=output comment=Netwatch dst-address=8.8.8.8 \ out-interface=ether2 protocol=icmp
Этим правилом будет гарантирована диагностика статуса интернет канала только через провайдера-1. При попытке отправить аналогичный запрос через провайдера-2, Firewall роутера MikroTik будет это блокировать.
Добавить правило Netwatch для переключения
Настройка находится Tools→Netwatch
/tool netwatch add down-script="/ip route disable [find comment=\"ISP-1\"]\r\ \n/ip route enable [find comment=\"ISP-2\"]\r\ \n:foreach i in=[/ip firewall connection find protocol~\"tcp\"] do={ /ip f\ irewall connection remove \$i }\r\ \n:foreach i in=[/ip firewall connection find protocol~\"udp\"] do={ /ip f\ irewall connection remove \$i }\r\ \nlog warning (\"ISP-1 IS DOWN\")" host=8.8.8.8 up-script="/ip route disab\ le [find comment=\"ISP-2\"]\r\ \n/ip route enable [find comment=\"ISP-1\"]\r\ \n:foreach i in=[/ip firewall connection find protocol~\"tcp\"] do={ /ip f\ irewall connection remove \$i }\r\ \n:foreach i in=[/ip firewall connection find protocol~\"udp\"] do={ /ip f\ irewall connection remove \$i }\r\ \nlog warning (\"ISP-1 IS UP\")"
- Host – узел, на который будут отправляться ICMP(ping) запросы;
- Interval – время, в течении которого будет производиться диагностика для смены статуса;
- Timeout – задержка пакета, которая будет восприниматься как отсутствие связи;
- Status – текущий статус узла;
- Закладка Up – скрипт, который будет выполнен, если провайдер-1 восстановит связь, после её обрыва;
- Закладка Down – скрипт, который будет выполнен, если связь с провайдером-1 будет прервана.
Представленными скриптами с помощью утилиты Netwatch будет происходить переключение между провайдерами. Все соединения, которые были установлены через провайлера-1 будут удалены. Это позволит гарантированно переключиться на провайдера-2.
Настройка 2 провайдеров в MikroTik, режим балансировки(одновременная работа)
Существует два метода распределения нагрузки между 2-мя провайдерами в MikroTik:
Ручная балансировка. Все узлы делятся в ручном режиме на 2-ве условные группы и каждая из групп направляется к выделенному ей провайдеру;
Автоматическая балансировка. Узлы роутера MikroTik будут поделены на группы с помощью внутренних инструментов RouterOS.
Пример с балансировкой будет отличаться тем, чтобы в рамках настройки внимание также будет уделено соединениям. Переключение станет более мягким и незаметным и это будет достигнуто благодаря маркировке соединений и частичную их очистку при переключении между провайдерами.
Когда работают оба провайдеры, нагрузка распределяется согласно ручному распределению в Address list.
ISP-1=Down & ISP-2=Up → соединения To-ISP-1 очищаются и начинают работать через ISP-2. При этом соединения To-ISP-2 остаются не тронутыми. При восстановлении связи с ISP-1, соединения To-ISP-1 также очищаются и трафик вместо ISP-2 начинает проходить через ISP-1.
ISP-1=Up & ISP-2=Down → соединения To-ISP-2 очищаются и начинают работать через ISP-1. При этом соединения To-ISP-1 остаются не тронутыми. При восстановлении связи с ISP-2, соединения To-ISP-2 также очищаются и трафик вместо ISP-1 начинает проходить через ISP-2.
Ручная настройка балансировки 2 провайдеров в MikroTik
Как видно из названия, условную подсеть роутера MikroTik будет поделено на две группы: To-ISP-1 и To-ISP-2.
- pppoe-out1 – это провайдер-1;
- ether2 – это провайдер-2.
Настройка находится IP→Firewall→Address List
И для каждой из групп, нужно промаркировать соединения и маршрут, для плавного переключение между провайдерами в случае обрыва одного из них.
Mangle маркировка соединений для балансировки 2 провайдеров
Настройка находится IP→Firewall→Mangle
Mangle маркировка маршрута для балансировки двух провайдеров
Настройка находится IP→Firewall→Mangle
Аналогичные действия по маркировке соединений и маршрута нужно выполнить для Address List = To-ISP-2.
Общий вид раздела Mangle
/ip firewall address-list add address=192.168.2.2-192.168.2.125 list=To-ISP-1 add address=192.168.2.126-192.168.2.254 list=To-ISP-2 /ip firewall mangle add action=mark-connection chain=prerouting disabled=no dst-address-type=\ !local new-connection-mark=To-ISP-1-Connection src-address-list=To-ISP-1 add action=mark-routing chain=prerouting connection-mark=To-ISP-1-Connection \ disabled=no new-routing-mark=To-ISP-1 src-address-list=To-ISP-1 add action=mark-connection chain=prerouting disabled=no dst-address-type=\ !local new-connection-mark=To-ISP-2-Connection src-address-list=To-ISP-2 add action=mark-routing chain=prerouting connection-mark=To-ISP-2-Connection \ disabled=no new-routing-mark=To-ISP-2 src-address-list=To-ISP-2
Для каждой группы узлов To-ISP-1 и To-ISP-2 будет создано по два маршрута, чтобы обеспечить плавное переключение согласно первоначальным условиям по балансировке 2 провайдеров.
Общий вид таблицы маршрутизации при балансировке 2 провайдеров
Настройка находится IP→Route
/ip route add comment=Group-1-1 distance=1 gateway=pppoe-out1 routing-mark=To-ISP-1 add comment=Group-2-1 disabled=yes distance=2 gateway=109.87.159.126 \ routing-mark=To-ISP-1 add comment=Group-2-2 distance=1 gateway=109.87.159.126 routing-mark=To-ISP-2 add comment=Group-1-2 disabled=yes distance=2 gateway=pppoe-out1 \ routing-mark=To-ISP-2 add comment=Netwatch-2 distance=1 dst-address=8.8.4.4/32 gateway=109.87.159.126 add comment=Netwatch-1 distance=1 dst-address=8.8.8.8/32 gateway=\ pppoe-out1
Контроль ICMP запросов через нужный интерфейс
Эти правила обеспечат контроль статуса интернет соединения для каждого из провайдера. Диагностика статуса интернета будет осуществляться только через те интерфейсы, которые обозначены в таблице маршрутизации с комментариями Netwatch-1 и Netwatch-2.
Настройка находится IP→Firewall→Filter Rules
/ip firewall filter add action=drop chain=output comment=Netwatch-1 dst-address=8.8.8.8 \ out-interface=ether2 protocol=icmp add action=drop chain=output comment=Netwatch-2 dst-address=8.8.4.4 \ out-interface=!ether2 protocol=icmp
Настройка Netwatch для переключения провайдеров
И собственно утилита Netwatch, именно она будет заниматься переключением между провайдерами в случае обрыва связи на одном из них.
Настройка находится Tools→Netwatch
/tool netwatch add down-script="/ip route disable [find comment=\"ISP-2\"]\r\ \n/ip route disable [find comment=\"Group-2-2\"]\r\ \n/ip route enable [find comment=\"Group-1-2\"]\r\ \nlog warning (\"ISP-2 IS DOWN\")\r\ \n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-2-C\ onnection\"] do={ /ip firewall connection remove \$i }" host=8.8.4.4 \ up-script="/ip route enable [find comment=\"ISP-2\"]\r\ \n/ip route enable [find comment=\"Group-2-2\"]\r\ \n/ip route disable [find comment=\"Group-1-2\"]\r\ \nlog warning (\"ISP-2 IS UP\")\r\ \n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-2-C\ onnection\"] do={ /ip firewall connection remove \$i }" add down-script="/ip route disable [find comment=\"ISP-1\"]\r\ \n/ip route disable [find comment=\"Group-1-1\"]\r\ \n/ip route enable [find comment=\"Group-2-1\"]\r\ \nlog warning (\"ISP-1 IS DOWN\")\r\ \n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-1-C\ onnection\"] do={ /ip firewall connection remove \$i }" host=8.8.8.8 \ up-script="/ip route enable [find comment=\"ISP-1\"]\r\ \n/ip route enable [find comment=\"Group-1-1\"]\r\ \n/ip route disable [find comment=\"Group-2-1\"]\r\ \nlog warning (\"ISP-1 IS UP\")\r\ \n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-1-C\ onnection\"] do={ /ip firewall connection remove \$i }"
Балансировка и резервирование в MikroTik используя настройки NTH раздела Mangle
Можно также применить схему, в которой каждое соединение будет промаркировано по принципу:
четный-пакет = провайдер-1
нечетный-пакет = провайдер-2
Настройка находится IP→Firewall→Mangle
/ip firewall mangle add action=mark-connection chain=prerouting disabled=yes dst-address-type=\ !local new-connection-mark=To-ISP-1-Connection src-address-list=To-ISP-1 nth=2,1 add action=mark-routing chain=prerouting connection-mark=To-ISP-1-Connection \ disabled=yes new-routing-mark=To-ISP-1 src-address-list=To-ISP-1 add action=mark-connection chain=prerouting disabled=yes dst-address-type=\ !local new-connection-mark=To-ISP-2-Connection src-address-list=To-ISP-2 nth=2,2 add action=mark-routing chain=prerouting connection-mark=To-ISP-2-Connection \ disabled=yes new-routing-mark=To-ISP-2 src-address-list=To-ISP-2
Балансировка между двумя провайдерами будет производиться в соотношении 50:50, это определяется параметрами nth=2,1 и nth=2,2.
Все остальные действия по настройке маршрутизации, Firewall и Netwatch будут аналогичны описанных в разделе “Ручная балансировка 2 провайдеров в MikroTik →“.
Настройка балансировки двух провайдеров Per Connection Classifier (PCC) раздела Mangle
Per Connection Classifier (PCC) позволят разделить трафик на равные потоки с возможностью держать пакеты с определенным набором параметров в одном потоке (определяется в наборе параметров из src-address, src-port, dst-address, dst-port)
Настройка находится IP→Firewall→Mangle
/ip firewall mangle add action=mark-connection chain=prerouting dst-address=\ !192.168.2.0/24 new-connection-mark=To-ISP-1-Connection \ per-connection-classifier=both-addresses-and-ports:2/0 src-address=\ 192.168.2.0/24 add action=mark-routing chain=prerouting connection-mark=To-ISP-1-Connection \ new-routing-mark=To-ISP-1 src-address=192.168.2.0/24 add action=mark-connection chain=prerouting dst-address=\ !192.168.2.0/24 new-connection-mark=To-ISP-2-Connection \ per-connection-classifier=both-addresses-and-ports:2/1 src-address=\ 192.168.2.0/24 add action=mark-routing chain=prerouting connection-mark=To-ISP-2-Connection \ new-routing-mark=To-ISP-2 src-address=192.168.2.0/24
Все остальные действия по настройке маршрутизации, Firewall и Netwatch будут аналогичны описанных в разделе “Ручная балансировка 2 провайдеров в MikroTik →“.
Провайдер меняет шлюз в DHCP клиенте, не работает переключение или балансировка
DHCP клиент это один из самых распространённых типов настроек WAN интерфейса. Все настройки проходят в автоматическом режиме и не требуют ни каких дополнительных усилий. Однако в варианте с балансировкой двух провайдеров, используемая настройка требует явного определения шлюза(Gateway) в таблице маршрутизации. А если IP адрес серый(динамический), то правила с балансировкой перестанут работать при его изменении.
Для того, чтобы в правиле статической маршрутизации указывался текущий шлюз(Gateway) провайдера, в свойствах DHCP клиента следует укатать скрипт
Настройка находится IP→DHCP client
{ :local rmark "ISP-2" :local count [/ip route print count-only where comment="ISP-2"] :if ($bound=1) do={ :if ($count = 0) do={ /ip route add gateway=$"gateway-address" comment="ISP-2" distance=2 } else={ :if ($count = 1) do={ :local test [/ip route find where comment="ISP-2"] :if ([/ip route get $test gateway] != $"gateway-address") do={ /ip route set $test gateway=$"gateway-address" } } else={ :error "Multiple routes found" } } } else={ /ip route remove [find comment="ISP-2"] } }
И аналогичный пример, только для первого провайдера с добавлением маршрута к 8.8.4.4.
{ :local rmark "ISP-1" :local count [/ip route print count-only where comment="ISP-1"] :if ($bound=1) do={ :if ($count = 0) do={ /ip route add gateway=$"gateway-address" comment="ISP-1" distance=1 /ip route add gateway=$"gateway-address" comment="Netwatch" distance=1 dst-address=8.8.4.4 } else={ :if ($count = 1) do={ :local test [/ip route find where comment="ISP-1"] :if ([/ip route get $test gateway] != $"gateway-address") do={ /ip route set $test gateway=$"gateway-address" } } else={ :error "Multiple routes found" } } } else={ /ip route remove [find comment="ISP-1"] /ip route remove [find comment="Netwatch"] } }
Скрипт может быть дополнен добавлениями(и удалениями) маршрутов для Routing-mark и Netwatch.
Одновременный проброс с двух провайдеров в MikroTik настройка Mangle
Входящая задача: сделать проброс портов таким образом, чтобы сервер отвечал с того провайдера, с которого пришёл запрос. На практике это может быть Web сервер(443\https), у которого объявлены две DNS записи с двумя внешними IP роутера MikroTik.
Настройка находится IP→Firewall→Mangle
/ip firewall mangle add chain=forward action=mark-connection new-connection-mark=From-ISP-1 in-interface=pppoe-out1 add chain=prerouting action=mark-routing new-routing-mark=To-ISP-1 passthrough=no connection-mark=From-ISP-1 in-interface=bridge add chain=forward action=mark-connection new-connection-mark=From-ISP-2 in-interface=ether2 add chain=prerouting action=mark-routing new-routing-mark=To-ISP-2 passthrough=no connection-mark=From-ISP-2 in-interface=bridge
где
- pppoe-out1 – это провайдер-1;
- ether2 – это провайдер-2;
- bridge – локальный bridge интерфейс.
В качестве пододпытного используем HEX-PoE и отличный 4G-модем Huawei E3372H. Он прекрасно определяется в Mikrotik-девайсах, и создает отдельный lte-интерфейс.
Для начала — воткнули модем в устройство. Убедились, что
- интерфейс lte1 (или как он будет у вас называться) — появился в cписке интерфейсов. Запомните имя этого интерфейса — оно пригодится в дальнейшем
- на интерфейсе появился адрес, полученный по DHCP от провайдера
- в списке маршрутов появился дополнительный маршрут 0.0.0.0/0 указывающий на шлюз LTE-провайдера.
Далее
- Добавляем правило для NAT (чтобы пакеты и через 4G-модем тоже натились). Здесь lte1 — это название(!) интерфейса 4G-модема, если у вас он под другому называется — поправьте под себя.
/ip firewall nat add action=masquerade chain=srcnat out-interface=lte1
- Добавляем маршрут, чтобы пакеты на «хост мониторинга» 8.8.4.4 всегда шли через основного провайдера (здесь х.х.х.х — это шлюз вашего основного провайдера. В комментарии маршрута есть сочетание ISP, это важно — по нему мы будем находить этот маршрут и включать-выключать его.
/ip route add comment="always route monitoring host via ISP1" disabled=no dst-address=8.8.4.4/32 gateway=x.x.x.x
- Создаем blackhole маршрут для «хоста мониторинга» с низким приоритетом (чтобы избавиться от «проблемы неработающего маршрута, при отсутствии линка на WAN-интерфейсе»)
/ip route add comment="blackhole for monitoring host" disabled=no dst-address=8.8.4.4/32 distance=200 type=blackhole
- Создаем задание Netwatch. Идея такая: каждые 30 секунд проверяется «хост мониторинга» по адресу 8.8.4.4, если он недоступен (статус «down»), то отключаем маршрут по умолчанию (с комментом isp) и включаем интерфейс 4G-модема. Модем работает так, что сразу подключается к мобильной сети и автоматом получает от провайдера адрес, DNS и самое главное — новый маршрут по умолчанию. При этом проверка 8.8.4.4 у нас по прежнему будет продолжаться через основного провайдера(из-за специального маршрута, который мы завели чуть ранее). В случае получения ответов от 8.8.4.4 (Netwatch поменяет статус на «up») интерфейс 4G-модема отключаем, тем самым отключая свой маршрут, и активируем маршрут через основного провайдера.
- И да — при переключении делаются записи в лог.
/tool netwatch
add disabled=no down-script="/interface enable [find name=\"lte1\"];\r\
\n:log warning \"Switch to 4G modem\";\r\
\n/ip route disable [find comment=\"isp\"];\r\
\n" host=8.8.4.4 interval=30s timeout=500ms up-script="/interface disable \
[find name=\"lte1\"];\r\
\n:log warning \"Switch to main internet\";\r\
\n/ip route enable [find comment=\"ISP\"];\r\
\n"
Ах да, и если у вас очень суровые правила Firewall, то не забудьте в нем тоже прописать правило, разрешающее форвард трафика в Lte1 интерфейс
Проверяйте работу переключения — находясь физически рядом с роутером… «во избежание», так сказать.
И не забывайте про залипание «connection» при переключении маршрута по умолчанию. Если это по каким то причинам важно для вас — в скрипт netwatch можно добавить строку очищающую зависшие сonnection из connection table при переключении каналов.
Инструкция по настройке 2-ух провайдеров на роутере MikroTik. В описании буду рассмотрены два распространённых типа работы двух провайдеров: резервирование и балансировка.
Резервирование(автопереключение) – при обрыве провайдера-1, весь интернет трафик переключается на провайдера-2;
Балансировка – тип настройки, когда две линии интернета работают одновременно. Распределение между провайдером-1 и провайдером-2 может быть в ручном или автоматическом режиме.
Содержание
- Подготовка работы с 2-мя провайдерами
- Режим резервирования
- Pежим балансировки
- Ручная балансировка
- Автоматическая балансировка NTH
- Балансировка PCC
- Провайдер меняет шлюз в DHCP клиенте
- Одновременный проброс с двух провайдеров
- Задать вопрос по настройке 2-ух провайдеров
Настройка двух провайдеров в MikroTik, предварительная подготовка
Данный набор настроек будет считаться контрольной точкой для дальнейших режимов работы роутера MikroTik, а именно резервирования(автопереключения) и балансировки.
В исходной настройке роутера MikroTik произведена базовая настройка и как минимум один интернет провайдер уже работает.
Начать нужно с того, что требуется физическое подключение 2-ого провайдера. Для этого нужно подготовить свободный порт и исключить его из Bridge(LAN).
Освободить порт для 2-ого провайдера
Настройка находится Bridge→Ports
На данном примере, был удалён ether2 со списка портов, принадлежащих к Bridge-LAN.
Настроить 2-ого провайдера
- DHCP client
- Статический IP
- PPPoE client
DHCP client
Настройка находится IP→DHCP client
Add Default Route = no – статическая маршрутизация для 2-ого провайдера будет доставлена вручную.
Статический IP
Настройка находится IP→Addresses
Настройка находится IP→Routes
PPPoE client
Настройка находится PPP→Interface
Add Default Route = no – статическая маршрутизация для 2-ого провайдера будет доставлена вручную.
Добавление 2-ого провайдера в список WAN
Настройка находится Interfaces→Interface List
Список WAN должен включать интерфейсы двух провайдеров для того, чтобы правило Masquerade в IP→Firewall→NAT работало сразу для двух провайдеров
Отключить добавление DNS серверов для провайдера-1
Эти действия приведут к тому, что роутер MikroTik не будет использовать DNS сервера текущих интернет провайдеров. К примеру ситуация переключения на резервную линию может спровоцировать отсутствие DNS ответа, т.к. клиент или сам роутер осуществляет DNS запрос через основного провайдера. А он в то время уже перестал работать. Поэтому будут установлены общедоступные DNS сервера, который будут работать с двух провайдеров.
- DHCP client
- PPPoE client
DHCP client
Настройка находится IP→DHCP client
PPPoE client
Настройка находится PPP→Interface
Определить общедоступные DNS сервера
Настройка находится IP→DNS
Отсутствие записей DNS серверов в разделе Dynamic Servers указывает на то, что роутер MikroTik не использует автоматические DNS сервера, которые назначаются в автоматическом режиме.
В Servers стоит указать общедоступные DNS сервера типа Cloudflare DNS и удалить любые другие DNS сервера.
Отключить автоматическое добавление маршрутов
Т.к. все маршруты будут добавлены в ручном режиме, следует отключить все динамические маршруты для основного провайдера. Такие маршруты помечены буквой D(Dynamic) в таблице маршрутизации:
Настройка находится IP→Routes
- DHCP client
- PPPoE client
DHCP client
Настройка находится IP→DHCP client
PPPoE client
Настройка находится PPP→Interface
Добавление маршрутов для двух провайдеров
Для переключение между провайдерами, будет использоваться скрипт, который будет находить маршрут с комментарием ISP-1 или ISP-2 и выключать или включать его в зависимости от статуса работы интернета. Ниже будет описан метод, как это можно сделать для типов подключения: статический IP, dhcp клиент, PPPoE подключение. Этим методом нужно воспользоваться для назначения комментария двух провайдеров.
Кроме обозначенных комментариев нужно определить distance = 2.
- Статический IP или DHCP клиент
- PPPoE client
Статический IP или DHCP клиент
Настройка находится IP→Routes
В случае с DHCP client значение Gateway можно взять с раздела Status самого DCHP клиента
Настройка находится IP→DCHP Client
PPPoE client
Настройка находится IP→Routes
Mangle маркировка ответов для двух провайдеров
Правила маркировки маршрутов нужно определять только для белых(постоянных) IP адресов! Этот набор правил будет гарантировать то, что если пришёл input запрос на порт второго(или первого) провайдера, через этот же порт будет отправлен ответ. При отсутствии этих правил, доступ к роутеру по внешним IP может сопровождаться непредсказуемой работой.
Маркировка будет состоять из двух каскадных правил: маркировки соединения и маркировки маршрута
Настройка находится IP→Firewall→Mangle
/ip firewall mangle add action=mark-connection chain=input in-interface=pppoe-out1 \ new-connection-mark=From-ISP-1 add action=mark-routing chain=output connection-mark=From-ISP-1 \ new-routing-mark=To-ISP-1 add action=mark-connection chain=input in-interface=ether2 \ new-connection-mark=From-ISP-2 add action=mark-routing chain=output connection-mark=From-ISP-2 \ new-routing-mark=To-ISP-2
Статическая маршрутизация для маркированных маршрутов
Кроме стандартных правил маршрутизации, нужно добавить маршруты для промаркированных ответов с раздела Mangle.
Настройка находится IP→Routes
И все текущие правила статической маршрутизации будут иметь вид:
/ip route add distance=1 gateway=pppoe-out1 routing-mark=To-ISP-1 add distance=1 gateway=109.87.159.126 routing-mark=To-ISP-2 add comment=ISP-1 distance=1 gateway=pppoe-out1 add comment=ISP-2 distance=2 gateway=109.87.159.126
Настройка двух провайдеров MikroTik, режим резервирования(автопереключение)
Как было сказано выше, резервирование или автоматическое переключение между провайдерами это режим работы роутера MikroTik, когда есть основной провайдер и резервный. При отсутствии интернета у основного провайдера, должно происходить переключение на резервного провайдера. А когда услуга интернета на основном провайдере будет восстановлена, то следует снова вернуться с резервной линии на основную.
Резервирование(автопереключение) это самый распространённый метод работы двух и более интернет провайдеров на роутере MikroTik.
За исходную позицию будут приняты настройки, описанные в разделе “Подготовка для работы с двумя провайдерами в MikroTik →“
Описание переключение на резервную линию условно такое: роутер MikroTik будет отправлять ICMP(ping) запросы на 8.8.8.8(Google DNS) и в случае отсутствия ответа или большой задержки, интернет будет переключаться с основной(провайдер-1) линии на резервную(провайдер-2).
Добавить статический маршрут для Google DNS
Настройка находится IP→Routes
/ip route add comment=Netwatch distance=1 dst-address=8.8.8.8/32 gateway=pppoe-out1
Запретить ICMP запросы через провайдера-2
Настройка находится IP→Firewall
/ip firewall filter add action=drop chain=output comment=Netwatch dst-address=8.8.8.8 \ out-interface=ether2 protocol=icmp
Этим правилом будет гарантирована диагностика статуса интернет канала только через провайдера-1. При попытке отправить аналогичный запрос через провайдера-2, Firewall роутера MikroTik будет это блокировать.
Добавить правило Netwatch для переключения
Настройка находится Tools→Netwatch
/tool netwatch add down-script="/ip route disable [find comment=\"ISP-1\"]\r\ \n/ip route enable [find comment=\"ISP-2\"]\r\ \n:foreach i in=[/ip firewall connection find protocol~\"tcp\"] do={ /ip f\ irewall connection remove \$i }\r\ \n:foreach i in=[/ip firewall connection find protocol~\"udp\"] do={ /ip f\ irewall connection remove \$i }\r\ \nlog warning (\"ISP-1 IS DOWN\")" host=8.8.8.8 up-script="/ip route disab\ le [find comment=\"ISP-2\"]\r\ \n/ip route enable [find comment=\"ISP-1\"]\r\ \n:foreach i in=[/ip firewall connection find protocol~\"tcp\"] do={ /ip f\ irewall connection remove \$i }\r\ \n:foreach i in=[/ip firewall connection find protocol~\"udp\"] do={ /ip f\ irewall connection remove \$i }\r\ \nlog warning (\"ISP-1 IS UP\")"
- Host – узел, на который будут отправляться ICMP(ping) запросы;
- Interval – время, в течении которого будет производиться диагностика для смены статуса;
- Timeout – задержка пакета, которая будет восприниматься как отсутствие связи;
- Status – текущий статус узла;
- Закладка Up – скрипт, который будет выполнен, если провайдер-1 восстановит связь, после её обрыва;
- Закладка Down – скрипт, который будет выполнен, если связь с провайдером-1 будет прервана.
Представленными скриптами с помощью утилиты Netwatch будет происходить переключение между провайдерами. Все соединения, которые были установлены через провайлера-1 будут удалены. Это позволит гарантированно переключиться на провайдера-2.
Настройка 2 провайдеров в MikroTik, режим балансировки(одновременная работа)
Существует два метода распределения нагрузки между 2-мя провайдерами в MikroTik:
Ручная балансировка. Все узлы делятся в ручном режиме на 2-ве условные группы и каждая из групп направляется к выделенному ей провайдеру;
Автоматическая балансировка. Узлы роутера MikroTik будут поделены на группы с помощью внутренних инструментов RouterOS.
Пример с балансировкой будет отличаться тем, чтобы в рамках настройки внимание также будет уделено соединениям. Переключение станет более мягким и незаметным и это будет достигнуто благодаря маркировке соединений и частичную их очистку при переключении между провайдерами.
Когда работают оба провайдеры, нагрузка распределяется согласно ручному распределению в Address list.
ISP-1=Down & ISP-2=Up → соединения To-ISP-1 очищаются и начинают работать через ISP-2. При этом соединения To-ISP-2 остаются не тронутыми. При восстановлении связи с ISP-1, соединения To-ISP-1 также очищаются и трафик вместо ISP-2 начинает проходить через ISP-1.
ISP-1=Up & ISP-2=Down → соединения To-ISP-2 очищаются и начинают работать через ISP-1. При этом соединения To-ISP-1 остаются не тронутыми. При восстановлении связи с ISP-2, соединения To-ISP-2 также очищаются и трафик вместо ISP-1 начинает проходить через ISP-2.
Ручная настройка балансировки 2 провайдеров в MikroTik
Как видно из названия, условную подсеть роутера MikroTik будет поделено на две группы: To-ISP-1 и To-ISP-2.
- pppoe-out1 – это провайдер-1;
- ether2 – это провайдер-2.
Настройка находится IP→Firewall→Address List
И для каждой из групп, нужно промаркировать соединения и маршрут, для плавного переключение между провайдерами в случае обрыва одного из них.
Mangle маркировка соединений для балансировки 2 провайдеров
Настройка находится IP→Firewall→Mangle
Mangle маркировка маршрута для балансировки двух провайдеров
Настройка находится IP→Firewall→Mangle
Аналогичные действия по маркировке соединений и маршрута нужно выполнить для Address List = To-ISP-2.
Общий вид раздела Mangle
/ip firewall address-list add address=192.168.2.2-192.168.2.125 list=To-ISP-1 add address=192.168.2.126-192.168.2.254 list=To-ISP-2 /ip firewall mangle add action=mark-connection chain=prerouting disabled=no dst-address-type=\ !local new-connection-mark=To-ISP-1-Connection src-address-list=To-ISP-1 add action=mark-routing chain=prerouting connection-mark=To-ISP-1-Connection \ disabled=no new-routing-mark=To-ISP-1 src-address-list=To-ISP-1 add action=mark-connection chain=prerouting disabled=no dst-address-type=\ !local new-connection-mark=To-ISP-2-Connection src-address-list=To-ISP-2 add action=mark-routing chain=prerouting connection-mark=To-ISP-2-Connection \ disabled=no new-routing-mark=To-ISP-2 src-address-list=To-ISP-2
Для каждой группы узлов To-ISP-1 и To-ISP-2 будет создано по два маршрута, чтобы обеспечить плавное переключение согласно первоначальным условиям по балансировке 2 провайдеров.
Общий вид таблицы маршрутизации при балансировке 2 провайдеров
Настройка находится IP→Route
/ip route add comment=Group-1-1 distance=1 gateway=pppoe-out1 routing-mark=To-ISP-1 add comment=Group-2-1 disabled=yes distance=2 gateway=109.87.159.126 \ routing-mark=To-ISP-1 add comment=Group-2-2 distance=1 gateway=109.87.159.126 routing-mark=To-ISP-2 add comment=Group-1-2 disabled=yes distance=2 gateway=pppoe-out1 \ routing-mark=To-ISP-2 add comment=Netwatch-2 distance=1 dst-address=8.8.4.4/32 gateway=109.87.159.126 add comment=Netwatch-1 distance=1 dst-address=8.8.8.8/32 gateway=\ pppoe-out1
Контроль ICMP запросов через нужный интерфейс
Эти правила обеспечат контроль статуса интернет соединения для каждого из провайдера. Диагностика статуса интернета будет осуществляться только через те интерфейсы, которые обозначены в таблице маршрутизации с комментариями Netwatch-1 и Netwatch-2.
Настройка находится IP→Firewall→Filter Rules
/ip firewall filter add action=drop chain=output comment=Netwatch-1 dst-address=8.8.8.8 \ out-interface=ether2 protocol=icmp add action=drop chain=output comment=Netwatch-2 dst-address=8.8.4.4 \ out-interface=!ether2 protocol=icmp
Настройка Netwatch для переключения провайдеров
И собственно утилита Netwatch, именно она будет заниматься переключением между провайдерами в случае обрыва связи на одном из них.
Настройка находится Tools→Netwatch
/tool netwatch add down-script="/ip route disable [find comment=\"ISP-2\"]\r\ \n/ip route disable [find comment=\"Group-2-2\"]\r\ \n/ip route enable [find comment=\"Group-1-2\"]\r\ \nlog warning (\"ISP-2 IS DOWN\")\r\ \n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-2-C\ onnection\"] do={ /ip firewall connection remove \$i }" host=8.8.4.4 \ up-script="/ip route enable [find comment=\"ISP-2\"]\r\ \n/ip route enable [find comment=\"Group-2-2\"]\r\ \n/ip route disable [find comment=\"Group-1-2\"]\r\ \nlog warning (\"ISP-2 IS UP\")\r\ \n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-2-C\ onnection\"] do={ /ip firewall connection remove \$i }" add down-script="/ip route disable [find comment=\"ISP-1\"]\r\ \n/ip route disable [find comment=\"Group-1-1\"]\r\ \n/ip route enable [find comment=\"Group-2-1\"]\r\ \nlog warning (\"ISP-1 IS DOWN\")\r\ \n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-1-C\ onnection\"] do={ /ip firewall connection remove \$i }" host=8.8.8.8 \ up-script="/ip route enable [find comment=\"ISP-1\"]\r\ \n/ip route enable [find comment=\"Group-1-1\"]\r\ \n/ip route disable [find comment=\"Group-2-1\"]\r\ \nlog warning (\"ISP-1 IS UP\")\r\ \n:foreach i in=[/ip firewall connection find connection-mark~\"To-ISP-1-C\ onnection\"] do={ /ip firewall connection remove \$i }"
Балансировка и резервирование в MikroTik используя настройки NTH раздела Mangle
Можно также применить схему, в которой каждое соединение будет промаркировано по принципу:
четный-пакет = провайдер-1
нечетный-пакет = провайдер-2
Настройка находится IP→Firewall→Mangle
/ip firewall mangle add action=mark-connection chain=prerouting disabled=yes dst-address-type=\ !local new-connection-mark=To-ISP-1-Connection src-address-list=To-ISP-1 nth=2,1 add action=mark-routing chain=prerouting connection-mark=To-ISP-1-Connection \ disabled=yes new-routing-mark=To-ISP-1 src-address-list=To-ISP-1 add action=mark-connection chain=prerouting disabled=yes dst-address-type=\ !local new-connection-mark=To-ISP-2-Connection src-address-list=To-ISP-2 nth=2,2 add action=mark-routing chain=prerouting connection-mark=To-ISP-2-Connection \ disabled=yes new-routing-mark=To-ISP-2 src-address-list=To-ISP-2
Балансировка между двумя провайдерами будет производиться в соотношении 50:50, это определяется параметрами nth=2,1 и nth=2,2.
Все остальные действия по настройке маршрутизации, Firewall и Netwatch будут аналогичны описанных в разделе “Ручная балансировка 2 провайдеров в MikroTik →“.
Настройка балансировки двух провайдеров Per Connection Classifier (PCC) раздела Mangle
Per Connection Classifier (PCC) позволят разделить трафик на равные потоки с возможностью держать пакеты с определенным набором параметров в одном потоке (определяется в наборе параметров из src-address, src-port, dst-address, dst-port)
Настройка находится IP→Firewall→Mangle
/ip firewall mangle add action=mark-connection chain=prerouting dst-address=\ !192.168.2.0/24 new-connection-mark=To-ISP-1-Connection \ per-connection-classifier=both-addresses-and-ports:2/0 src-address=\ 192.168.2.0/24 add action=mark-routing chain=prerouting connection-mark=To-ISP-1-Connection \ new-routing-mark=To-ISP-1 src-address=192.168.2.0/24 add action=mark-connection chain=prerouting dst-address=\ !192.168.2.0/24 new-connection-mark=To-ISP-2-Connection \ per-connection-classifier=both-addresses-and-ports:2/1 src-address=\ 192.168.2.0/24 add action=mark-routing chain=prerouting connection-mark=To-ISP-2-Connection \ new-routing-mark=To-ISP-2 src-address=192.168.2.0/24
Все остальные действия по настройке маршрутизации, Firewall и Netwatch будут аналогичны описанных в разделе “Ручная балансировка 2 провайдеров в MikroTik →“.
Провайдер меняет шлюз в DHCP клиенте, не работает переключение или балансировка
DHCP клиент это один из самых распространённых типов настроек WAN интерфейса. Все настройки проходят в автоматическом режиме и не требуют ни каких дополнительных усилий. Однако в варианте с балансировкой двух провайдеров, используемая настройка требует явного определения шлюза(Gateway) в таблице маршрутизации. А если IP адрес серый(динамический), то правила с балансировкой перестанут работать при его изменении.
Для того, чтобы в правиле статической маршрутизации указывался текущий шлюз(Gateway) провайдера, в свойствах DHCP клиента следует укатать скрипт
Настройка находится IP→DHCP client
{ :local rmark "ISP-2" :local count [/ip route print count-only where comment="ISP-2"] :if ($bound=1) do={ :if ($count = 0) do={ /ip route add gateway=$"gateway-address" comment="ISP-2" distance=2 } else={ :if ($count = 1) do={ :local test [/ip route find where comment="ISP-2"] :if ([/ip route get $test gateway] != $"gateway-address") do={ /ip route set $test gateway=$"gateway-address" } } else={ :error "Multiple routes found" } } } else={ /ip route remove [find comment="ISP-2"] } }
И аналогичный пример, только для первого провайдера с добавлением маршрута к 8.8.4.4.
{ :local rmark "ISP-1" :local count [/ip route print count-only where comment="ISP-1"] :if ($bound=1) do={ :if ($count = 0) do={ /ip route add gateway=$"gateway-address" comment="ISP-1" distance=1 /ip route add gateway=$"gateway-address" comment="Netwatch" distance=1 dst-address=8.8.4.4 } else={ :if ($count = 1) do={ :local test [/ip route find where comment="ISP-1"] :if ([/ip route get $test gateway] != $"gateway-address") do={ /ip route set $test gateway=$"gateway-address" } } else={ :error "Multiple routes found" } } } else={ /ip route remove [find comment="ISP-1"] /ip route remove [find comment="Netwatch"] } }
Скрипт может быть дополнен добавлениями(и удалениями) маршрутов для Routing-mark и Netwatch.
Одновременный проброс с двух провайдеров в MikroTik настройка Mangle
Входящая задача: сделать проброс портов таким образом, чтобы сервер отвечал с того провайдера, с которого пришёл запрос. На практике это может быть Web сервер(443\https), у которого объявлены две DNS записи с двумя внешними IP роутера MikroTik.
Настройка находится IP→Firewall→Mangle
/ip firewall mangle add chain=forward action=mark-connection new-connection-mark=From-ISP-1 in-interface=pppoe-out1 add chain=prerouting action=mark-routing new-routing-mark=To-ISP-1 passthrough=no connection-mark=From-ISP-1 in-interface=bridge add chain=forward action=mark-connection new-connection-mark=From-ISP-2 in-interface=ether2 add chain=prerouting action=mark-routing new-routing-mark=To-ISP-2 passthrough=no connection-mark=From-ISP-2 in-interface=bridge
где
- pppoe-out1 – это провайдер-1;
- ether2 – это провайдер-2;
- bridge – локальный bridge интерфейс.
Есть вопросы или предложения по настройке 2 провайдеров в MikroTik? Активно предлагай свой вариант настройки! Оставить комментарий →
Материал из MikroTik Wiki
Введение
В статье разбирается настройка двух Интернет-каналов в режиме резервирования. Т. е. в ситуациях, когда один провайдер будет работать постоянно (основной канал), а второй будет включаться в случае, если Интернет через первый канал будет недоступен (резервный канал).
Есть два основных способа настройки работы устройств МикроТик для работы с двумя провайдерами в режиме резервирования. Кратко их можно охарактеризовать, как «быстрый способ» и «комплексный способ». Первый способ является быстрым для настройки. Что явно следует из названия. Второй способ является более сложным в настройке, но при этом лишен недостатков, которые присущи первому способу.
Схема сети
Внешняя сеть:
Интернет-канал №1
IP-адреса маршрутизатора: 10.1.100.1
IP-адреса провайдера: 10.1.100.254
маска: 255.255.255.0
Интернет-канал №2
IP-адреса маршрутизатора: 10.1.200.1
IP-адреса провайдера: 10.1.200.254
маска: 255.255.255.0
Внутренняя сеть:
IP-адреса маршрутизатора: 192.168.15.1
маска: 255.255.255.0
Быстрый способ
Через графический интерфейс
Приведенные ниже манипуляции подразумевают, что вы уже настроили IP-адреса двум внешним интерфейсам, прописали маршруты и сделали правила masquerade.
Если у вас статические IP-адреса от обоих провайдеров, то простейшая настройка резервирования сводится к установке приоритетов маршрутов на первого и второго провайдера.
Зайти в IP => Routes и для маршрута на Провайдера-1 указываем Check Gateway=ping и Distance=5. В настройках маршрута на Провайдера-2 указываем Check Gateway=ping и Distance=10. Значения параметра Distance не обязательно должны быть такими. Важно, что бы значения для Провайдера-1 было меньше чем для Провайдера-2. Как правило, статические маршруты имеют приоритет (Distance) равный единице. Для примера мы привели другое значение.
При такой схеме весь трафик будет идти через Провайдера-1, путь через Провайдера-2 будет резервным. Шлюзы обоих провайдеров будут периодически пинговаться, и при недоступности шлюза Провайдера-1 маршрут на него будет отключен, а трафик пойдет по маршруту на Провайдера-2. После того, как шлюз Провайдера-1 станет опять доступным трафик опять пойдет через него.
Недостатком данной схемы является то, что в ней проверяется не наличие Интернета, а именно доступность следующего узла. Часто встречаются ситуации, когда оборудование провайдера (следующий узел) доступно, а интернета нет. Очень яркий пример это Интернет через ADSL-модем. Соседний узел (ADSL-модем) будет доступным, а Интернет нет.
Для первого Интернет-канала:
Для второго Интернет-канала:
Через консоль
Первый маршрутизатор:
/ip route
add check-gateway=ping distance=5 gateway=10.1.100.254
Второй маршрутизатор:
/ip route
add check-gateway=ping distance=10 gateway=10.1.200.254
Комплексный способ
Через графический интерфейс
Приведенные ниже манипуляции подразумевают, что вы уже настроили IP-адреса двум внешним интерфейсам, прописали маршруты и сделали правила NAT.
«Комплексный» способ основан на том, что с помощью встроенной утилиты «Netwatch», мы будем один раз в минуту проверять доступность интернета с помощью команды ping до узла 8.8.4.4 через первый интернет канал. Доступ до этого узла через второй Интернет-канал будет всегда закрыт. Таким образом если ping проходит — это значит, что первый канал находится в рабочем состоянии и он должен быть включен, а 2-ой канал должен быть выключен. И наоборот: если ping не проходит — это значит, что первый канал не работает и он должен быть выключен и включен 2-ой канал. Как только ping начнет проходить произойдет обратной переключение. Нужный маршрут утилита будет определять по комментарию, который мы назначим. Как видите этот способ лишен недостатка первого способа.
Добавить комментарии к маршрутам. К маршруту через первого провайдера добавить комментарий ISP1, к маршруту через второго провайдера добавить комментарий ISP2. Приведем пример для первого провайдера. Для второго действие делается аналогично.
Создать статический маршрут до 8.8.4.4. В IP => Routes создать маршрут до адреса 8.8.4.4 через шлюз 1-го интернет провайдера.
Добавить правило блокирующее доступ к 8.8.4.4 через 2-ой WAN-интерфейс.
Добавить условие переключения. В Tools => Netwatch на вкладке «Host» создать новый «Netwatch host». В графе «Host» указать отслеживаемый ip-адрес, в «Interval» — частоту осуществляемых проверок, а в «Timeout» — время недоступности хоста при котором сработает триггер.
В примере указан адрес 8.8.8.8. Это опечатка. Должен быть адрес 8.8.4.4
На вкладке «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
Через консоль
/ip route
set comment=ISP1 [find gateway=10.1.100.254]
set comment=ISP2 [find gateway=10.1.200.254]
/ip route
add distance=1 dst-address=8.8.4.4/32 gateway=10.1.100.254
/ip firewall filter
add action=drop chain=output dst-address=8.8.4.4 out-interface=ether4-WAN2 protocol=icmp comment="Deny 8.8.4.4 through reserved internet-channel"
/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.4.4 \
up-script="/ip route set [find comment=\"ISP1\"] disabled=no\r\
\n/ip route set [find comment=\"ISP2\"] disabled=yes"