Настройка правил NAT
Для выхода в интернет нужно создать правило NAT для основного и резервного провайдера.
Маркировка трафика
Маркируем входящий и исходящий трафик для провайдеров ISP1 и ISP2.
Меню IP – Firewall – Mangle — новое правило. Выбираем цепочку Prerouting, входящий интерфейс ISP1. Маркируем соединение и задаём имя марки From-ISP1. Для оптимизации нагрузки выбираем только новые соединения.
Создаём маркировку роутинга для созданной марки соединения From-ISP1.
Маркируем правило роутинга output
Последним правилом маркировки для ISP1 будет цепочка output.
По аналогии создаём и для второго. Должно получиться так:
Настройка Routing Rules
Следующий этап, это настройка правил и таблиц маршрутизации. Следует разнести трафик по соответствующим провайдерам. Создаём Rule с src address первого оператора, впишем вручную новую table.
Порядок имеет значение. Необходимо указать все наши локальные сети, трафик к ним будет идти через табличку main.
А теперь mark routing выпустим через соответствующие таблички.
Создание таблиц маршрутизации
В основной таблице маршрутизации нужно создать 2 маршрута, основной и резервный. Для этого вам нужно определиться кто из них какую роль будет выполнять. Т.к. активный будет всегда один. У первого метрика 1
Открываем 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 {GW1; 8.8.8.8: GW2}
: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″] distance]
:local RsrvGWDistance [/ip route get [find comment=»ISP2″] distance]
:put «MainGWDistance=$MainGWDistance»
:put «RsrvGWDistance=$RsrvGWDistance»
if ($MainIfInetOk && ($MainGWDistance >= $RsrvGWDistance)) do={
/ip route set [find comment=»ISP1″] distance=1
/ip route set [find comment=»ISP2″] distance=2
:put «switched to main internet connection»
:log info «switched to main internet connection»
;tool e-mail send to=»[email protected]» subject «Mikrotik to main internet connection»
}
if (!$MainIfInetOk && $RsrvIfInetOk && ($MainGWDistance <= $RsrvGWDistance)) do={
/ip route set [find comment=»ISP1″] distance=2
/ip route set [find comment=»ISP2″] distance=1
:put «switched to reserve internet connection»
:log info «switched to reserve internet connection»
;tool e-mail send to=»[email protected]» subject «Mikrotik to reserv internet connection»
}
Основные параметры, которые вам нужно будет исправить это:
- :global MainIf ether1 – основной интерфейс;
- :global RsrvIf ether2 – резервный интерфейс;
- :local PingTargets {8.8.4.4; 8.8.8.8} – IP для мониторинга;
- :local MainGWDistance – переменная метрики для ISP1;
- :local RsrvGWDistance – переменная метрики для ISP2;
- Комментарий маршрут.
Сохраните скрипт с именем dual_wan
Проверяем работу в терминале командой
/system script run dual_wan
Если настроена почта, скрипт отправит письмо о переключении каналов.