Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!


#!/bin/bash
to="name@gmail.com"
log=/var/log/autoreroute.log
datadir=/tmp/ardd
aa="ya.ru google.com cas.dtln.ru"
host=`hostname`
if [ "$host" == "router1" ]; then
nhost=0
ia=( 11.11.11.1 22.22.22.1 )
gwa=( 11.11.11.2 22.22.22.2 )
else
if [ "$host" == "router2" ]; then
nhost=1
ia=( 11.11.12.1 22.22.23.1 )
gwa=( 11.11.12.2 22.22.23.2 )
else
exit
fi
fi
mkdir -p $datadir
cd $datadir || exit
rm *_*_*.log
ns=60
n=60
s=100
while true
do
n=$[$n+1]
if [ $n -ge $ns ] ; then
n=0
fi
for a in $aa
do
for i in ${ia[*]}
do
ping -c 6 -i 6 -n -I $i $a > ${n}_${a}_${i}.log &
done
done
for a in $aa
do
for i in ${ia[*]}
do
wait
done
done
for t in ${!ia[*]}
do
i=${ia[$t]}
v[$t]=`cat *_${i}.log | grep -F " bytes from " | wc -l`
done
so=$s
dif=$[${v[0]}-${v[1]}]
lim1=15
lim2=15
if [ $s -eq 1 ]; then
lim1=2
fi
if [ $s -eq 2 ]; then
lim2=2
fi
if [ $dif -gt -$lim1 -a $dif -lt $lim2 ] ; then
s=0
else
if [ ${v[0]} -lt ${v[1]} ] ; then
s=1
else
s=2
fi
fi
if [ $so -ne $s ] ; then
dt=`date --rfc-3339=seconds`
ip route flush table 100
ip route flush table 150
ip route flush cache
if [ $s -eq 0 ] ; then
ip route add default table 150 nexthop via ${gwa[0]} weight 3 nexthop via ${gwa[1]} weight 1
dt="$dt Both chanel up ${v[0]} ${v[1]}"
dnsi=1
else
if [ $s -eq 1 ] ; then
ip route add default via ${gwa[1]} table 100
conntrack -D -n ${ia[0]} > /dev/null 2>&1
dt="$dt Provider 2 down ${v[0]} ${v[1]}"
dnsi=0
else
ip route add default via ${gwa[0]} table 100
conntrack -D -n ${ia[1]} > /dev/null 2>&1
dt="$dt Provider 1 down ${v[0]} ${v[1]}"
dnsi=1
fi
fi
echo "$dt" >> $log
ip route flush cache
conntrack -D -s 10.0.1.6 > /dev/null 2>&1
conntrack -D -g 10.0.1.6 > /dev/null 2>&1
tst=5
while [ $tst -gt 0 ]; do
sleep 5
ssh dnseditor@ns.ourdomen.ru sudo /root/ed-dns.sh $nhost $dnsi >> $log && tst=1
tst=$[$tst-1]
done
tst=5
while [ $tst -gt 0 ]; do
sleep 5
( echo "To: $to" ; echo Subject: auto-reroute on $host ; echo ; echo "$dt" ) | sendmail -t >> $log 2>&1 && tst=1
tst=$[$tst-1]
done
fi
done
Офисный переключатель интернета