Попробуем накидать шпаргалку по настройке резервирования каналов. Как-то так сложилось, что задач балансировки подключений к интернету возникало нечасто, а вот резервирования – на каждом шагу. Точнее, требовалось “чтобы всё работало” и при этом ширины основного провайдера вполне хватало на нужды выхода в интернет. Кроме того, при использовании балансировки регулярно возникают сложности с тем, что запросы наружу почему-то прилетают с разных адресов. Почему – непонятно (#сарказм). Стало быть, будем делать всё же failover, а не balancing.
Вкратце, решение следующее – делаем два маршрута в 0.0.0.0 с разным весом. Для основного провайдера поменьше, для резервного побольше. Причем оба маршрута делаем рекурсивными через любые разные высокодоступные адреса в интернете. Ну а чтобы корректно отвечать с того интерфейса, куда прилетел запрос извне, маркируем траффик и разводим его по разным таблицам – суп отдельно, мухи отдельно. Существует вариант со скриптами, но мне нравится он куда меньше, поскольку работает нестабильно из моего опыта.
Подробнее? Сейчас всё расскажу. Для начала, разумеется, надо настроить адреса на интерфейсах, которые будут смотреть наружу. Если настройки вы получаете исключительно по DHCP, то не забываем отключить параметр “Add default route”. Хотя я в этом случае поискал бы провайдера, который способен выдать статичный адрес и создавать мне лишних проблем. Да, я знаю про всякие PPPoE, но на дворе 21 век и найти внятного провайдера всё проще. Плюс в базовую настройку я бы добавил мысль объединить WAN-интерфейсы в группу. Как минимум, это упрощает правило NAT. Как максимум – уменьшает общее число правил в файрволе, что в свою очередь ускоряет работу железки.
Далее, нужно настроить маркировку траффика. Это гарантирует, что роутер будет отвечать с того интерфейса, на который пришел запрос. Если мы просто выходим в интернет, это быть может неактуально. А вот если есть какие-то сервисы внутри сети или мы поднимаем туннели, не стОит вводить в заблуждение удаленный роутер отправляя пакеты откуда придётся. Итак, заходим в раздел IP -> Firewall -> Mangle и создаем правила следующего содержания для каждого из провайдеров:
Маркируем входящий трафик
General -> chain | prerouting |
General -> In. Interface | WAN-1 |
General -> Connection Mark | no-mark |
Action -> Action | mark connection |
Action -> New Connection Mark | From-WAN-1 |
Action -> Passthrough | disable |
Направляем ответный транзитный трафик в нужную таблицу маршрутизации
General -> chain | prerouting |
General -> In. Interface List | ! WAN |
General -> Connection Mark | From-WAN-1 |
Extra -> Dst. Address Type | ! local |
Action -> Action | mark routing |
Action -> New Routing Mark | To-WAN-1 |
Action -> Passthrough | disable |
Отправляем ответный локальный трафик в нужную таблицу маршрутизации
General -> chain | output |
General -> Connection Mark | From-WAN-1 |
Extra -> Dst. Address Type | ! local |
Action -> Action | mark routing |
Action -> New Routing Mark | To-WAN-1 |
Action -> Passthrough | disable |
Осталось настроить таблицу маршрутизации. Для начала требуется добавить маршруты до высокодоступных серверов вне нашей сети. Например, DNS’ы Google или же любые другие. Главное, чтобы они были доступны чуть более, чем всегда и не принадлежали нашей сети. Кроме того, нужно проверить, что значение Scope равно 10, вместо 30 по умолчанию. Так мы говорим, что это типа Connected Route и приоритет у него повыше.
Dst. Address | 8.8.8.8 (или любой другой) Разные для разных каналов! |
Gateway | Шлюз провайдера |
Type | Оставляем “unicast” |
Distance | 1 |
Scope | 10 |
Target Scope | 10 |
Добавим рекурсивный маршрут наружу с разным весом
Dst. Address | 0.0.0.0/0 |
Gateway | 8.8.8.8 (адрес из предыдущего шага) |
Check Gateway | ping (проверяем доступность высокодоступного хоста) |
Type | Оставляем “unicast” |
Distance | 1 для основного провайдера и 2 для резервного |
Scope | 30 |
Target Scope | 10 |
Ну и наконец маршруты для маркированного траффика по одному на провайдера, чтобы отвечать оттуда, где спрашивали.
Dst. Address | 0.0.0.0/0 |
Gateway | Шлюз провайдера |
Type | Оставляем “unicast” |
Distance | 1 |
Scope | 30 |
Target Scope | 10 |
Routing Mark | To-WAN-1 (из правил раздела mangle) |
Микротик сам разберется с рекурсивными маршрутами и сделает соответствующие пометки. У меня эта схема успешно работала и работает. Переключение, конечно, происходит не мгновенно, но достаточно быстро. Для опубликованных сервисов рекомендую ознакомиться со статьей на эту тему.