Два шлюза по умолчанию linux

Два шлюза по умолчанию linux

Конфигурация:
Сервер PH 8.0, 3 сетевухи: 1 в локалку, две в интернет.
С одним каналом пользователи ходили в инет через маскарадинг (ipchains).
Сейчас задача разруливать пользователей на два канала. Как это сделать, если сервак использует только один шлюз по умолчанию?

eth0: 192.168.1.222, 192.168.1.0/24 — инет1, шлюз 192.168.1.221
eth1: 192.168.0.1, 192.168.0.0/24 — локалка
eth2: 10.0.0.1, 10.0.0.0/24 — инет2, шлюз 10.0.0.2

с одним каналом правила простые:
-A forward -s 192.168.0.x -j MASQ
-A output -d 192.168.0.x -s ! 192.168.0.0/24 -l — это для подсчёта траффика

с двумя каналами логично было бы:
-A forward -i eth0 -s 192.168.0.x -j MASQ
-A forward -i eth2 -s 192.168.0.x -j MASQ
строчка для логов остаётся та же
.
НО
что делать с таблицей роутинга? в ней не шибко разбираюсь, но подозреваю что править надо её.
только не советуйте, пожалуйста, переходить на iptables или что-то менять кардинально! не охота переделывать биллинг.

Рекомендовать в FAQ | Cообщить модератору | Наверх

Оглавление

  • Возможно ли одновременно использовать два шлюза на Линуксе?, ovax, 02:01 , 17-Мрт-04, (1)
  • Возможно ли одновременно использовать два шлюза на Линуксе?, игорь, 08:33 , 17-Мрт-04, (2)
    • Возможно ли одновременно использовать два шлюза на Линуксе?, IVANidze, 09:06 , 17-Мрт-04, (3)
      • Возможно ли одновременно использовать два шлюза на Линуксе?, Xela, 09:59 , 17-Мрт-04, (4)

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

iproute2 тебе поможет.
только вначале реши для себя по какому критерию ты будешь разруливать трафик на два канала.

1. «Возможно ли одновременно использовать два шлюза на Линуксе?»
Сообщение от ovax on 17-Мрт-04, 02:01 (MSK)
Рекомендовать в FAQ | Cообщить модератору | Наверх

2. «Возможно ли одновременно использовать два шлюза на Линуксе?»
Сообщение от игорь on 17-Мрт-04, 08:33 (MSK)

всё напрямую зависит от того зачем тебе нужен второй шлюз.
я например ничего не делаю. указал маршрут (шлюз) по умолчанию через eth0 и всё. на eth1 у меня одна подсеть. eth2 — приватный.
в таблице маршрутизации присутствует маршрут через второй интерфейс и этого хватает. скорей всего у тебя то-же. два шлюза для выхода в одну точку (на mail.ru например) ты вряд-ли стал бы делать.
можно поднять gated для rip или ospf. у меня так было, но потом я gated убрал поскольку и без него работает.
если что-то не понравится можно написать статический маршрут —
routе add . gw . для выхода в некую сеть.
а трафик дальше будешь считать уже как получится.

Рекомендовать в FAQ | Cообщить модератору | Наверх

3. «Возможно ли одновременно использовать два шлюза на Линуксе?»
Сообщение от IVANidze on 17-Мрт-04, 09:06 (MSK)

Видимо не правильно объяснил. Мне не надо, чтобы один пользователь использовал одновременно два канала в инет. Мне нужно разбить пользователей на два канала. Чтоб одни ходили через один, другие — через другой. Кому куда — задаём по списку, с помощью файрвола.
Если это можно сделать в таблице маршрутизации — пожалуйста подробно, дятел я 😉 Одной строчкой для всех, или для каждого пользователя делать запись?

Рекомендовать в FAQ | Cообщить модератору | Наверх

4. «Возможно ли одновременно использовать два шлюза на Линуксе?»
Сообщение от Xela on 17-Мрт-04, 09:59 (MSK)

>Видимо не правильно объяснил. Мне не надо, чтобы один пользователь использовал одновременно
>два канала в инет. Мне нужно разбить пользователей на два канала.
>Чтоб одни ходили через один, другие — через другой. Кому куда
>- задаём по списку, с помощью файрвола.
>Если это можно сделать в таблице маршрутизации — пожалуйста подробно, дятел я
>;) Одной строчкой для всех, или для каждого пользователя делать запись?
>

iptables -t mangel -A PREROUTING -s одна_под_сеть/24 -j ROUTE -gw gw1_ip_add_ress
iptables -t mangel -A PREROUTING -s другая_под_сеть/24 -j ROUTE -gw gw2_ip_add_ress

Источник

Настройка основного и двух резервных операторов на Linux-роутере с NetGWM

Задача резервирования основного шлюза — одна из самых популярных в сетевом администрировании. У нее есть целый ряд решений, которые реализуют механизмы приоритезации или балансировки исходящих каналов для абсолютного большинства современных маршрутизаторов, в том числе и маршрутизаторов на базе Linux.

В статье об отказоустойчивом роутере мы вскользь упоминали свой корпоративный стандарт для решения этой задачи — Open Source-продукт NetGWM — и обещали рассказать об этой утилите подробнее. Из этой статьи вы узнаете, как устроена утилита, какие «фишки» можно использовать в работе с ней и почему мы решили отказаться от использования альтернативных решений.

Почему NetGWM?

Классическая схема резервирования основного шлюза в Linux, реализуемая средствами iproute2, выглядит практически во всех источниках примерно одинаково:

  • Дано: 2 провайдера.
  • Создаем для каждого оператора свою таблицу маршрутизации.
  • Создаем правила ( ip rule ), по которым трафик попадает в ту или иную таблицу маршрутизации (например, по источнику и/или по метке из iptables).
  • Метриками или ifupdown-скриптами определяем приоритет основного шлюза.

Подробности этой схемы легко гуглятся по запросу «linux policy routing». На наш взгляд, схема имеет ряд очевидных недостатков, которые и стали основным мотиватором создания утилиты NetGWM:

  1. Сложность внесения изменений в схему, плохая управляемость.
  2. Если количество шлюзов 3 и более, логика скриптов усложняется, как и реализация выбора шлюза на основе метрик.
  3. Проблема обнаружения пропадания канала. Зачастую, физический линк и даже шлюз оператора могут быть доступны, при этом из-за проблем внутри инфраструктуры оператора или у его вышестоящего поставщика услуг реально сеть оказывается недоступной. Решение этой проблемы требует добавление дополнительной логики в ifupdown-скрипты, а в маршрутизации на основе метрик она нерешаема в принципе.
  4. Проблема «шалтай-болтай». Такая проблема проявляется, если на высокоприоритетном канале наблюдаются кратковременные частые перерывы в связи. При этом шлюз успешно переключается на резервный. Откуда здесь, казалось бы, может взяться проблема? Дело в том, что ряд сервисов, таких как телефония, видеосвязь, VPN-туннели и другие, требуют некоторого таймаута для определения факта обрыва и установления нового сеанса. В зависимости от частоты обрывов это приводит к резкому снижению качества сервиса или его полной недоступности. Решение этой проблемы также требует усложнения логики скриптов и тоже совершенно нерешаема метриками.

Мы посмотрели, что поможет нам решить все 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 параметров командной строки:

  • $1 — наименование нового оператора;
  • $2 — IP вновь установленного шлюзе или NaN, если новый шлюз установить не удалось;
  • $3 — имя устройства нового шлюза или NaN, если шлюз установить не удалось;
  • $4 — наименование старого оператора или NaN, если шлюз устанавливается впервые;
  • $5 — IP старого оператора или NaN, если шлюз устанавливается впервые;
  • $6 — имя устройства старого оператора или NaN, если шлюз устанавливается впервые.

В скрипте можно на основании этих переменных описать логику действий в зависимости от подключаемого оператора (добавить или удалить маршруты, отправить уведомления, настроить шейпинг и т.п.). Для примера приведу скрипт на 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 также приветствуются — можно прямо здесь в комментариях.

Источник

Читайте также:  Openbox linux ��� ���
Оцените статью