nixp.ru v3.0

22 января 2017,
воскресенье,
06:39:51 MSK

DevOps с компанией «Флант»
neogeisha написала 2 августа 2007 года в 11:02 (293 просмотра) Ведет себя как женщина; открыла 53 темы в форуме, оставила 266 комментариев на сайте.

есть компик, на нем 3 интерфеса

eth0 — первый провайдер 87.191.4.6

eth1 — резервный провайдер 79.58.56.7

eth2 — смотрит в локалку

как сделать следущее:

проверить есть ли итернет у первого провайдера, если есть то default gw eth0,

если нету то default gw eth1

Dr. Evil
neogeisha
есть компик, на нем 3 интерфеса

eth0 — первый провайдер 87.191.4.6

eth1 — резервный провайдер 79.58.56.7

eth2 — смотрит в локалку

как сделать следущее:

проверить есть ли итернет у первого провайдера, если есть то default gw eth0,

если нету то default gw eth1

Если fly4life написал свой скрипт для переключения каналов, следуя лицензии GPL, то его можно тебе дать. :)

Подождем его ответа. :)

fly4life
Dr. Evil
Если fly4life написал свой скрипт для переключения каналов, следуя лицензии GPL, то его можно тебе дать. :)

Подождем его ответа. :)

Да валяйте =).

Dr. Evil

Так почему сразу не вставил скрипт? :)

fly4life
Dr. Evil
Так почему сразу не вставил скрипт? :)

Ой =).

#!/bin/bash
#
# Скрипт для проверки состояния текущего интернет-канала и
# переключения на альтернативный в случае его неработоспособности.
# Команда ip
IP_BIN=/bin/ip
# шлюзы у разных провайдеров
GW1=192.168.201.69
GW2=192.168.201.1
# default gateway текущего (активного) канала
CURR=`ip route | grep default | awk '{print $3}'`
# TESTIP - IP адреса (имена хостов) для проверки канала, "тестовые адреса"
# здесь оба инетовские вдреса, но вообще выбираются исходя из предпочтений
# и собственных критериев проверки живости канала (например,
# шлюзы провайдера).
TESTIP1=ya.ru
TESTIP2=nixp.ru
# IP адрес mail.ru. Для проверки, поднялся ли активный канал.
# В таблицу маршрутизации надо не забыть добавить статический маршрут:
# ip route add 194.67.57.26 via $GW1
TESTMAIN=194.67.57.26
. /etc/rc.status
rc_reset
# Находясь на резервном канале, проверяем, поднялся ли основной,
# и, если поднялся, то переключаемся на него
if [ "$CURR" == "$GW2" ]
then
      if ping -c 1 $TESTMAIN > /dev/null 2>&1
      then
            echo -n " Switching to Main channel"
            $IP_BIN route replace default via $GW1
            rc_status -v
            rc_exit
      fi
fi
if ! ping -c 1 $TESTIP1 > /dev/null 2>&1
# Если первый тестовый IP-адрес не доступен, то проверяется второй
then
      echo  " $TESTIP1 is Unreachable"
      if ! ping -c 1 $TESTIP2 > /dev/null 2>&1
      # Если и второй тестовый IP не доступен, то переключаем канал
      then
            echo " $TESTIP2 is Unreachable"
            case $CURR in
                  $GW1)
                        echo -n " Switching to provider #2"
                        $IP_BIN route replace default via $GW2
                        rc_status -v
                        ;;
                  $GW2)
                        echo -n " Swithing to provider #1"
                        $IP_BIN route replace default via $GW1
                        rc_status -v
                        ;;
      esac
      rc_exit
      else
            echo " Current channel is alive ($TESTIP2)"
      fi
else
      echo " Current channel is alive ($TESTIP1)"
fi
rc_exit

Изначально писался для SuSE, отсюда всякие «rc_status» и «rc_exit». Для иных дистрибутивов «rc_exit» заменяется на «exit» с соответствующим кодом, а все остальные rc* — удаляются.

Для автопилота скрипт добавляется в расписание cron.

neogeisha

спасибо, попробую разобраться

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.