Portál AbcLinuxu, 10. května 2025 05:28

Dotaz: Pomoc se scriptem - hlídání připojení k internetu

Petr Maleček avatar 28.9.2013 03:22 Petr Maleček | skóre: 29 | Plzeň - Bolevec
Pomoc se scriptem - hlídání připojení k internetu
Přečteno: 630×
Odpovědět | Admin
Ahoj,

potřeboval bych pomoct s následujícícm scriptem. Cílem je, aby v případě výpadku hlavního netu došlo k nastavení nižší priority (metriky) a upřednostnilo se záložní připojení. Ve chvíli, kdy se původní připojení obnoví, tak se metrika opět nastaví na nulu a bude jako hlavní:

#!/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? :-) Díky.
LinMuck, WinFuck :-P

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.9.2013 10:15 NN
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Proc tak slozite, nestacilo by ten 'failover' nakonfigurovat rovnou?
Petr Maleček avatar 29.9.2013 12:04 Petr Maleček | skóre: 29 | Plzeň - Bolevec
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
Jasně a nějaká rada jak na to? Já mám nastavené toto:

# 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?
LinMuck, WinFuck :-P
Jashin© avatar 28.9.2013 19:48 Jashin© | skóre: 8 | Keyboard/Home
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
Odpovědět | | Sbalit | Link | Blokovat | Admin
.

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

With liberty and metal for all
28.9.2013 20:58 Patrik Uhrak | skóre: 31 | blog: pato
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu

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
29.9.2013 16:25 hermelin | skóre: 21
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nezabyvej se vymyslenim neceho co uz vymyslel a odladil nekdo jiny :-)

https://code.google.com/p/wanfailoverscript/

Pouzivam k maximalni spokojenosti
Petr Maleček avatar 29.9.2013 18:59 Petr Maleček | skóre: 29 | Plzeň - Bolevec
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
Nohy líbám!!!
LinMuck, WinFuck :-P
29.9.2013 19:38 hermelin | skóre: 21
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
To nemusis :-)

Resil jsem podobny problem pred par lety - dokonce se tremi pripojenimi

$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.
29.9.2013 20:13 NN
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
To je to na co jsem narazel, to by melo jako failover zafungovat samo o sobe, bez nutnosti testovani protistrany. Nicmene tipuju, ze to funguje jen kdyz vypadek shodi rozhrani. Osobne bych problem resil implementaci jednoho ze sady NHRP protokolu, ve spolupraci s ISP.
Petr Maleček avatar 29.9.2013 21:35 Petr Maleček | skóre: 29 | Plzeň - Bolevec
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
Mě to právě nefunguje v žádné situaci. Schválně jsem mezi to připojil ještě jeden hloupý switch od kterého jsem pak jedno připojení odpojil (fyzicky ale k serveru stále byl připojen kabel) a nic se nepřeplo, prostě net nefungoval. A i když jsem odpojil celý switch (čili rozhraní se odpojilo), tak taky nic.

Tenhle script který jsi mi poradil a za který moc děkuji funguje přesně jak potřebuji až na jeden drobný detail a to - i když je nastaveno ping -w 1 -c 2 8.8.8.8, tak nevím proč, ale on prostě čeká třeba minutu, než mu dojde, že ten ping neprošel. Jako by čekal na nevím co, když jsem mu jasně parametrem řekl, že má na odpověď počkat vteřinu. To úplně ignoruje. Takže teď třeba přepnutí z hlavní linky na záložní trvá tak 3 minuty.
LinMuck, WinFuck :-P
Petr Maleček avatar 29.9.2013 21:39 Petr Maleček | skóre: 29 | Plzeň - Bolevec
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
Upřesním - tři minuty pro to, že cca minutu čeká než zjistí, že ping neprošel a má na to 3 pokusy. Server jsem dal do testování zatím jen jeden. Až tohle vyřeším, tak dám dva. Asi nějaké public DNS servery. Jeden GOOGLu a jeden NICu.
LinMuck, WinFuck :-P
29.9.2013 21:46 hermelin | skóre: 21
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
mrkni sem https://code.google.com/p/wanfailoverscript/source/browse/trunk/README

polozky INTERVAL, TESTCOUNT, TRESHOLD
Petr Maleček avatar 29.9.2013 21:48 Petr Maleček | skóre: 29 | Plzeň - Bolevec
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
Já jsem readme četl. To mám nastavené zatím dost "ostře" aby to reagovalo okamžitě a stejně nic. Nebo ne?

#
# 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

LinMuck, WinFuck :-P
29.9.2013 21:52 hermelin | skóre: 21
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
a co to pise v logu ?
Petr Maleček avatar 29.9.2013 21:57 Petr Maleček | skóre: 29 | Plzeň - Bolevec
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
Příloha:
Píše to přesně to co má, jen mu trvá děsně dlouho, než zjistí, že prostě připojení (ping) neprošel. Viz příloha, všimněte si těch časů.
LinMuck, WinFuck :-P
29.9.2013 22:05 hermelin | skóre: 21
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
Navrhuju tykani :-)

a proc mas MAX_LATENCY=50 ? Zkus dat 2.

Pripadne prubni starsi verzi - v te posledni to vypada ze se prave delalo dost zmen ohledne casu.

Ja aktualne pouzivam 2.01 a tam to funguje presne podle nastaveni.
Petr Maleček avatar 29.9.2013 22:13 Petr Maleček | skóre: 29 | Plzeň - Bolevec
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
Díky, ach jo, já jsem kus v*la. Já měl za to, že je to latence v milisekundách a ono je to v sekundách. A ještě ke všemu jsem si myslel že to je braný jakože i když ping projde, ale jeho latence je větší než 50ms, tak že to bere jako podnět k přepnutí na zálohu. OMG, já jsem takovej v*l.

No, tak se omlouvám za zbytečný spamování, teď už mi to funguje. Sypu si popel na hlavu.
LinMuck, WinFuck :-P
Petr Maleček avatar 29.9.2013 22:49 Petr Maleček | skóre: 29 | Plzeň - Bolevec
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
Jinak teď se mi to chová přesně takhle (moje nahrávka) - YouTube odkaz. Takže super! :-)
LinMuck, WinFuck :-P
29.9.2013 22:53 hermelin | skóre: 21
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
Online forever :-)
Petr Maleček avatar 29.9.2013 23:44 Petr Maleček | skóre: 29 | Plzeň - Bolevec
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
No, díky bohu za to. Teď nebudu muset jezdit 2x - 3x do týdne do kanceláře, abych vyřešil výpadek internetu. Povedlo se mi zajistit ještě jednu záložní linku, takže v případě výpadku se to přepne samo a nemsím nikam. Uff. To bude úleva :-))
LinMuck, WinFuck :-P
Petr Maleček avatar 29.9.2013 22:00 Petr Maleček | skóre: 29 | Plzeň - Bolevec
Rozbalit Rozbalit vše Re: Pomoc se scriptem - hlídání připojení k internetu
Skoro 2 minuty od prvního testování pingu. 2 minuty, než zjistil, že ping neprošel. Ačkoli timeout je nastaven na 1s.
LinMuck, WinFuck :-P

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.