Linux переключение на резервный канал
Обновлено: 04.07.2024
Очень часто в различных организациях возникает необходимость резервирования интернет-канала на случай каких-либо сбоев. Крупные организации могут позволить себе купить блок IP-адресов и AS и затем уже покупая каналы у нескольких интернет-провайдеров настроить BGP.
Для небольших компаний такая схема это непозволительная роскошь и обычно небольшие компании просто покупают интернет-каналы у нескольких провайдеров. И имея на каждом из каналов свои независимые адреса и прочие настройки каким-то образом (временами даже в ручную!) настраивают переключение каналов. Далее будет показан один из возможных способов организации автоматического переключения на резервный канал в случае сбоя основного и возврат обратно после восстановления связи.
Внесём немного ясности:
- Шлюз работает под управлением Debian или Ubuntu Linux;
- Основной интернет-канал на интерфейсе eth0 с адресом 1.1.1.2/24 и шлюзом 1.1.1.1 (у автора этих строк это ADSL от Таттелекома);
- Резервный интернет-канал на интерфейсе ppp999 с адресом 2.2.2.2 (у автора этих строк это DOCSIS от ТВТ)
Для начала уточним (на всякий случай) как именно привязать ppp-соединение к ppp-интерфейсу с конкретным номером. Для этого нужно в соответствующий файле в "/etc/ppp/peers&quto; добавить строку:
Далее добавим ещё один параметр в тот же файл: метку соединения:
Кроме того этот интерфейс не должен при подъёме трогать маршрут по умолчанию. Это достигается примерно вот так:
Это нам пригодиться чуть позже. Сейчас нам нужно описать две дополнительные таблицы роутинга (по одной для каждого провайдера). Для этого в файл "/etc/iproute2/rt_tables" добавим следующие строки:
Теперь нам надо явно указать с какого интерфейса через какую таблицу роутинга искать маршруты. Для этого нужно выполнить вот такие команды (и заодно добавить в "/etc/rc.local" чтобы выполнялись при загрузке):
Разумеется надо чтобы в нужных таблицах были и нужные маршруты (как минимум маршрут по умолчанию). Для резервного канала это достигается созданием скрипта "/etc/ppp/ip-up.d/tbt" примерно такого содержания:
Для eth0 всё ещё проще: открываем файл "/etc/network/interfaces" и приводим конфигурацию eth0 к такому виду:
Теперь нужно перезагрузить сервер и после этого сервер будет по умолчанию идти в интернет через eth0, но при этом снаружи будет доступен по обоим каналам. Теперь создадим скрипт "/usr/local/scripts/check_internet.sh" следующего содержания:
Этот скрипт нужно запускать каждую минуту. Для этого в "/etc/crontab" нужно добавить строку:
Далее ещё нужно включить пересылку пакетов (forwarding) и поднять NAT для локальной сети на обоих интерфейсах. Примеры можно найти например тут и тут.
Читайте также: