Настройка двух провайдеров на MikroTik — одна из самых популярных задач. Существует два основных подхода:
базовое резервирование (Failover) и
балансировка нагрузки (Load Balancing). Выбор зависит от ваших целей.
Вот как реализовать каждый из них.
1. Балансировка нагрузки с автоматическим резервированием
Этот режим позволяет использовать ресурсы обоих провайдеров одновременно. Трафик распределяется между ними, но в случае сбоя одного канала, весь трафик автоматически переключается на работающий.
Ключевая технология здесь —
Per Connection Classifier (PCC). Она позволяет разделять трафик не по пакетам, а по целым соединениям, чтобы один и тот же сеанс (например, загрузка файла) всегда шел через одного провайдера.
Схема с PCC
- Настройка интерфейсов: Назначьте ваши физические порты (ether1, ether2) под WAN1 и WAN2. Настройте получение IP-адресов (статически, через DHCP-клиент или PPPoE).
- Создание таблиц маршрутизации: В RouterOS v7 (актуальная версия) сначала нужно создать именованные таблицы:
bash
/routing table add fib name=to_ISP1
/routing table add fib name=to_ISP2
Важно: Ключевой момент для RouterOS v7 — это флаг fib. Без него таблица будет существовать, но не будет участвовать в пересылке пакетов.
- Настройка Mangle (PCC):
Создаем правила в /ip firewall mangle, чтобы помечать новые соединения. per-connection-classifier разделяет трафик на два потока (2/1 и 2/2).
bash
# Для ISP1
/ip firewall mangle add chain=prerouting in-interface=bridge-lan \
action=mark-connection new-connection-mark=ISP1-conn \
per-connection-classifier=both-addresses:2/1 passthrough=no
/ip firewall mangle add chain=prerouting connection-mark=ISP1-conn \
action=mark-routing new-routing-mark=to_ISP1 passthrough=no
# Для ISP2
/ip firewall mangle add chain=prerouting in-interface=bridge-lan \
action=mark-connection new-connection-mark=ISP2-conn \
per-connection-classifier=both-addresses:2/2 passthrough=no
/ip firewall mangle add chain=prerouting connection-mark=ISP2-conn \
action=mark-routing new-routing-mark=to_ISP2 passthrough=no
- Настройка маршрутов:
Добавляем маршруты в созданные таблицы. Маршруты с меньшим значением distanceимеют приоритет.
bash
# Основные маршруты
/ip route add dst-address=0.0.0.0/0 gateway=192.168.1.1 routing-table=to_ISP1 distance=1
/ip route add dst-address=0.0.0.0/0 gateway=192.168.2.1 routing-table=to_ISP2 distance=1
# Резервные маршруты для каждого провайдера (на случай сбоя)
/ip route add dst-address=0.0.0.0/0 gateway=192.168.2.1 routing-table=to_ISP1 distance=2
/ip route add dst-address=0.0.0.0/0 gateway=192.168.1.1 routing-table=to_ISP2 distance=2
- Настройка NAT (маскарадинг):
Для каждого WAN-интерфейса нужно включить маскарадинг, чтобы пакеты покидали сеть с правильным IP-адресом.
bash
/ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade
/ip firewall nat add chain=srcnat out-interface=ether2 action=masquerade
2. Простое резервирование (Failover)
Если вам не нужна балансировка, а требуется только автоматическое переключение на резервный канал при пропадании основного, конфигурация будет проще.
Схема с резервированием
- Настройка интерфейсов: Аналогично первому варианту.
- Настройка маршрутов:
Основной маршрут получает приоритет distance=1, резервный — distance=2.
bash
/ip route add dst-address=0.0.0.0/0 gateway=192.168.1.1 distance=1
/ip route add dst-address=0.0.0.0/0 gateway=192.168.2.1 distance=2
В этой базовой конфигурации роутер будет использовать маршрут с меньшим distance, пока он существует. Если интерфейс основного провайдера отключится физически, маршрут будет удален, и трафик пойдет по резервному.
- Расширенное резервирование с NetWatch (Рекомендуется):
Провайдер может «упасть» не физически, а на уровне доступа в интернет. В этом случае маршрут останется в таблице, и переключения не произойдет.
Для надежности используют NetWatch или планировщик (Scheduler), который проверяет доступность надежного IP-адреса (например, 8.8.8.8) через основного провайдера.
- NetWatch пингует контрольный IP.
- Если пинг не проходит, срабатывает скрипт, который отключает (/ip route disable) основной маршрут или повышает его distance.
Дополнительные сценарии
- Политическая маршрутизация (Policy-Based Routing): Если нужно, чтобы трафик от определенных устройств (например, сервера) всегда шел через конкретного провайдера, независимо от балансировки или резерва. Это делается через создание правил в /routing rule или через Mangle, помечая трафик по src-address.
- Уведомления: В вашу конфигурацию можно добавить скрипты для отправки уведомлений в Telegram или по электронной почте при смене провайдера, что очень удобно для мониторинга.
Практические готовые решения
На GitHub есть несколько готовых скриптов для автоматической настройки:
- vishnunuk/mikrotik-dual-wan-loadbalance-failover: Полноценное решение для RouterOS v7 с балансировкой, резервированием и уведомлениями по Email. Подходит для сложных сетей.
- justtryhard/MikroTik-Dual-WAN-Failover-Configuration: Простой скрипт для резервирования (Failover) с уведомлениями в Telegram. Отличный выбор для быстрого старта.
- mizitheji/Load-balancing-ISP-using-Mikrotik: Конфигурация с балансировкой PCC для RouterOS v7, включающая настройку VLAN для сегментации сети