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

ROSA Enterprise Linux Server -- вопросы и проблемы
Правила форума
Уважаемые пользователи! Поддержка, ответы на вопросы и проблемы по серверу принимаются:
1) на багзилле http://bugs.rosalinux.ru/enter_bug.cgi? ... A%20Server
2) или после заполнения формы на http://www.rosalab.ru/products/server/download вы получаете 30 дней БЕСПЛАТНОЙ техподдержки по серверу.
Ответы на ваши вопросы на форуме НЕ ГАРАНТИРУЮТСЯ. Спасибо за понимание!
Ответить
Аватара пользователя
Yamah
Сообщения: 1387
Зарегистрирован: 04 май 2012, 06:30
Operating system: Десктоп (дом): Rosa Fresh R8.1, Rosa Fresh R10
Десктоп (работа): Rosa Fresh R8.1/Rosa Fresh R10
Сервер (работа): Rosa Enterprise Linux Sercver 6.7
Нетбук: Rosa Fresh R10
Контактная информация:

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

Сообщение Yamah » 05 сен 2013, 13:56

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

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

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

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 в сети второго провайдера

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

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

Как заставить применяться правила маршрутизации автоматически?

Аватара пользователя
Yamah
Сообщения: 1387
Зарегистрирован: 04 май 2012, 06:30
Operating system: Десктоп (дом): Rosa Fresh R8.1, Rosa Fresh R10
Десктоп (работа): Rosa Fresh R8.1/Rosa Fresh R10
Сервер (работа): Rosa Enterprise Linux Sercver 6.7
Нетбук: Rosa Fresh R10
Контактная информация:

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

Сообщение Yamah » 06 сен 2013, 13:22

Спасибо Bizdelnick с UFO-шки за частичное решение проблемы

Ну в общем так.
Файл /etc/sysconfig/static-rules так и остается
А информация о статических маршрутов прописывается в файлы с именем ввиде /etc/sysconfig/network-scripts/route-eth*, где * - номер интерфейса во внешнюю сеть.

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

<$NET_NET> via <$IP_NET> table №
0/0 via <$IP_INET№> table №
Где № - порядковый номер таблицы для данного провайдера.

Осталось малость - узнать где прописать следующие команды

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

ip route del default
ip route add default equalize nexthop via <$IP_INET1> dev eth1 nexthop via <$IP_INET2> dev eth2 

Ответить

Вернуться в «Сервер»