В ожидание технических работ у моего провайдера (а обещают их с переменным успехом с 9 утра до 19 вечера) было решено сделать домашний интернет более устойчивым к подобным событиям. Работы будут в будний день, в промежутке времени интернет может отваливать на неопределенное время несколько раз.

Исходные данные

Есть граничный маршрутизатор (по совместительству фаервол), и ему доступны два интерфейса с двумя провайдерами. На одном дом.ру, на втором Yota. Оба провайдера выдают интернет по DHTP, оба оказываются в Opnsense уже в виде 10-гигабитных виртуальных интерфейсов. То есть внешней настройкой и доступом портов внутри Opnsense тут заниматься не будем.

Почему именно Yota, тут несколько причин, но в основном из-за отсутствия всяких дополнительных сервисов как таковых и возможность включить такой тариф:

Бесплатный тариф для ожидания

Да, это позволяет не платить за интернет, пока он не понадобится. И в моменте заплатить за сутки или двое.

Опишу тут только настройку DHCP на интерфейсах (на примере Yota, Интерфейсы -> Назначения портов):

Назначаем интерфейс

На странице Интерфейсы проверяем что бы наш первый и второй интернет интерфейсы были назначены в качестве устройств. В устройстве нужно включить DHCP для протокола IPv4 (да, ни первый ни второй провайдер не дает IPv6 здесь и сейчас).

Настройки DHCP

Теперь в статусах интерфейсов можно глянуть, что бы каждому из них выдался внутренний IP адрес от провайдера и двигаться дальше.

Настройка Gateway (сетевых шлюзов)

Теперь настраивается несколько gateway (сетевых шлюзов) для каждого из подключений (Система -> Шлюзы -> Конфигурация).

Пример конфигурации gateway

Тут основные моменты такие:

  • не ставить галочку “Основной шлюз”, так как у нас будет группы шлюзов;
  • не ставить галочку “Отключите Мониторинг шлюзов”, иначе будет не понятно когда шлюз “упал”;
  • указать ip для мониторинга из интернета, по умолчанию для мониторинга будет использован адрес из DHCP, и то что он доступен не всегда означает, что доступен интернет;

В расширенном режиме можно “тонко” настроить параметры сигнализации падения шлюза:

Дополнительные настройки для gateway

Из двух (а может быть и более) gateway-ев собираем группу (Система -> Шлюзы -> Группы):

Gateway группа

Тут нужно выставить правильные тиры для подключений. Чем первее тир, тем приоритетнее использование gateway. У меня на скриншоте сначала используется WAN_DHCP (дом.ру), потом YOTA_DHCP (Yota). Остальные gateway-и не используются. Так же стоит обратить внимание на параметр “Уровень срабатывания”. Настройки задержек и потерь пакетов устанавливаются для каждого gateway отдельно (в блоке дополнительные настройки).

Теперь нужно поправить конфиг для доступа в интернет из lan (и остальные правила фаервола). Если в правилах не настроен какой-то конкретный gateway, то будет использоваться по умолчанию. Значит настраивать отдельно ничего не нужно. Так же стоит проверить все правила, которые полагаются на интерфейс, ведь при переключении gateway сменится интерфейс. У меня это правило, которое не позволяет трафику для VPN выходить в интерфейс wan, пришлось добавить в правило интерфейс yota.

Sticky Connections

Это может быть важным, так как часть сайтов “не любят”, когда у пользователя скачет ip адрес. Поэтому в настройках системы (Межсетевой экран -> Настройки -> Дополнительно) стоит включить Фиксированные соединения. Так при пограничном случае, когда gateway-и первого тира то и дело уходят в офлайн (отключаются, теряют пакеты или прыгает пинг, в зависимости от настроек переключения) соединения будут “прилипать” ко второму тиру. Если в какой-то системе использует отслеживание ip адреса для пользователей, то не придется при каждом переключении заново логиниться.