Шлюз на два провайдера: автоматизация применения настроек

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Шлюз на два провайдера: автоматизация применения настроек

Сообщение yamah »

В общем, есть машина с RELS-ом (Rosa Enterprise Linux server) (но проблема дистронезависимая), есть настроенные интерфейсы, есть настроенная в ручную (с консоли) маршрутизация, есть настроенный файервол. Все работает пока не произойдет переподнятие сетевых интерфейсов - маршрутизация слетает на дефалтовую. И система вместо того, что бы самой быть пограничным узлом пересылает все на другой шлюз.

Измененные мной файлы:

Код: Выделить всё

cat -n /etc/rc.d/init.d/network
     1  #! /bin/bash
     2  #
     3  # network       Bring up/down networking
     4  #
     5  # chkconfig: 2345 10 90
     6  # description: Activates/Deactivates all network interfaces configured to \
     7  #              start at boot time.
     8  #
     9  ### BEGIN INIT INFO
    10  # Provides: $network
    11  # Should-Start: iptables ip6tables
    12  # Short-Description: Bring up/down networking
    13  # Description: Bring up/down networking
    14  ### END INIT INFO
    15
    16  # Source function library.
    17  . /etc/init.d/functions
    18
    19  if [ ! -f /etc/sysconfig/network ]; then
    20      exit 6
    21  fi
    22
    23  . /etc/sysconfig/network
    24
    25  if [ -f /etc/sysconfig/pcmcia ]; then
    26          . /etc/sysconfig/pcmcia
    27  fi
    28
    29  if [ -f /etc/sysconfig/static-rules ];then
    30          sh /etc/sysconfig/static-rules
    31  fi
    32
    33  # Check that networking is up.
    34  [ "${NETWORKING}" = "no" ] && exit 6
    35
    36  # if the ip configuration utility isn't around we can't function.
    37  [ -x /sbin/ip ] || exit 1
    38
    39  CWD=$(pwd)
    40  cd /etc/sysconfig/network-scripts
    41
    42  . ./network-functions
    43
    44  # find all the interfaces besides loopback.
    45  # ignore aliases, alternative configurations, and editor backup files
    46  interfaces=$(ls ifcfg* | \
    47              LANG=C sed -e "$__sed_discard_ignored_files" \
    48                         -e '/\(ifcfg-lo$\|:\|ifcfg-.*-range\)/d' \
    49                         -e '/ifcfg-[A-Za-z0-9#\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \
    50              LANG=C sort -k 1,1 -k 2n | \
    51              LANG=C sed 's/ //')
    52  rc=0
    53
    54  # See how we were called.
    55  case "$1" in
    56    start)
    ...

28-32 Добавленные мной строки

Код: Выделить всё

cat /etc/sysconfig/static-rules
#!/bin/bash

INET_IP1=$(ifconfig | grep -A 2 eth1 | grep "inet addr" | awk -F':' '{print $2}' | awk -F' ' '{print $1}')
INET_IP2=$(ifconfig | grep -A 2 eth2 | grep "inet addr" | awk -F':' '{print $2}' | awk -F' ' '{print $1}')
GW1=$(cat /etc/sysconfig/network-scripts/ifcfg-Auto_eth1 | grep GATEWAY | awk -F'=' '{print $2}')
GW2=$(cat /etc/sysconfig/network-scripts/ifcfg-Auto_eth2 | grep GATEWAY | awk -F'=' '{print $2}')

ip rule add from $INET_IP1 lookup 1
ip rule add from $INET_IP2 lookup 2

ip route del default
ip route add default equalize nexthop via $GW1 dev eth1 nexthop via $GW2 dev eth2


В конец файла /etc/sysconfig/network-scripts/ifup-routes добавлены строки:

Код: Выделить всё

cat -n /etc/sysconfig/network-scripts/ifup-routes
    76
    77  grep "^advanced " /etc/sysconfig/static-routes | while read ignore dev args;do
    78          if [ "$dev"="$1" ];then
    79              /sbin/ip route add $args
    80          fi
    81      done

Код: Выделить всё

cat /etc/sysconfig/static-routes
advanced eth0 <$NET_NET> via <$IP_NET> table 1
advanced eth0 <$NET_NET> via <$IP_NET> table 2
advanced eth1 0/0 via <$IP_INET1> table 1
advanced eth2 0/0 via  <$IP_INET2> table 2

Где:
<$NET_NET> - локальная сеть,
<$IP_NET> - IP этого ПК в локальной сети
<$IP_INET1> - IP в сети первого провайдера
<$IP_INET2> - IP в сети второго провайдера

Если все эти действия в скриптах выполнять в ручном режиме, то все работает. А при переподнятии интерфейсов нет. :(

Возможно, что у меня слишком старый мануал был... :(

Как заставить применяться правила маршрутизации автоматически?
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21498
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Шлюз на два провайдера: автоматизация применения настроек

Сообщение Bizdelnick »

Зачем наизобретали велосипедов? Маршруты прописываются в /etc/sysconfig/network-scripts/route-eth*. Больше ничего трогать не надо.
Документация.

yamah писал(а):
05.09.2013 19:53
проблема дистронезависимая

Очень даже зависимая.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Re: Шлюз на два провайдера: автоматизация применения настроек

Сообщение yamah »

Bizdelnick, спасибо.

Осталось найти место, где нужно прописать две команды

Код: Выделить всё

ip route del default
ip route add default equalize nexthop via $GW1 dev eth1 nexthop via $GW2 dev eth2

чтобы примитивная балансировка нагрузки была. А то после запуска static-rules где-то сбрасывается.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21498
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Шлюз на два провайдера: автоматизация применения настроек

Сообщение Bizdelnick »

Хм, с такой задачей не сталкивался... Первое, что приходит в голову - шлюз по умолчанию может сбрасываться, если он прописан в /etc/sysconfig/network.
Вообще можно прописать команды в ifup-post, но не уверен, что это самое правильное решение.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
BAF
Сообщения: 225
Статус: Я это я, какой есть такой есть.
ОС: Ubuntu

Re: Шлюз на два провайдера: автоматизация применения настроек

Сообщение BAF »

Я считаю, что если после переподнятия слетает маршрутизация, то значит она не там прописана.
Поправите меня, если я не прав, буду тока рад.
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Re: Шлюз на два провайдера: автоматизация применения настроек

Сообщение yamah »

Bizdelnick писал(а):
06.09.2013 11:14
Хм, с такой задачей не сталкивался... Первое, что приходит в голову - шлюз по умолчанию может сбрасываться, если он прописан в /etc/sysconfig/network.

Код: Выделить всё

cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=admin-test
NTPSERVERARGS=iburst


Bizdelnick писал(а):
06.09.2013 11:14
Вообще можно прописать команды в ifup-post, но не уверен, что это самое правильное решение.

Не проканало!

BAF писал(а):
06.09.2013 11:40
Я считаю, что если после переподнятия слетает маршрутизация, то значит она не там прописана.

Капитан Очевидность? :)
Прикол в том, что последние две команды для "полного зашибись" в решении данной задачи совсем нигде не прописанны. И я не знаю куда их впихнуть.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
BAF
Сообщения: 225
Статус: Я это я, какой есть такой есть.
ОС: Ubuntu

Re: Шлюз на два провайдера: автоматизация применения настроек

Сообщение BAF »

Я не первый год занимаюсь линуксом(в основном дебиан, немного соляра10), но да же для меня не понятно зачем так усложнять всякими переменными, скриптами и хитрыми конвеерами. Попробуйте избавиться от всего этого. И я так и не понял, что за последнии 2 команды. Это про марщрут по умолчанию что ли? А зачем вам его удалять. Что получается: Сначала вы его прописываете(не нужный), потом ненужный удаляете и прописываете новый нужный. Как-то масло маслинное? ;)
Поправите меня, если я не прав, буду тока рад.
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Re: Шлюз на два провайдера: автоматизация применения настроек

Сообщение yamah »

BAF писал(а):
09.09.2013 20:17
Я не первый год занимаюсь линуксом(в основном дебиан, немного соляра10), но да же для меня не понятно зачем так усложнять всякими переменными, скриптами и хитрыми конвеерами. Попробуйте избавиться от всего этого. И я так и не понял, что за последнии 2 команды. Это про марщрут по умолчанию что ли? А зачем вам его удалять. Что получается: Сначала вы его прописываете(не нужный), потом ненужный удаляете и прописываете новый нужный. Как-то масло маслинное? ;)

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

Код: Выделить всё

ip route add default equalize nexthop via $GW1 dev eth1 nexthop via $GW2 dev eth2

заставляет систему устанавливать соединения с удаленными серверами по очереди через два внешних соединения. Примитивная балансировка трафика завязана на ней.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Re: Шлюз на два провайдера: автоматизация применения настроек

Сообщение yamah »

Bizdelnick писал(а):
06.09.2013 11:14
Вообще можно прописать команды в ifup-post, но не уверен, что это самое правильное решение.

При загрузке системы проканало. :)
Но после ручного переподнятия интерфейсов или передергивание сетевого кабеля вся система слетает и все настройки идут лесом. :(
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
BAF
Сообщения: 225
Статус: Я это я, какой есть такой есть.
ОС: Ubuntu

Re: Шлюз на два провайдера: автоматизация применения настроек

Сообщение BAF »

yamah писал(а):
12.09.2013 07:58
Bizdelnick писал(а):
06.09.2013 11:14
Вообще можно прописать команды в ifup-post, но не уверен, что это самое правильное решение.

При загрузке системы проканало. :)
Но после ручного переподнятия интерфейсов или передергивание сетевого кабеля вся система слетает и все настройки идут лесом. :(

Интерфейсы при старте получают адреса по dhcp или статично прописывается? Если по dhcp то я бы рекомендовал прописать статично, тогда хоть в апе хоть в дауне интерфейс все равно адреса и маршрутизация слетать не должна, конечно при условии что я не ошибаюсь.
Поправите меня, если я не прав, буду тока рад.
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Re: Шлюз на два провайдера: автоматизация применения настроек

Сообщение yamah »

BAF писал(а):
12.09.2013 20:11
Интерфейсы при старте получают адреса по dhcp или статично прописывается?

И внутренний и тем более внешние (как корпоративные клиенты) адреса только статические.

BAF писал(а):
12.09.2013 20:11
Если по dhcp то я бы рекомендовал прописать статично, тогда хоть в апе хоть в дауне интерфейс все равно адреса и маршрутизация слетать не должна, конечно при условии что я не ошибаюсь.

Хм. Во, блин! У меня скрипты выдергивают IP динамически непосредственно из сетевых интерефейсов.
Завтра заставлю их брать непосредственно из конфигов.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали: