Переключение между каналами (FreeBSD)

bash, perl, python и прочие интерпретируемые скрипты

Модератор: Gen1us2k

Ответить
Аватара пользователя
Raven
Бородатый сис
Бородатый сис
Сообщения: 2800
Зарегистрирован: 03 мар 2010, 15:12
ОС: RHEL 8
Откуда: Из серверной

Переключение между каналами (FreeBSD)

Сообщение Raven » 31 мар 2010, 11:15

Скрипт для шлюзов с двумя внешними каналами (FreeBSD), проверяющий и переключающий их в случае отсутствия интернета. на основном канале.

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

#! /bin/sh

route="/sbin/route"
ping="/sbin/ping"
natd="/sbin/natd"
sleep="/bin/sleep"
killall="/usr/bin/killall"
touch="/usr/bin/touch"

# внешние сетевые карты
lan_isp1="rl0"
lan_isp2="rl1"

GW1=194.242.118.61
GW2=83.218.237.45

$ping -q -c 2 $GW1 > /dev/null 2>&1

# Если код завершения пинга 1 = error
if [ $? !=0 ]; then
        # пингуем второй канал
        $ping -q -c 2 $GW2 > /dev/null 2>&1
        # если код завершение true =0
        if [ $? =0 ]; then
                # Если файла gw2.changed нет, создаем его.
                # Он определяет переход на основной канал,
                # даже если есть и резервный
                # GW2 будет маршрутом по умолчанию
                if [ ! -f /tmp/gw2.changed ]; then
                $route delete default
                $killall natd
                $route add default $GW2
                $touch /tmp/gw2.changed
                $sleep 15
                $natd -n ${lan_isp2}
                . /etc/fwrules2.sh
                exit 0;
                fi
        else
                echo "Оба канала не доступны";
                exit 1;
        fi
else
        # Если пинганулся первый шлюз
        # Если файл gw2.changed найден, удаляем его
        # GW1 будет маршрутом по умолчанию
        if [ -f /tmp/gw2.changed ]; then
                $route delete default
                $killall natd
                $route add default $GW1
                $rm /tmp/gw2.changed
                $sleep 15
                $natd -n ${lan_isp1}
                . /etc/fwrules1.sh
                exit 0;
        fi
        echo "Основной канал работает и установлен по умолчанию";
        exit 0;
fi
Я не злопамятный, я просто часто ковыряю логи
xvz
Юзер
Юзер
Сообщения: 2
Зарегистрирован: 27 мар 2013, 20:54
ОС: SUSE 11 SP2

Re: Переключение между каналами (FreeBSD)

Сообщение xvz » 02 апр 2013, 12:52

Raven
как будет если обе PPPoE подключение?
Аватара пользователя
Raven
Бородатый сис
Бородатый сис
Сообщения: 2800
Зарегистрирован: 03 мар 2010, 15:12
ОС: RHEL 8
Откуда: Из серверной

Re: Переключение между каналами (FreeBSD)

Сообщение Raven » 02 апр 2013, 21:14

В принципе так же, за исключением нескольких нюансов.
Я не злопамятный, я просто часто ковыряю логи
xvz
Юзер
Юзер
Сообщения: 2
Зарегистрирован: 27 мар 2013, 20:54
ОС: SUSE 11 SP2

Re: Переключение между каналами (FreeBSD)

Сообщение xvz » 06 апр 2013, 21:03

Raven
можете поподробнее
# внешние сетевые карты
lan_isp1="rl0"
lan_isp2="rl1"

GW1=194.242.118.61
GW2=83.218.237.45
здесь что изменится если ip динамический?
Аватара пользователя
Infernal Flame
Злой Модер
Сообщения: 1796
Зарегистрирован: 03 мар 2010, 11:25
ОС: Centos 7
Контактная информация:

Re: Переключение между каналами (FreeBSD)

Сообщение Infernal Flame » 07 апр 2013, 19:43

xvz
даже при динамическом ИПе у провайдера шлюз не меняется. Т.е. его можно оставить статично в скрипте... Ну или уж на самый крайний случай получать grep'ом из выхлопа ifconfig (или как он там во фряхе зовется?)
Изображение
Изображение
Work: Centos 7 х 'all Servers'
Аватара пользователя
Raven
Бородатый сис
Бородатый сис
Сообщения: 2800
Зарегистрирован: 03 мар 2010, 15:12
ОС: RHEL 8
Откуда: Из серверной

Re: Переключение между каналами (FreeBSD)

Сообщение Raven » 07 апр 2013, 22:43

Infernal Flame
Да, а имена интерфейсов будут соответственно pppХ
Я не злопамятный, я просто часто ковыряю логи
Ответить

Вернуться в «Скрипты»