Скрипт переключения между каналами

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
kuhar2007
сержант
Сообщения: 243
Зарегистрирован: 2008-12-22 14:40:35

Скрипт переключения между каналами

Непрочитанное сообщение kuhar2007 » 2012-08-14 12:19:08

Всем привет.

Нужно на на FreeBSD написать скрипт переключения между каналами. Готов заплатить 30$.
Описание для работы скрипта.
Есть два прова идут на сервер, один работает по статике, другой pppoe и один выход на клиентов.
Нужно чтобы по умолчанию работала статика (re1), а при ее отсутствии переключалось на pppoe (tun0), и сервер попрежнему отдавал интернет клиентам по pppoe, а когда на статике появлялся инет, то скрипт обратно переключал с tun0 на re1.
Сейчас на машинке при запуске одновременно подключено два прова и netstat светит два шлюза, нужно чтобы при запуске он сразу удалял шлюз провайдера, который работает по pppoe и потом рестартовал pf.
Для выяснения шлюза pppoe:

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

set tun_gw=`ifconfig tun0 | grep "inet "| awk '{print $4}'
Для его удаления должна обрабатываться команда

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

/sbin/route delete default $tun_gw

У меня есть пример скрипта, только он почему-то не удаляет шлюзы:

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

#!/bin/sh
###
if [ -e /tmp/ping_checker.lock ]; then

        #echo "Lockfile exist";

        exit 0;



else

touch /tmp/ping_checker.lock

set tun_ip=`ifconfig tun0 | grep "inet "| awk '{print $2}'`
set tun_gw=`ifconfig tun0 | grep "inet "| awk '{print $4}'`
def_gw=`netstat -rn | grep default | awk '{print $2}'`

    /sbin/route delete default $tun_gw
    /etc/rc.d/pf restart
    if ping -c 3 -S $tun_ip 8.8.8.8 > /dev/null
    fi
else
    if ping -c 3 -S 159.224.190.236 8.8.8.8 > /dev/null
    if [ "$def_gw" != "159.224.190.254" ] > /dev/null
    then
       /sbin/route add default $tun_gw
      /bin/route delete default 159.224.190.254
     /etc/rc.d/pf restart
    fi
exit 0
fi
rm -f /tmp/ping_checker.lock

fi
Прошу помощи знатаков, готов дать доступ к серваку.
Пишите мне в скайп: kuhar2007
Или в аську: 425756321

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Скрипт переключения между каналами

Непрочитанное сообщение kpp » 2012-08-14 13:29:53

Есть набор скриптов переключения каналов в инет.
Работает под FreeBSD 8.2 уже полгода.
Каналов в инет может быть много.
Используется база на MySQL для настройки и статистики.
Могу поделиться и помочь настроить.
Использую ipfw вместо pf - нужна будет небольшая доработка.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.


kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: Скрипт переключения между каналами

Непрочитанное сообщение kpp » 2012-08-17 15:17:03

2 Cancer
Указанный по ссылке скрипт не учитывает особенности работы ping под FreeBSD (один из выходов - добавление статического маршрута на внешний ИП).
В данном случае нужно делать некий микс из указанного скрипта и http://forum.lissyara.su/viewtopic.php? ... 00#p268433
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

kuhar2007
сержант
Сообщения: 243
Зарегистрирован: 2008-12-22 14:40:35

Re: Скрипт переключения между каналами

Непрочитанное сообщение kuhar2007 » 2012-08-17 20:02:22

Благодаря пользователю kpp, написали рабочий скрипт, за что ему большое спасибо.
Выкладываю сам скрипт:

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

#!/bin/sh

 stat_gw="11.11.11.11"
 stat_ip="22.22.22.22"
 ip_8="8.8.8.8"
 flag_file="/tmp/ping_checker.lock"


 [ -r "${flag_file}" ] && {
     echo "Lockfile exist";
     exit 0;
 }
 > ${flag_file}

 tun_ip=`ifconfig tun0 | grep "inet " | cut -d" " -f2`
 tun_gw=`ifconfig tun0 | grep "inet " | awk '{print $4}'`
 def_gw=`netstat -rn | grep default | awk '{print $2}'`

 echo "tun_ip=${tun_ip} tun_gw=${tun_gw} def_gw=${def_gw}"

 [ -z "${tun_gw}" ] && {
    echo "Gate PPPoE is empty! Stop."
    ifconfig tun0
    rm -f ${flag_file}
    exit 10
 }

 check=`netstat -rn | grep "${ip_8}[ ]*${stat_gw}"`
 [ -z "${check}" ] && route add ${ip_8} ${stat_gw}

  /sbin/ping -c 3 ${ip_8} #> /dev/null
 if [ $? -eq 0 ]; then
     echo "Static line is UP"

     /sbin/route delete default ${tun_gw}
     echo "PPPoE line is deactive"
     if [ "${def_gw}" != "${stat_gw}" ]; then
         /sbin/route add default ${stat_gw}
     fi
     /etc/rc.d/pf restart

     rm -f ${flag_file}

 else
     echo "Static line is DOWN"
     /sbin/route delete default ${stat_gw}
     [ "${def_gw}" != "${tun_gw}" ] && {
        /sbin/route add default ${tun_gw}
     }
     /etc/rc.d/pf restart

         echo "PPPoE line is active"

    [ `ifconfig tun0 | grep "inet " | wc -l` -gt 1 ] && {
        sleep 3
        killall -9 ppp
        sleep 5
        killall ppp
        sleep 7
        killall ppp
        sleep 45
        ppp -ddial ispname
    }

 fi

 rm -f ${flag_file}
 exit 0
Где
stat_gw="11.11.11.11" - шлюз статики
stat_ip="22.22.22.22" - ip статики

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

 tun_ip=`ifconfig tun0 | grep "inet " | cut -d" " -f2`
 tun_gw=`ifconfig tun0 | grep "inet " | awk '{print $4}'`
код определяет ip и шлюза провайдера, который работает по pppoe.