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

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

Moderator: Gen1us2k

Post Reply
User avatar
Raven
Бородатый сис
Бородатый сис
Posts: 2791
Joined: 03 Mar 2010, 15:12
ОС: RHEL 8
Location: Из серверной

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

Post by Raven » 31 Mar 2010, 11:15

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

Code: Select all

#! /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
Юзер
Юзер
Posts: 2
Joined: 27 Mar 2013, 20:54
ОС: SUSE 11 SP2

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

Post by xvz » 02 Apr 2013, 12:52

Raven
как будет если обе PPPoE подключение?
User avatar
Raven
Бородатый сис
Бородатый сис
Posts: 2791
Joined: 03 Mar 2010, 15:12
ОС: RHEL 8
Location: Из серверной

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

Post by Raven » 02 Apr 2013, 21:14

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

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

Post by xvz » 06 Apr 2013, 21:03

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

GW1=194.242.118.61
GW2=83.218.237.45
здесь что изменится если ip динамический?
User avatar
Infernal Flame
Злой Модер
Posts: 1796
Joined: 03 Mar 2010, 11:25
ОС: Centos 7
Contact:

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

Post by Infernal Flame » 07 Apr 2013, 19:43

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

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

Post by Raven » 07 Apr 2013, 22:43

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