bash-скрипт: отказоустойчивый интернет

Итак продолжаем клепать костыли ;)
Допустим у нас есть «сервер-роутер», который подключён к Интернету через туннель PPTP/PPPoE и статический ИП-адрес. С помощью следующего скрипта мы можем держать подключение для нашего интернета «вечно»…

Логика сприпта проста, но не правильна ;) Скрипт писался во время попойки и там же отлаживался ;)
/2kanala/ping.sh:

#!/bin/bash
n_packet=15
INT_static="vlanХХХ"
INT_dynamic="ppp0"
GW_static_ip="ХХХ.ХХХ.ХХХ.121"
function change_gw {
               echo "I change_gw in func";
                GW_int=`route | grep UG | awk '{print $8}'`;
                echo "Gateway interface: $GW_int";
 
                GW_int_n=`route | grep UG | awk '{print $8}'|wc -c`
                if [ $GW_int_n -eq 0 ]; then
 
                        GW_static_exist_n=`/sbin/ifconfig | grep $INT_static | wc -c`
                        GW_dynamic_exist_n=`/sbin/ifconfig | grep $INT_dynamic | wc -c`
 
                        if [ $GW_static_exist_n -eq 0 ]; then
                                GW_int=$INT_static
 
                        elif [ $GW_dynamic_exist_n -eq 0 ]; then
                                GW_int=$INT_dynamic
                        else
 
                                GW_int=$INT_static
                        fi
                fi
 
                /sbin/route del default
                sleep 1
                /sbin/route del default
 
                if [ $GW_int == $INT_static ]; then
                        NEW_GW=$INT_dynamic
                       #/sbin/route add default dev $NEW_GW
 
                        GW_ppp0_n=`/sbin/ifconfig ppp0|grep "inet addr"|tr ':' ' '|awk '{print$5}'|wc -c`
                        if [ $GW_ppp0_n -eq 0 ]; then
                                /usr/bin/poff;sleep 1;/usr/bin/pon dsl-provider
                        fi
 
                        GW_ppp0=`/sbin/ifconfig ppp0|grep "inet addr"|tr ':' ' '|awk '{print$5}'`
 
                        /sbin/route add default gw $GW_ppp0
 
                elif [ $GW_int == $INT_dynamic ]; then
                        NEW_GW=$INT_static;
                        /sbin/route add default gw $GW_static_ip
                else
                        NEW_GW=$INT_static
                        /sbin/route add default gw $GW_static_ip
                fi
 
           }
while :
do
to_ping="ya.ru"
 
 
 
 
 
        AA=`route | grep UG | awk '{print $2}'`
        AA_full_n=`route | grep UG | wc -c`
        if [ $AA_full_n -eq 0 ]; then
                echo "first"
                change_gw
        fi
 
        #### To test script generete down gateway ###
        #R=$((RANDOM%2+1));if [ $R -eq "2" ];then  AA="ххх.ххх.ххх.128";fi
        ####
        AAA=`ping -c $n_packet -q $to_ping | grep loss | awk '{print $6}'`
        #echo "AAA: $AAA"
        if [ $AAA == "100%" ] ; then
                echo "loss gateway";
                change_gw
        else
                p_full=`ping -c $n_packet -q $to_ping |grep loss|awk '{print $2}'|wc -c`
                if [ $p_full -eq 0 ]; then
                        #echo "p_number:$p_full"
                        to_ping="8.8.8.8"
                        echo "dns error - ping to $to_ping"
                fi
 
                AAA_ya=`ping -c $n_packet -q $to_ping | grep loss | awk '{print $6}'`
                echo "AAA_YA:$AAA_ya"
                if [ $AAA_ya == "100%" ] ; then
                        echo "loss Internet";
                        change_gw
                fi
        fi
done

С помощью этого скрипта Мы запустим при старте системы бесконечную проверку роботоспособности интернета

#!/bin/sh
/usr/bin/screen -S gateway -d -m /2kanala/ping.sh

Leave a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Загрузка...
Menu Title