avk013.blogspot.com - другой мой блог "C# and etc"

воскресенье, 28 октября 2018 г.

linux balance 3x

ver2
Опробовано на 4 каналах,
для очистки дефолтного шлюза можно сказать
ip route del 0/0
таблицу инициализировать 1 раз
и менять таблицу шлюзов в зависимости от отсутсвуюшего канала

ver1/
стояла задача, сделано стандартно из мана от убунту,
НО
в кронтабе задача по пингованию и смене режима баланса, дискретность в 5 минут.

файлик состояния решено записывать в RAM диск, который монтируется
=>  mount -t tmpfs -o size=16K tmpfs /mnt/ram

== vars ===
#!/bin/bash
# LAN interface
IF0="enp4s0"
# WAN interface 1
IF1="enp1s0"
# WAN interface 2
IF2="enp5s0"
# WAN interface 3
IF3="enp5s1"
IP1="192.168.202.5"
IP2="192.168.223.5"
IP3="192.168.201.5"
#IP2="`ip addr show $IF2 | grep inet | awk '{print $2}'`"
# gateway 1
P1="192.168.202.1"
# gateway 2
P2="192.168.223.1"
# gateway 3
P3="192.168.201.1"
# LAN netmask
P0_NET="172.16.36.0/17"
# WAN1 netmask
P1_NET="192.168.202.0/29"
# WAN2 netmask
P2_NET="192.168.223.0/29"
# WAN3 netmask
P3_NET="192.168.201.0/29"
TBL1="glob"
TBL2="sk3"
TBL3="sk1"
# Realtive weight of channels bandwidth
W1="5"
W2="3"
W3="1"
== ping.sh ==
path="/mnt/ram"
ping -c 3 -s 100 192.168.202.1
ping -c 3 -s 100 192.168.201.1
ping -c 3 -s 100 192.168.223.1
ping -c 3 8.8.8.8 -I enp1s0
if [ $? -eq 0 ]
then a=1
else a=0
fi
echo $a > $path/out.txt
ping -c 3 8.8.4.4 -I enp5s0
if [ $? -eq 0 ]
then a=1
else a=0
fi
echo $a >> $path/out.txt
ping -c 3 1.1.1.1 -I enp5s1
if [ $? -eq 0 ]
then a=1
else a=0
fi
echo $a >> $path/out.txt
== check.bash ==

2 комментария:

  1. ip route | grep nexthop | awk '{print $3}'
    позволяет получить пул шлюзов

    ОтветитьУдалить
  2. # скрипт удаляет шлюзы без интернета, вопрос остается как их добавлять, т.е. проверять наличие инета на интерфейсе без шлюза
    #!/bin/bash
    gw_list=0
    numb=0
    #gateways перечень наших шлюзов
    gwa=(192.168.1.1 192.168.2.1 192.168.3.1 192.168.4.1 192.168.5.1)
    gw_weight=(3 2 5 1 4)
    gw_command="ip route add default"
    #echo ${gwa[@]}
    for i in "${gwa[@]}";
    do
    #echo "$i";
    ipm=${i:0:12};
    #ищем через какой интерфейc должны бегать пакеты
    infs=`ip route | grep "kernel scope link src ${i:0:12}"| awk '{print $3}'`;
    # проверяем не пусто ли в результате
    if [ -n "$infs" ]; then
    #echo $infs;
    ping -I $infs 1.1.1.1 -c 3;
    if [ $? -eq 0 ]
    then
    gw_command="$gw_command nexthop via $i dev $infs weight ${gw_weight[$num]}";
    numb=$((numb+1));
    fi
    fi
    num=$((num+1));
    done
    #узнаем сколько сейчас активных шлюзов (считаем строки ответа)
    gw_list=`ip route | grep nexthop | wc -l`;
    echo $gw_list;

    echo $numb


    if [ "$gw_list" -ne "$numb" ]
    then
    eval "route del 0/0"
    eval "route flush cache"
    eval $gw_command
    fi

    ОтветитьУдалить