Дано.
Ротуер подключён кабелем к интернет-провайдеру. У провайдера иногда случаются какие-то проблемы, и связь пропадает. Уйти к другому провайдеру не получается, т.к. в нашей деревне он единственный.
Требуется обеспечить бесперебойную связь с интернетом.
Для решения задачи использован LTE-модем и сим-карта с дешевым тарифом.
На роутере я настроил mwan3 таким образом, чтобы при обрыве связи у провайдера он включал модем и переводил трафик на него. При восстановлении связи у провайдера mwan3 выключает модем, и мобильные данные более не расходуются.
Инструкция по настройке mwan3
1. Ставим пакеты mwan и luci-app-mwan3
Можно поставить также пакет с переводом на русский язык, но я не очень люблю русские переводы из-за их обычной корявости, поэтому ставить его не буду. В дальнейшем вся терминология будет на английском.
2. Задаём метрики интерфейсам.
mwan3 требует, чтобы у сетевых интерфейсов были заданы метрики, поэтому идём в Network → Interfaces и вписываем метрики для интерфейсов wan и lte.
Метрика - это “стоимость” маршрута, проходящего через соответствующий интерфейс. Чем она меньше, тем больше этот интерфейс будет использоваться.
Ссылки по теме
Linux Routing Fundamentals – SDN Clinic
Linux Networking: A Simplified Guide to IP Addresses and Routing | Linux Journal
networking - Interpreting the 'metric' column in routing table - Super User
Абсолютные значения не важны, главное, чтобы они все были разными, и основной интерфейс (wan) имел наименьшую метрику.
Метрики прописываются в разделе Advanced. Для wan вписываем 10, для lte - 20.
Можно задать 1 и 2 (в комментариях ниже указано, что 10 и 20 могут ломать работу установленных пакетов, которые тоже используют маршрутные таблицы ядра)
Также для интерфейса lte следует убрать галку “Bring up on boot”, чтобы при перезагрузке роутер не включал модем и не тратил трафик.
После этого идем настраивать собственно mwan3 в Network → MutliWAN Manager
3. Добавление интерфейсов в mwan3
Перво-наперво нужно указать mwan3, с какими интерфейсами он будет работать.
Во вкладке Interface добавляем интерфейсы wan и lte.
Для каждого из интерфейсов следует указать протокол (IPv4 или IPv6) и то, каким образом mwan3 будет проверять его доступность.
Для каждой пары интерфейс - протокол надо завести отдельную запись.
Если у вас используются и IPv6, и IPv4, у вас будет 4 записи. У меня их всего две, т.к. IPv6 провайдер не выдаёт.
Доступность интерфейса mwan3 проверяет попыткой соединиться через него с какими-то хостами в интернет.
Адреса этих хостов вводятся в окно “Tracking hostname or IP address”. Метод соединения - ping (есть и другие, в зависимости от установленных пакетов).
В окне “Tracking reliability” указывается минимальное количество откликнувшихся хостов, которое нужно, чтобы считать интерфейс доступным.
Ниже в настройках указывается сколько раз и с каким интервалом пинговать хосты.
Для wan я указал IP адрес провайдера и два хоста из CloudFlare (1.1.1.1 и 1.0.0.1).
Tracking reliability = 1, т.е. если хоть один отозвался на пинг, считаем, что связь есть.
4. Профили сетевых интерфейсов
После добавления интерфейсов надо прописать для каждого интерфейса профиль, т.е. указать, насколько интенсивно mwan3 будет его использовать.
Переходим во вкладку Member и добавляем сюда все заведенные интерфейсы. Обратите внимание, что имена здесь не должны совпадать с именами интерфейсов (об этом сказано в верхней части страницы).
Для каждого интерфейса создаем по профилю. В профиле указываем метрику и вес.
Спойлер
Метрика здесь это не то же самое, что метрика из п.2.
Метрику из п.2 ядро операционной системы использует непосредственно, когда решает, что делать с очередным IP-пакетом, проводя его по основной таблице маршрутов.
Здешние метрики используются mwan3-ом для настройки собственных таблиц маршрутизации в ядре.
Интерфейс с наименьшей метрикой будет использоваться первым.
Если у интерфейсов метрики одинаковые, они будут использоваться одновременно для балансировки нагрузки. В этом случае интерфейс с бОльшим весом примет на себя бОльшую часть трафика.
Задаем профили: у wan метрика 1, вес 3, у lte метрика 2, вес 2.
5. Создание политики
Политика это набор из одного или нескольких профилей интерфейсов.
Трафик по ним будет распределяться в соответствии с метриками и весами, заданными в п. 4. Если в политике единственный профиль, будет использоваться только соответствующий интерфейс.
В данном случае нам нужна одна политика, которая будет переключать трафик из wan в lte и обратно.
Переходим на вкладку Policy, создаем политику с именем wan_to_lte и добавляем туда два наших интерфейса.
Поле Last resort показывает, что делать в случае, если оба интерфейса окажутся недоступными. Ставим туда “Unreachable (reject)”.
Автоматическое выключение модема при наличии связи в wan будет добавлено дальше.
6. Правила (вкладка Rule)
Правила определяют, какую политику использовать в зависимости от протокола, адресов источника-приемника, портов и т.п.
Если какая-то политика не упоминается ни в одном правиле, она не будет работать.
Я задал одно правило, которое применяет политику wan_to_lte ко всему трафику IPv4.
7. Выключение модема при наличии связи по кабелю
Во вкладке Notify можно вписать пользовательский скрипт, который будет выполняться каждый раз, как mwan3 обнаруживает появление или пропадание связи на каком-то из интерфейсов. Этот скрипт сохраняется в файле /etc/mwan3.user и автоматически попадает в бекап.
Как я понимаю, первоначально создатели предполагали, что отсюда будут отправляться сообщения на почту.
Однако, можно сделать и больше, например, включить или выключить интерфейс.
Во время выполнения скрипту доступны три переменных окружения: ACTION, INTERFACE и DEVICE (см. комментарий в самом скрипте).
Нам достаточно ACTION и INTERFACE.
Если интерфейс wan отключился, скрипт должен включить интерфейс lte командой ifup, а если включился - наоборот, выключить его командой ifdown:
#!/bin/sh
if [ "${ACTION}" = "disconnected" ] && [ "${INTERFACE}" = "wan" ] ; then
ifup lte
fi
if [ "${ACTION}" = "connected" ] && [ "${INTERFACE}" = "wan" ] ; then
ifdown lte
fi
if [ "${ACTION}" = "ifup" ] && [ "${INTERFACE}" = "wan" ] ; then
ifdown lte
fi
Всё, теперь можно открыть страницу Status → MultiWAN Manager → Overview, экспериментировать, вынимая и вставляя в роутер кабель от провайдера, и наблюдать за изменением состояния интерфейсов.
Для регулировки скорости реакции на отключение связи надо вернуться в раздел Interface и подстроить параметры пингов.
8. Примечания
Если вместо failover вы хотите load balancing, это настраивается довольно просто: уберите выключение модема, пропишите одинаковые метрики интерфесам wan и lte и исправьте их веса.
Важная деталь про балансировку нагрузки
В документации сказано, что балансировка в mwan3 работает по IP-адресам.
Т.е. она может увеличить скорость скачивания для случая, когда качается несколько файлов из разных мест. Если Вы качаете один файл, то он будет выкачиваться через один интерфейс, а не через оба.
Policy Based Routing настраивается тоже здесь. Нужно добавить соответствующий интерфейс, политику и правила.
Источники
Спойлер
Для получения дешевого тарифа можно купить симку SberMobile и платить за интернет бонусами “Спасибо”. На самом дешёвом тарифе у меня в месяц за 10Гб трафика выходит 2 рубля деньгами и 198 бонусами.
Если кто-то решит последовать примеру, напишите в личку, я пришлю ссылку, чтобы можно воспользоваться их программой “Приведи друга” и ещё получить скидку :).







