Переключение провайдеров
Создано: 04-06-2009 19:47:50  Метки: cgi bash linux
Маленьким фирмам, постоянно работающим в интернете, часто бывает необходим резервный канал, на случай падения основного.
Возникает проблема как переключать с основного канала на резервный. Можно пингать шлюз или какой-либо хост в в основном канале и переключать по пропаданию, можно балансировать нагрузку на каналы. А можно и вручную, например вот так:

/var/www# cat prov.html
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">
<meta http-equiv="pragma" content="no-cache">
<TITLE>
Переключение провайдера
</TITLE>
</head>
<body>
В данный момент подключен: <b>ПРОВ-ОСН</b><br>
Нажмите кнопку для переключения (переключение будет осуществлено в течении 1 минуты)<br>

<form action="cgi-bin/1.cgi">
<input type=radio name="flag" value="OSN">ПРОВ-ОСН<br>
<input type=radio name="flag" value="DOP">ПРОВ-ДОП<br>
<input type=submit>
</form>
</body>
</html>

/var/www# cat cgi-bin/1.cgi
#! /bin/bash

echo Content-type: text/plain
echo ""

flg=`echo $QUERY_STRING|cut -d= -f2`
case "$flg" in
OSN)
    echo "OK переключаем на ПРОВ-ОСН"
    /bin/sed -r -i "s/<b>(ПРОВ-ОСН|ПРОВ-ДОП)<\/b>/<b>ПРОВ-ОСН<\/b>/" ../prov.html 2>&1
    echo $flg > flag
    ;;
DOP)
    echo "OK переключаем на ПРОВ-ДОП"
    /bin/sed -r -i "s/<b>(ПРОВ-ОСН|ПРОВ-ДОП)<\/b>/<b>ПРОВ-ДОП<\/b>/" ../prov.html 2>&1
    echo $flg > flag
    ;;
*)
    echo "Фигню пишешь, начальник"
    ;;
esac

/var/www# cat /etc/crontab
#cut
* * * * * root /root/change_prov

/var/www# cat /root/change_prov
#! /bin/bash
flg=`cat /var/www/cgi-bin/flag`
rout=`/sbin/ip r l 0/0|awk '{print $3}'`
#echo $rout $flg
if [ $rout = "8x.xx.xx.xx" -a $flg = "OSN" ] ; then exit 0
fi
if [ $rout = "7x.xx.xx.xx" -a $flg = "DOP" ] ; then exit 0
fi
case $flg in
OSN)
    /sbin/ip r d default
    /sbin/ip r a default via 8x.xx.xx.xx dev eth2
    /root/firewall_osn
    cp -f /etc/resolv.conf.osn /etc/resolv.conf
    /etc/init.d/dnsmasq restart >/dev/null
    echo "change to PROV-OSN"
    ;;
DOP)
    /sbin/ip r d default
    /sbin/ip r a default via 7x.xx.xx.xx dev eth0
    /root/firewall_dop
    cp -f /etc/resolv.conf.dop /etc/resolv.conf
    /etc/init.d/dnsmasq restart >/dev/null
    echo "change to PROV-DOP"
    ;;
*)
    ;;
esac
1486 просмотров комментировать