IT Blog - point net
"паять нужно только то, что нельзя починить с помощью ассемблера!" (с)

Автоматическое переключение на резервный канал интернет.

/ Просмотров: 7242
Нарисовалась задачка — настроить автоматическое переключение основного интернет канала на резервный и обратно.В поисках готового скрипта наткнулся вот на эту страничку:

http://moywww.ru/zapiski-admina/9-nastroyka-linux/6-avtomaticheskoe-perekluchenie-interfeysov-linux-suse

В скрипте присутствуют серьёзные ошибки. Есть мнение, что эти ошибки были специально добавлены в скрипт. После правки и доработки под FreeBSD, получилось так:

#!/bin/sh
# Default GW
GW1=111.111.111.111
GW2=222.222.222.222
# IP основного интерфейса
eth0=111.111.111.112
# IP хоста для проверки
dst1=8.8.8.8
# Переменная
inet=0
# Сам скрипт
inet=$(ping -c 1 -S $eth0 $dst1 | grep «64 bytes from» | awk ‘{print $2}’ )
if [ «$inet» != «bytes» ]; then
if [ -f /etc/ppp/second.gw ]; then
echo Already switched to secondary
else
/sbin/route change default $GW2
/sbin/route add -host $dst1 $GW1
touch /etc/ppp/second.gw
echo «Primary failed. Switching to secondary» | sendEmail -f admin@my.ru -t admin@my.ru -u «primary failed» -m «primary failed» -s X.X.X.X:25
fi
else
if [ -f /etc/ppp/second.gw ]; then
/sbin/route change default $GW1
/sbin/route del -host $dst1 $GW1
echo «Primary restored. Switching back» | sendEmail -f admin@my.ru -t admin@my.ru -u «primary restored» -m «primary restored» -s X.X.X.X:25
rm /etc/ppp/second.gw
fi
fi

Работает 100% проверен на FreeBSD 10.

Как показала практика, скрипт выше чувствителен к кратковременным пропаданиям интернета, когда например связь с проверочным хостом теряется буквально на минуту, при этом остальные ресурсы инета доступны. Т.е. скрипт часто срабатывает ложно.

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

Вот как выглядит доработанный скрипт:

#!/bin/bash
#Default GW
GW1=111.111.111.111
GW2=222.222.222.222
# IP основного интерфейса
eth0=111.111.111.112
# IP хостов для проверки
dst1=8.8.8.8
dst2=4.2.2.1
dst3=31.31.194.2
# Переменная
ping1=0
ping2=0
ping3=0
# Сам скрипт
ping1=$(ping -c 3 -w 15 $dst1 | awk ‘BEGIN{s=»»} $2~/bytes/{s=s «X»} END{print s}’)
ping2=$(ping -c 3 -w 15 $dst2 | awk ‘BEGIN{s=»»} $2~/bytes/{s=s «X»} END{print s}’)
ping3=$(ping -c 3 -w 15 $dst3 | awk ‘BEGIN{s=»»} $2~/bytes/{s=s «X»} END{print s}’)
all=$ping1$ping2$ping3
if [ «$all» == «» ]; then
if [ -f /etc/ppp/second.gw ]; then
echo Already switched to secondary
else
/sbin/route delete default
/sbin/route add default gw $GW2 eth2
/sbin/route add -host $dst1 gw $GW1
/sbin/route add -host $dst2 gw $GW1
/sbin/route add -host $dst3 gw $GW1
touch /etc/ppp/second.gw
echo «Primary failed. Switching to secondary» | sendEmail -f router@my.me -t me@my.me -u «for router primary failed» -m «for router primary failed» -s X.X.X.X:25
fi
else
if [ -f /etc/ppp/second.gw ]; then
/sbin/route delete default
/sbin/route add default gw $GW1 eth0
/sbin/route del -host $dst1 gw $GW1
/sbin/route del -host $dst2 gw $GW1
/sbin/route del -host $dst3 gw $GW1
echo «Primary restored. Switching back» | sendEmail -f router@my.me -t me@my.me -u «for router primary restored» -m «for router primary restored» -s X.X.X.X:25
rm /etc/ppp/second.gw
fi
fi
Оставьте комментарий!

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

Комментарий будет опубликован после проверки

Вы можете войти под своим логином или зарегистрироваться на сайте.

(обязательно)