The OpenNET Project / Index page

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



"Тематический каталог: Пример скрипта для переключения выделенок, при падении. (leased trouble script example)"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Подсказка: Ссылки "<<" и ">>" открывают первые и последние 10 сообщений.
. "Пример скрипта для переключения выделенок, при падении. (leased trouble script example)" +/
Сообщение от nagoHaKemail (ok), 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ообщить модератору

Оглавление
Тематический каталог: Пример скрипта для переключения выделенок, при падении. (leased trouble script example), auto_topic, 06-Июл-04, 16:39  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



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

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