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
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 ==
Опробовано на 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 ==
ip route | grep nexthop | awk '{print $3}'
ОтветитьУдалитьпозволяет получить пул шлюзов
# скрипт удаляет шлюзы без интернета, вопрос остается как их добавлять, т.е. проверять наличие инета на интерфейсе без шлюза
ОтветитьУдалить#!/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