On Tue, 25 Jul 2006, Tarhon-Onu Victor wrote:

Iti definesti o lista cu ip-uri pe care le incerci prin cei 4 ISP (pui rute statice catre acele IP-uri prin gw-urile de la fiecare ISP), le pinguiesti periodic, si infunctie de care merge si care nu faci ip route replace default via. Pe fiecare dintre interfete ai SNAT -o interfata_cu_pricina cum vrei tu.

Le-ai putea pune intr-un vector in bash in ordinea preferintei. Ceva de genul:

#!/bin/bash
lista_isp=('IP1' 'IP2' 'IP3' 'IP4');
# unde IPn is default gw-urile.

lista_ip_mon=('M1' 'M2' 'M3' 'M4');
# lista cu ip-urile de monitorizat

check_list=(0 0 0 0);
# presupunem ca toti sint ok

i=0;

# asta ar trebui facuta doar o singura data
while [ -n "${lista_isp[$i]}" ]; do
        ip route add ${lista_ip_mon[$i]}/32 via ${lista_isp[$i]};
        i=$[$i+1];
done;

# intr-un ciclu infinit
while /bin/true; do
        i=0;
        default_gw=$(ip route get 65.65.65.65 | grep via | awk '{print $3}');
        p_gw=-1; # pozitie gw in array
        while [ -n "${lista_isp[$i]}" ]; do
                ping -c 10 -w 4 -i 0.2 -n -q ${lista_ip_mon[$i]} 1>/dev/null 
2>&1;
                retval=$?;
                ${check_list[$i]}=$retval;
                i=$[$i+1];
                if [ "${lista_isp[$i]}" == "$default_gw" ]; then
                        p_gw=$i;
                fi;
        done;
        # in momentul asta stim care dintre ip-uri e ok si care nu.
        # de asemenea daca ip-ul de monitorizat prin default gw e down
        # atunci stim si pozitia default gw-ului in array

        [ "$p_gw" -eq "-1" ] && continue;
        # sarim mai departe daca conexiunea actuala e ok

        # acuma, cautam urmatoarea conexiune convenabila
        i=0;
        while [ -n "${lista_isp[$i]}" ]; do
                [ ${check_list[$i]} -eq 0 -a $i -ne $p_gw ] && break;
                i=$[$i+1];
        done;

        # daca a gasit ceva ok atunci ajungem aici
        # err, de fapt si daca nu a gasit nimic tot aici sintem, ceea ce e 
nasol.

        echo ip route replace default via ${lista_isp[$i]};
        ip route replace default via ${lista_isp[$i]};
done;

Cam asta e ideea. Daca am gresit ceva in codul de mai sus (sintaxa sau conceptie) sau daca exista meseriasi in bash pe lista care cred ca e ceva scris aiurea sau neoptim sincer nu imi pasa (veniti cu corecturile de rigoare eventual). E scris direct in pine fara sa fie testat, dar ideea ar trebui sa fie buna. De asemenea daca cineva nu intelege ceva din script sa se uite in manualul de la bash sa vada exact ce face fiecare treaba, ca nici timp sa comentez scriptul nu am.

        Bafta.

--
Any views or opinions presented within this e-mail are solely those of
the author and do not necessarily represent those of any company, unless
otherwise expressly stated.

_______________________________________________
RLUG mailing list
[email protected]
http://lists.lug.ro/mailman/listinfo/rlug

Raspunde prin e-mail lui