Налаштування правил 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
Якщо налаштовано пошту, скрипт надішле лист про перемикання каналів.