Portál AbcLinuxu, 10. května 2025 05:28
#!/bin/bash
ip=/sbin/ip
ping=/bin/ping
route=/sbin/route
CS_IP="172.16.26.1"
CS_IF="eth2"
CS_METRIC=(`$ip route | grep $CS_IP | awk '{print $7}'`)
CS_PING=(`$ping -w 1 -c 1 -I $CS_IF 8.8.8.8`)
while [ true ]; do
## Pokud havni pripojeni nefunguje, prepneme na zalozni.
if [[ "$CS_METRIC" -ne "10" && ! "$CS_PING" ]];
then
$route del default gw $CS_IP
$route add default gw $CS_IP metric 10
echo "Nefunguje"
fi
## Pokud pripojeni opet zacne fungovat, tak mu zvysime prioritu (hlavni)
if [[ "$CS_METRIC" -eq "10" && "$CS_PING" ]];
then
$route del default gw $CS_IP
$route add default gw $CS_IP metric 0
echo "Opet funguje"
fi
sleep 5
done
Zdá se mi, že nefunguje právě to ověření PINGu, jakoby to nevracelo false, nebo možná očekávám něco jiného, než to vrací.
Můžete prosím poradit? Řešení dotazu:
# vytvoreni routovacich tabulek (CS, PF) a rout
$ip route add 172.16.26.0 dev eth2 src 172.16.26.62 table T1
$ip route add default via 172.16.26.1 table T1
$ip route add 10.109.13.128 dev eth1 src 10.109.13.146 table T2
$ip route add default via 10.109.13.129 table T2
# nastaveni rout
$ip route add 172.16.26.0 dev eth2 src 172.16.26.62
$ip route add 10.109.13.128 dev eth1 src 10.109.13.146
# nasteveni defaultni routy
$ip route add default via 172.16.26.1
# nasteveni smerovacich rout (aby slo dovnitr a ven to, jakym interfacem to prislo)
$ip rule add from 172.16.26.62 table T1
$ip rule add from 10.109.13.146 table T2
# prirazeni konexi do tabulek
$ip route add 192.168.1.0 dev eth0 table T1
$ip route add 10.109.13.128 dev eth1 table T1
$ip route add 127.0.0.0/8 dev lo table T1
$ip route add 192.168.1.0 dev eth0 table T2
$ip route add 172.16.26.0 dev eth2 table T2
$ip route add 127.0.0.0/8 dev lo table T2
# nastaveni nexthopu (volba odchozi GW je na kernelu)
$ip route add default scope global nexthop via 172.16.26.1 dev eth2 weight 1 nexthop via 10.109.13.129 dev eth1 weight 2
Tak co doplnit?
muzes zkusit IFovat budto navratovou hodnou pingu nebo pocet prijatych packetu:
ping_gw0=$(ping -c 1 ${gw0})
if [ $? == 0 ]; then
#brana funguje
else
#brana nejde
fi
ping_gw0=$(ping -c 10 ${gw0} | grep received | awk '{print $4 }')
if [ ${ping_gw0} -ge 8 ]; then
#brana funguje
else
#brana nejde
fi
Na received.com ti to uz fungovat nebude :P a grep nie je nuten.
gw0= ping_gw0=$(ping -c 10 "$gw0" | awk "/--- $gw0 ping statistics ---/"'{ getline; print $4 }') if [ "${ping_gw0}" -ge 8 ]; then #brana funguje else #brana nejde fi
$ip route add default scope global nexthop via 172.16.26.1 dev eth2 weight 1 nexthop via 10.109.13.129 dev eth1 weight 2
To mi vubec nefungovalo. Nevim proc kdyz je to vsude uvadene jako prave failover nastaveni.
Mozna na to ma vliv to jestli je za tim pripojene jeste nejake zarizeni (napr. AP) ktere i v pripade vypadku linky nejake pakety IN/OUT na port sitove karty posila.
#
# WFS - Wan Failover Script
# Configuration file
#
TARGETS_FILE=/etc/wfs/targets.txt
PRIMARY_GW=172.16.26.1
SECONDARY_GW=10.109.13.129
MAX_LATENCY=50
INTERVAL=5
TEST_COUNT=2
THRESHOLD=3
COOLDOWNDELAY01=5
COOLDOWNDELAY02=5
MAIL_TARGET="mail@(muj).cz"
DAEMON=1
QUIET=1
PIDFILE=/var/run/wfs.pid
PRIMARY_CMD=""
SECONDARY_CMD=""
DEBUG=1
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.