- Linux несколько шлюзов по умолчанию
- Настройка основного и двух резервных операторов на Linux-роутере с NetGWM
- Почему NetGWM?
- Установка из GitHub и репозитория «Флант»
- Настройка
- Журналирование
- Проверено в production
- Заключение
- 2 шлюза по-умолчанию в Linux в одной подсети с разной метрикой на одном интерфейсе. Возможно ли?
Linux несколько шлюзов по умолчанию
auto eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
auto eth2
iface eth2 inet static
address X.X.X.134
netmask 255.255.255.0
gateway X.X.X.1
metric 40
post-up /sbin/ip route add default via X.X.X.1 table dsn
post-up /sbin/ip rule add from X.X.X.134 lookup dsn
auto eth3
iface eth3 inet static
address X.X.X.236
netmask 255.255.255.0
gateway X.X.X.1
metric 20
post-up /sbin/ip route add default via X.X.X.1 table cyber
post-up /sbin/ip rule add from X.X.X.236 lookup cyber
вот у меня статика, и можно сделать так. подсети мне не нужны, нужна доступность хоста по 2м адресам.
для динамических ip скрипт пишется в папку ifup.d
1.17 , kvant ( ?? ), 06:33, 18/01/2010 [ответить] [﹢﹢﹢] [ · · · ] | + / – |
1.18 , Feonik ( ok ), 12:57, 04/02/2010 [ответить] [﹢﹢﹢] [ · · · ] | + / – |
ip rule add lookup table localnets pref 1000 ip rule add lookup localnets pref 1000 Иначе команда вообще не работает. |
1.19, hzone ( ok ), 16:00, 11/10/2010 [ответить] [﹢﹢﹢] [ · · · ] | + / – |
видать я запутался 🙂 где-то! |
1.20, Vladsky ( ok ), 11:13, 05/11/2011 [ответить] [﹢﹢﹢] [ · · · ] | + / – |
1.21, ufos ( ? ), 02:00, 19/04/2012 [ответить] [﹢﹢﹢] [ · · · ] | + / – |
ip rule add lookup table localnets pref 1000 нужно смотреть как ip rule add from all lookup localnets pref 1000 Источник Настройка основного и двух резервных операторов на Linux-роутере с NetGWMЗадача резервирования основного шлюза — одна из самых популярных в сетевом администрировании. У нее есть целый ряд решений, которые реализуют механизмы приоритезации или балансировки исходящих каналов для абсолютного большинства современных маршрутизаторов, в том числе и маршрутизаторов на базе Linux. В статье об отказоустойчивом роутере мы вскользь упоминали свой корпоративный стандарт для решения этой задачи — Open Source-продукт NetGWM — и обещали рассказать об этой утилите подробнее. Из этой статьи вы узнаете, как устроена утилита, какие «фишки» можно использовать в работе с ней и почему мы решили отказаться от использования альтернативных решений. Почему NetGWM?Классическая схема резервирования основного шлюза в Linux, реализуемая средствами iproute2, выглядит практически во всех источниках примерно одинаково:
Подробности этой схемы легко гуглятся по запросу «linux policy routing». На наш взгляд, схема имеет ряд очевидных недостатков, которые и стали основным мотиватором создания утилиты NetGWM:
Мы посмотрели, что поможет нам решить все 4 проблемы: простое и управляемое средство с поддержкой 2 и более шлюзов по умолчанию, умеющее диагностировать доступность канала и тестировать его на стабильность. И не нашли такого варианта. Именно так и появился NetGWM. Установка из GitHub и репозитория «Флант»NetGWM (Network GateWay Manager) — это небольшая утилита приоритезации основного шлюза, написанная на Python и распространяемая под свободной лицензией GNU GPL v3. Автор первоначальной версии — driusha (Андрей Половов). Исходный код и документация на английском языке доступны на GitHub, а краткая документация и описание на русском языке — здесь. Установка из GitHub: Кроме того, готовый DEB-пакет с NetGWM можно установить из репозитория для Ubuntu компании «Флант». Установка для Ubuntu 14.04 LTS выглядит так: Добавлять служебную таблицу маршрутизации и настраивать cron в Ubuntu не потребуется. Таблица автоматически добавится при установке пакета. Кроме того, при установке будет зарегистрирована служба netgwm , init-скрипт которой стартует в качестве демона небольшой shell-скрипт /usr/bin/netgwm , который, в свою очередь, читает из файла /etc/default/netgwm значение параметра INTERVAL (в секундах) и с указанной периодичностью сам вызывает netgwm.py . НастройкаВ основе работы NetGWM также лежит policy-роутинг, и нам придется предварительно настроить таблицы маршрутизации для каждого оператора. Допустим, есть 3 оператора, и необходимо сделать так, чтобы основным оператором был оператор 1, в случае отказа — использовался оператор 2, а в случае отказа из обоих — оператор 3. Пусть первый оператор у нас подключен к интерфейсу eth1, второй — к eth2, третий — к eth3. Первый оператор имеет шлюз 88.88.88.88, второй оператор — шлюз 99.99.99.99, третий — 100.100.100.100. Мы почти всегда при настройке сети с несколькими основными шлюзами используем маркировку пакетов и модуль conntrack из NetFilter. Это хорошая практика, помогающая распределять пакеты по таблицам маршрутизации с учетом состояния, но не являющаяся обязательной. Настроим маркинг пакетов и conntrack: 2. Добавим правила маршрутизации для промаркированных пакетов. Мы это делаем с помощью скрипта, который вызывается из /etc/network/interfaces при событии post-up на интерфейсе lo: 3. Объявим таблицы маршрутизации в /etc/iproute2/rt_tables : 4. Настроим NetGWM. По умолчанию, netgwm.py будет искать конфигурационный файл по адресу /etc/netgwm/netgwm.yml , однако вы можете переопределить это с помощью ключа -c . Настроим работу утилиты: 5. Настроим действия при переключении Если произойдет переключение, то после смены основного шлюза будут выполнены все исполняемые файлы из каталога /etc/netgwm/post-replace.d/* . При этом каждому файлу будут переданы 6 параметров командной строки:
В скрипте можно на основании этих переменных описать логику действий в зависимости от подключаемого оператора (добавить или удалить маршруты, отправить уведомления, настроить шейпинг и т.п.). Для примера приведу скрипт на shell, отправляющий уведомления: 6. Стартуем сервис netgwm в Ubuntu, если вы установили DEB-пакет: Если вы получили NetGWM из GitHub, то установленное ранее задание в cron уже и так проверяет доступность вашего основного шлюза, дополнительных действий не требуется. ЖурналированиеСобытия по переключению NetGWM регистрирует в журнале /var/log/netgwm : Сохраненная история переключений помогает произвести анализ инцидента и определить причины перерыва в связи. Проверено в productionУже около 4 лет NetGWM используется в нашей компании на 30+ маршрутизаторах Linux разных масштабов. Надежность утилиты многократно проверена в работе. Для примера, на одной из инсталляций, с мая 2014 года NetGWM обработал 137 переключений операторов без каких-либо проблем. Стабильность, покрытие всех наших потребностей и отсутствие проблем в эксплуатации в течение длительного времени привели к тому, что мы практически не занимаемся развитием проекта. Код NetGWM написан на Python, поэтому отсутствует и необходимость в адаптации утилиты к новым версиям операционных систем. Тем не менее, мы будем очень рады, если вы решите принять участие в развитии NetGWM, отправив свои патчи в GitHub или просто написав feature request в комментариях. ЗаключениеС NetGWM мы имеем стабильную, гибкую и расширяемую (с помощью скриптов) утилиту, которая полностью закрывает наши потребности в управлении приоритетом основного шлюза. Любые вопросы по использованию NetGWM также приветствуются — можно прямо здесь в комментариях. Источник 2 шлюза по-умолчанию в Linux в одной подсети с разной метрикой на одном интерфейсе. Возможно ли?Есть одна довольно чудная машинка с одним адресом в LAN на которую заNATчены 2 WAN адреса с двух разных роутеров от двух разных провайдеров. Из интернета сия жуть доступна по обоим адресам и прекрасно работает. Выглядит это примерно так: Проблема ожидаемо возникает с исходящим трафиком, когда пропадает ISP 1 (default gw). Ситуация осложняется тем, что аварии ISP не приводят к недоступности самих шлюзов .1 и(или) .254. Будет ли работать сеть, если указать 2 шлюза с разной метрикой одному сетевому интерфейсу? Пойдет ли трафик во второй шлюз? Понятное дело, что можно руками переключить gw на .254 и все заработает. Но можно ли это автоматизировать?
Можно указать два дефолтныйх маршрута с разной метрикой: Переключение автоматом можно организовать каким либо скриптом меняющим метрику у шлюзов в зависимости от, например, пинга до 8.8.8.8, т.е. делаем маршрут до 8.8.8.8 строго через первого провайдера, делаем скрипт проверки пинга и если его нет — меняем метрики у деф маршрутов. В деталях реализации скрипта под никсы не подскажу. Источник |