В этом руководстве мы затронем тему маркировки пакетов (mangle) и настройку резервирования интернет соединения Dual WAN на MikroTik как одну из важных тем. В маршрутизаторах Mikrotik данный функционал реализован через Mangle — используется для того чтобы пометить пакеты/соединения для дальнейшей их обработки очередями (простыми или деревьями), NAT правилами, таблицами маршрутизации или изменению таких параметров как:
- TOS (DSCP);
- TTL;
- MSS;
На одном пакете/соединении может быть только одна метка
Данные метки работают только на определённом роутере и не передаются по сети другим участникам, хотя при желании можно на это повлиять.
В этом примере мы будем настраивать Dual WAN. Предполагается что у вас есть 2 провайдера, основной и резервный, с помощью Mangle мы сделаем правильную маркировку и выпустим клиентов через основного провайдера. Так же прикрутим скрипт, который будет проверять доступность выхода в интернет через обоих провайдеров, и в случае недоступности через основной, переключать на резервный канал.
Схема сети
Предположим, что у нас имеется:
- Широковещательная плоская 192.168.1.0/24;
- Два белых статических IP адреса;
- Один роутер;
- Два свича;
- RouterOS 6.48.1.
Настройка правил NAT
Для того чтобы наши внутренние клиент выходили в интернет, нам нужно 2 правила NAT. Один под основного провайдера, другой для резервного.
Маркировка трафика
Наша следующая задача, промаркировать трафик для каждого провайдера, на вход и на выход. Открываем на микротике IP – Firewall – Mangle и создаём новое правило.
Нас интересует цепочка Prerouting, входящий интерфейс первого оператора. Маркируем соединение и задаём понятное имя марки. Для оптимизации нагрузки можно выбрать только новые соединения.
Следующим правилом создаём маркировку роутинга для нашей ранее созданной метки соединения.
Теперь займемся output. На основе коннекшен марки создаём правило роутинга.
Последним правилом маркировки для ISP1 будет цепочка output.
Для первого оператора метки заданы. По аналогии создаём и для второго, только придумываем другие имена меткам и в последнем правиле указываем соответствующий адрес.
Задаём соответствующий входящий интерфейс.
Создаём маркировку роутинга на основе connection mark.
И 2 правила на output.
В итоге вся маркировка трафика у нас будет выглядеть таким образов.
Настройка Routing Rules
Следующий этап, это настройка правил и таблиц маршрутизации. Следует разнести трафик по соответствующим провайдерам. Создаём Rule с src address первого оператора, впишем вручную новую table.
По аналогии и для второго провайдера.
Порядок имеет значение. Необходимо указать все наши локальные сети, трафик к ним будет идти через табличку main.
А теперь все наши mark routing выпустим через соответствующие таблички.
Создание таблиц маршрутизации
В основной таблице маршрутизации нужно создать 2 маршрута, основной и резервный. Для этого вам нужно определиться кто из них какую роль будет выполнять. Т.к. активный будет всегда один. У первого метрика 10.
У второго метрика 20.
Открываем table-ISP1 и создаём default route с любой метрикой через шлюз провайдера.
Аналогично и для table-ISP2. Не перепутайте шлюзы.
Чуть не забыл, обязательно дадим комментарии записям в main. Общий вид Route List следующий.
Настройка переключения интернет-каналов
Есть несколько способов отслеживания состояния. Один из них — это проверка провайдерского шлюза arp или ping запросами в самой настройке маршрута. Но он не эффективен, т.к. gateway может быть и доступен, а доступ в инет за ним нет. Как один из вариантов, проверять доступность на основе пинг запросов каких-либо крупных сервисов, которые доступны круглосуточно. Встроенных средств у Mikrotik нет, и по этой причине будем использовать простенький скрипт ниже.
#Main interface name :global MainIf ether1 #Failover interface name :global RsrvIf ether2 :local PingCount 1 :local PingTargets {77.88.8.8; 8.8.8.8} :local host :local MainIfInetOk false :local RsrvIfInetOk false :local MainPings 0 :local RsrvPings 0 foreach host in=$PingTargets do={ :local res [/ping $host count=$PingCount interface=$MainIf] :set MainPings ($MainPings + $res) :local res [/ping $host count=$PingCount interface=$RsrvIf] :set RsrvPings ($RsrvPings + $res) :delay 1 } :set MainIfInetOk ($MainPings >= 1) :set RsrvIfInetOk ($RsrvPings >= 1) :put "MainIfInetOk=$MainIfInetOk" :put "RsrvIfInetOk=$RsrvIfInetOk" :local MainGWDistance [/ip route get [find comment=" ISP1-WAN-Route"] distance] :local RsrvGWDistance [/ip route get [find comment=" ISP2-WAN-Route"] distance] :put "MainGWDistance=$MainGWDistance" :put "RsrvGWDistance=$RsrvGWDistance" if ($MainIfInetOk && ($MainGWDistance >= $RsrvGWDistance)) do={ /ip route set [find comment="ISP1-WAN-Route"] distance=10 /ip route set [find comment="ISP2-WAN-Route"] distance=20 :put "switched to MAIN internet connection" /log info "switched to MAIN internet connection" /ip firewall connection remove [find] } if (!$MainIfInetOk && $RsrvIfInetOk && ($MainGWDistance <= $RsrvGWDistance)) do={ /ip route set [find comment="ISP1-WAN-Route"] distance=20 /ip route set [find comment="ISP2-WAN-Route"] distance=10 :put "switched to RESERVE internet connection" /log info "switched to RESERVE internet connection" /ip firewall connection remove [find] }
Основные параметры, которые вам нужно будет исправить это:
- :global MainIf ether1 – основной интерфейс;
- :global RsrvIf ether2 – резервный интерфейс;
- :local PingTargets {77.88.8.8; 8.8.8.8} – таргеты, которые будите мониторить;
- :local MainGWDistance – переменная метрики для ISP1;
- :local RsrvGWDistance – переменная метрики для ISP2;
- Комментарий маршрут.
Добавляем данный скрипт в хранилище, даем имя check-internet.
Тестируем работу через консоль.
Как мы видим все отлично.
Добавляем задание в планировщик. Обязательно указываем интервал. В данном случае раз в 15 сек. Это самый минимальный рекомендуемый интервал, ниже ставить не советую.
Из особенностей, очищает все соединения, когда происходит переключение. Вы так же можете добавить свои команды в конце тела.
Проверка работоспособности
Итак, мы все настроили и ждём чуда. Т.к. запросы у нас ICMP, для ускорения результата, на вышестоящем оборудовании включу блокировку данного трафика.
Если отключу блокировку, то все встаёт на свои места.
Вы можете прикрутить отправку письма вам на e-mail в случае переключения, или допустим полный сброс роутера))). Вот и все — в этой статье мы рассмотрели настройку настройка Dual WAN на MikroTik, для этого использовали маркировку трафика «mangle». Теперь основываясь на этом руководстве можете создавать свои собственные конфигурации.