The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Тематический каталог: Пример скрипта для переключения выделе..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Тематический каталог: Пример скрипта для переключения выделе..."  +/
Сообщение от auto_topic on 06-Июл-04, 16:39 
Обсуждение статьи тематического каталога: Пример скрипта для переключения выделенок, при падении. (leased trouble script example)

Ссылка на текст статьи: http://www.opennet.ru/base/net/leased_degluk.txt.html

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Пример скрипта для переключения выделенок, при падении. (lea..."  +/
Сообщение от samid on 06-Июл-04, 16:39 
а вот на 3 канала переделано! но теперь без ошибок ;))

#!/bin/sh
PATH="/sbin:/usr/bin"

ISP1="*.*.*.*"

ISP2="*.*.*.*"

ISP3="*.*.*.*"


OVER_ISP1="*.*.*.*"
OVER_ISP2="*.*.*.*"
OVER_ISP3="*.*.*.*"

netstat -nr | grep ${OVER_ISP1} >/dev/null 2>&1
if [ $? != 0 ]; then
        echo "Add static route to ${OVER_ISP1} via ${ISP1}"
        route add ${OVER_ISP1} ${ISP1} -static
fi
netstat -nr | grep ${OVER_ISP2} >/dev/null 2>&1
if [ $? != 0 ]; then
         echo "Add static route to ${OVER_ISP2} via  ${ISP2}"
         route add ${OVER_ISP2} ${ISP2} -static
fi

netstat -nr | grep ${OVER_ISP3} >/dev/null 2>&1
if [ $? != 0 ]; then
         echo "Add static route to ${OVER_ISP3} via  ${ISP3}"
         route add ${OVER_ISP3} ${ISP3} -static

fi

current_now=`netstat -nr | grep default | awk '{print $2}'`

echo -n "ping ISP1:"
ping -c 2 ${OVER_ISP1} >/dev/null 2>&1
if [ $? -eq 0 ]; then
                echo " [OK]"
                ISP1_stat=0
                else
                echo " [FAILED]"
                ISP1_stat=1
fi

echo -n "ISP2:"
ping -c 1 ${OVER_ISP2} >/dev/null 2>&1
if [ $? -eq 0 ]; then
                echo " [OK]"
               ISP2_stat=0
                else
                echo " [FAILED]"
                ISP2_stat=1
fi

echo -n "ping ISP3:"
ping -c 1 ${OVER_ISP3} >/dev/null 2>&1
if [ $? -eq 0 ]; then
                echo " [OK]"
                ISP3_stat=0
                else
                echo " [FAILED]"
                ISP3_stat=1
fi


if [ ${ISP1_stat} -eq 1 -a ${ISP2_stat} -eq 0 -a  ${current_now} = ${ISP1} ]; then
                echo "ISP1 suck"
                route delete default
                route add default ${ISP2}
fi

if [ ${ISP1_stat} -eq 1 -a ${ISP2_stat} -eq 1 -a ${ISP3_stat} -eq 0 -a  ${current_now} != ${ISP3} ]; then
                echo "ISP1 ISP2 suck"
                route delete default
                route add default ${ISP3}
fi

if [ ${ISP1_stat} -eq 0 -a ${current_now} != ${ISP1} ]; then
                echo "Back to ISP1"
                route delete default
                route add default ${ISP1}
fi

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Пример скрипта для переключения выделенок, при падении. (lea..."  +/
Сообщение от nagoHaK email(ok) on 17-Сен-04, 13:12 
У меня этот скрипт так и не пошёл, написал свой на основе этого первого из приведенных:
#!/bin/sh
#----------------------------------------------------------------------
# Description: Channel emergency switching script
# Author: Britvin Danila <>
# Computer: router
# System: FreeBSD 5.2.1-RELEASE on i386
#----------------------------------------------------------------------

# Variables
#### First channel description
FRST="1.1.1.1"
FRSTGW="gw1.gw1.gw1.gw1"
FRSTIF="if0"
#### Second channel description
SCND="2.2.2.2"
SCNDGW="gw2.gw2.gw2.gw2"
SCNDIF="if1"
#Target for ping
TGT="194.226.96.8"             #ns4.ripn.net
#### Reading current channel
netstat -rn | grep default > /log.txt
if [ $? -ne 0 ];then
    current_link="gw1.gw1.gw1.gw1"
else
    current_link=`awk '{print $2}' /log.txt`
    rm /log.txt
fi
echo "Current link is $current_link"

#### Pinging target via first GW
route delete $TGT
route add -host $TGT $FRSTGW -static
ping -c 3 $TGT >/dev/null 2>&1
if [ $? -ne 0 ];then
    echo "Ping on first channel: [ BAD ]"
    frst_status=bad
else
    echo "Ping on first channel: [ OK ]"
    frst_status=good
fi
#### Pinging target via second GW
route delete $TGT
route add -host $TGT $SCNDGW -static
ping -c 3 $TGT >/dev/null 2>&1
if [ $? -ne 0 ];then
    echo "Ping on second channel: [ BAD ]"
    scnd_status=bad
else
    echo "Ping on second channel: [ OK ]"
    scnd_status=good
fi

#### Switching channel
#### All good
if [ "good" = $frst_status  -a "good" = $scnd_status -a $current_link = $FRSTGW ];then
    echo "All good."
exit
fi
if [ $current_link = $SCNDGW -a "bad" = $frst_status -a "good" = $scnd_status ];then
echo "First channel is still down =("
exit
fi
#### First channel is UP!
if [ "good" = $frst_status -a $current_link = $SCNDGW ];then
    echo First channel is UP now, switching. Current time `date`
    EXT=$FRST
    EXTGW=$FRSTGW
    EXTIF=$FRSTIF
    NATD="natd"
fi
#### If first channel is down
if [ "bad" = $frst_status  -a "good" = $scnd_status -a $current_link = $FRSTGW ];then
    echo First channel is going down, switching. Current time `date`
    EXT=$SCND
    EXTGW=$SCNDGW
    EXTIF=$SCNDIF
    NATD="8678"
fi
#### If both channels down
if [ "bad" = $frst_status  -a "bad" = $scnd_status ];then
    echo "Both channels down... How we can live without net?!?!?! "
    echo "I will try to find live channel again"
    echo `date`
exit
fi
route delete default 2>&1
route add default $EXTGW 2>&1
/sbin/ipfw -q flush
#генерим новые правила для ipfw
####### VARIABLES #######
ext=$EXTIF         #External interface
int="dc0"        #Internal Interface
intip="192.168.0.10"    #Internal IP
extip="$EXT"        #External IP
dnsfwd="193.138.70.2"    #Forward DNS server
fw="/sbin/ipfw"        #Path to IPFW
echo $ext "is an external interface"
echo $int "is an internal interface"
echo "Applying IPFW settings"
####### GLOBAL RULES #######
## Allow rules
${fw} add 20000 allow icmp from $intip/24 to any via $int #Allow ping requests from intranet
## Deny rules
${fw} add 40000 deny ip from $intip/24 to $extip via $int
# ну и далее как вам нужно . . . . .
##NATD
#Главное не забыть вот это ! ! !
${fw} add 60000 divert $NATD ip from any to any via $ext #Enable natd
#В запуск системы поставить два natd –
#natd –s –n if0
#natd –s –p 8678 if1

.......................................................................
Поставил этот скрипт в крон на каждые пять минут
*/5 * * * 1-7 root //usr/local/etc/cron-scripts/switch.sh

В принципе, могу порекомендовать удалить все эхо про пинг и прочее типа "Done" и оставить только в случе переключения а то кроновские репорты достанут =)
Не судите строго сей скрипт - он у меня первенький =), но факт что работает...

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "Пример скрипта для переключения выделенок, при падении. (lea..."  +/
Сообщение от Jury Danilov email on 08-Дек-04, 20:08 
>Не судите строго сей скрипт - он у меня первенький =), но
>факт что работает...

Работает, говоришь... :-)
а попробуй выдерни из второй карты провод и подожди 5 мин...

у тебя и работающий ляжет...

...Подсказка

route delete default 2>&1
route add default $EXTGW 2>&1

Этот случай в if не попадает, поэтому переменная $EXTGW , которая там определяется остается неопределенной
default удаляется, а нового то и нету...

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

4. "Пример скрипта для переключения выделенок, при падении. (lea..."  +/
Сообщение от CHe email on 10-Фев-10, 12:15 
подскажите плиз, что если основной шлюз
#роутер основного пройдера
ISP1="xxx.xxx.xxx.xxx"  
может измениться, как нужно написать скрипт, что бы он автоматом менялся и в скрипте?
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру