Am reushit sa simplific programul.
Are in el numai partea de NAT.... Am pus-o in el ca sa vezi cum trebuie
facuta. O mutzi in firewall.

La firewall nu stiu.... aveam unul care mergea numai pentru un GW
Probabil o sa incerc sa fac FireweallGW1 shi FirewallGW2
Shi sa le pornesc in functzie de situatzie.

Asta e programu (afisheaza shi pe monitor starea - am scos partea in care
face pagina HTML)
cine are comentarii shi corectari de facut e binevenit (la cat linux stiu eu
atata am reushit sa fac....):

#!/bin/bash

#pierderi maxime
maxloss=40

#setari ping
c=6
w=10
i=1
pauza=50

#nr. schimbari ruta si firewall restart
sg1=0
sg2=0
teste=0
schimb=0
fr=0
ib=0

# interfata externa
UPLINK1="eth0"
UPLINK2="ppp0"

# adresa serverului pt. nat
NAT1="...."
NAT2=$(ifconfig ppp0 | grep "inet addr" | gawk -F: '{print $2}' | gawk
'{print $1}') #Iau IP-ul de la PPPoE

# GW
GW1="...."
GW2=$(ifconfig ppp0 | grep "inet addr" | gawk -F: '{print $2}' | gawk
'{print $1}') #La PPPoE-ul meu GW-ul este la fel ca IP-ul

# IP-uri pt. test
T1="193.231.236.10"  #KFnet
T2="194.153.232.1"  #Ialnet

# interfetele sistemului
INTERFACES="lo eth0 eth1 ppp0"

# adresele locale pe care se face NAT
SMECHERZ="192.168.0.0/255.255.255.0 10.0.157.2/255.255.255.255
10.0.157.3/255.255.255.255 10.0.157.4/255.255.255.255
10.0.157.5/255.255.255.255"


retval1=100
retval2=100

route del default
route add default gw $GW1

#Adaug rute shi fac nat cate IP-urile de test.
route add -host $T1 gw $GW1
route add -host $T2 gw $GW2
for s in ${SMECHERZ}
do
   iptables -t nat -A POSTROUTING -s ${s} -d $T1/255.255.255.255 -j SNAT
--to $NAT1
   iptables -t nat -A POSTROUTING -s ${s} -d $T2/255.255.255.255 -j SNAT
--to $NAT2
done

#Se face NAT
   for s in ${SMECHERZ}
   do
   iptables -t nat -A POSTROUTING -o ${UPLINK2} -s ${s} -j SNAT --to-source
${NAT2}
   iptables -t nat -A POSTROUTING -o ${UPLINK1} -s ${s} -j SNAT --to-source
${NAT1}
   done


while /bin/true; do


   #verific daca nu e gw-ul lipsa. Daca este lipsa inseamna ca a cazut
PPPoE-ul shi urc din nou PPPoE-ul
   dg=$(ip route | grep default | gawk {'print $3'}) #iau valoarea
implicita de la gw
   if [ "$dg" = "" ]; then
   let schimb=$schimb+1
   let sg1=$sg1+1
   /sbin/ifup ppp0
   NAT2=$(ifconfig ppp0 | grep "inet addr" | gawk -F: '{print $2}' | gawk
'{print $1}')
   GW2=$(ifconfig ppp0 | grep "inet addr" | gawk -F: '{print $2}' | gawk
'{print $1}')
   route add -host $T2 gw $GW2
   route add default gw $GW1
   dg=$(ip route | grep default | gawk {'print $3'})
   fi;

   #Fac testele
   retval1=$(ping -c $c -w $w -i $i -n -q ${T1} 2>/dev/null | grep loss |
cut -d\, -f 3 | cut -d\% -f1);
   retval2=$(ping -c $c -w $w -i $i -n -q ${T2} 2>/dev/null | grep loss |
cut -d\, -f 3 | cut -d\% -f1);

   #in cazul in care retval = +X errors
   if [ $retval1 -lt 100 ] && [ $retval1 -ge 0 ] ; then
   echo
   else
   retval1=100;
   fi;
   if [ $retval2 -lt 100 ] && [ $retval2 -ge 0 ] ; then
   echo
   else
   retval2=100;
   fi;

   #UpLink1
   if [ $retval1 -lt $maxloss ]; then
   if [ $dg != $GW1 ]; then
       let schimb=$schimb+1
       let sg1=$sg1+1
          route del default
       route add default gw $GW1 dev $UPLINK1
   else
       let ib=$ib+1;
   fi;
       while [ $retval1 -lt $maxloss ] && [ $dg = $GW1 ]; do
       clear
       echo Conexiunea 1 activa
       ifconfig $UPLINK1
       echo Adresa GW - $dg
       echo Nr. pachete de ping-uri - $teste
       echo Nr. schimbarilor de GW - Total: $schimb , GW1: $sg1 , GW2: $sg2
       echo Nr. iesirilor din bucla de teste - $ib
       echo Nr. de restarturi ale firewall-ului - $fr
       echo
       echo Pierderi UpLink1 - $retval1
       echo Pierderi UpLink2 - $retval2
       echo
       date
       uptime

       #verific daca nu e gw-ul lipsa. Daca este lipsa inseamna ca a cazut
PPPoE-ul shi urc din nou PPPoE-ul
       dg=$(ip route | grep default | gawk {'print $3'}) #iau valoarea
implicita de la gw
       if [ "$dg" = "" ]; then
       let schimb=$schimb+1
       let sg1=$sg1+1
       /sbin/ifup ppp0
       NAT2=$(ifconfig ppp0 | grep "inet addr" | gawk -F: '{print $2}' |
gawk '{print $1}')
       GW2=$(ifconfig ppp0 | grep "inet addr" | gawk -F: '{print $2}' |
gawk '{print $1}')
       route add -host $T2 gw $GW2
       route add default gw $GW1
       dg=$(ip route | grep default | gawk {'print $3'})
       fi;

       retval1=$(ping -c $c -w $w -i $i -n -q ${T1} 2>/dev/null | grep loss
| cut -d\, -f 3 | cut -d\% -f1);
       retval2=$(ping -c $c -w $w -i $i -n -q ${T2} 2>/dev/null | grep loss
| cut -d\, -f 3 | cut -d\% -f1);
       let teste=$teste+1
       sleep $pauza;

       #in cazul in care retval = +X errors
       if [ $retval1 -lt 100 ] && [ $retval1 -ge 0 ] ; then
       echo
       else
       retval1=100;
       fi;
       if [ $retval2 -lt 100 ] && [ $retval2 -ge 0 ] ; then
       echo
       else
       retval2=100;
       fi;
       #

       done;

   #UpLink2
   elif [ $retval2 -lt $maxloss ]; then
   if [ $dg != $GW2 ]; then
       let schimb=$schimb+1
       let sg2=$sg2+1
          route del default
       route add default gw $GW2 dev $UPLINK2
   else
       let ib=$ib+1;
   fi;
       while [ $retval1 -gt $maxloss ] && [ $retval2 -lt $maxloss ] && [
$dg = $GW2 ]; do
       clear
       echo Conexiunea 2 activa
       ifconfig $UPLINK2
       echo Adresa GW - $dg
       echo Nr. pachete de ping-uri - $teste
       echo Nr. schimbarilor de GW - Total: $schimb , GW1: $sg1 , GW2: $sg2
       echo Nr. iesirilor din bucla de teste - $ib
       echo Nr. de restarturi ale firewall-ului - $fr
       echo
       echo Pierderi UpLink1 - $retval1
       echo Pierderi UpLink2 - $retval2
       echo
       date
       uptime

       #verific daca nu e gw-ul lipsa. Daca este lipsa inseamna ca a cazut
PPPoE-ul shi urc din nou PPPoE-ul
       dg=$(ip route | grep default | gawk {'print $3'}) #iau valoarea
implicita de la gw
       if [ "$dg" = "" ]; then
       let schimb=$schimb+1
       let sg1=$sg1+1
       /sbin/ifup ppp0
       NAT2=$(ifconfig ppp0 | grep "inet addr" | gawk -F: '{print $2}' |
gawk '{print $1}')
       GW2=$(ifconfig ppp0 | grep "inet addr" | gawk -F: '{print $2}' |
gawk '{print $1}')
       route add -host $T2 gw $GW2
       route add default gw $GW1
       dg=$(ip route | grep default | gawk {'print $3'})
       fi;

       retval1=$(ping -c $c -w $w -i $i -n -q ${T1} 2>/dev/null | grep loss
| cut -d\, -f 3 | cut -d\% -f1);
       retval2=$(ping -c $c -w $w -i $i -n -q ${T2} 2>/dev/null | grep loss
| cut -d\, -f 3 | cut -d\% -f1);
       let teste=$teste+1
       sleep $pauza;

       #in cazul in care retval = +X errors
       if [ $retval1 -lt 100 ] && [ $retval1 -ge 0 ] ; then
       echo
       else
       retval1=100;
       fi;
       if [ $retval2 -lt 100 ] && [ $retval2 -ge 0 ] ; then
       echo
       else
       retval2=100;
       fi;
       #

       done;

   #Firewall restart - in cazul in care ambele conexiuni sunt cazute
       else
   clear
   echo Se reseteaza pacile de retea si firewall-ul
   let fr=$fr+1
   service network restart
   /etc/rc.d/firewall restart
   NAT2=$(ifconfig ppp0 | grep "inet addr" | gawk -F: '{print $2}' | gawk
'{print $1}')
   GW2=$(ifconfig ppp0 | grep "inet addr" | gawk -F: '{print $2}' | gawk
'{print $1}')
   route del default
   route add default gw $GW1 dev $UPLINK1
   route add -host $T2 gw $GW2
   dg=$(ip route | grep default | gawk {'print $3'})
   fi;
done;


În data de 23.03.2007, Laurentiu STEFAN <[EMAIL PROTECTED]> a
scris:

OKa O sa incer sa il iau pe al meu la periat.....
(al meu afisheaza shi pe monitor shi face shi pagina WWW cu situatzia
actuala)
E cam maricel ca e integrat in firewall.

Pingurile le dau in ns-urile isp-urilor shi are o limita de 40% pierderi
peste care schimba ruta.
Trebuie sa gasesti un IP care sa nu fie afectat prea mult daca tu ai
trafic mare....
Problema mai apare daca pica legatura ISP-ului cu internetul (daca dau
pinguri in reteaua isp-ului nu sezizeaza asta)

Zilele astea o sa incerc sa il simplific nitel shi sa ii trec explicatzii
shi o sa il pun aici.

La partea de firewall lasa de dorit... nu am reushit sa ii fac un firewall
sa mearga pe el.



În data de 20.03.2007, Cristian Ionescu < [EMAIL PROTECTED]> a scris:
>
> Potin incerca  sa bagi in cron cele de mai jos:
> Crezi ca poti sa ma ajuti sa fac si eu un script ca cel pe care il ai
> tu? Am
> aceeasi configuratie ca si tine internet 1 cu ip static, internet 2 pe
> ppoe
> de la romtelecom cu ip static si lan pe un fedora 3. Eu folosesc
> scriptul de
> mai jos pentru a schimba default gw in cazul in care pica netul de la
> internet 1.
> Ti-as fi foarte recunoscator daca m-ai ajuta
>
> #!/bin/bash
>
> GATEWAY1="xxx.xxx.xxx.xxx"
>
> GATEWAY2=" yyy.yyy.yyy.yyy"
>
> rez=`ping -c 2 $GATEWAY1 | grep icmp_seq`
>
> if [ -z "$rez" ]; then
>
> /sbin/route del default gw $GATEWAY1
>
> /sbin/route add default gw $GATEWAY2
>
> fi
>
>
>
> În data de 20.03.2007, Laurentiu STEFAN <[EMAIL PROTECTED]> a
> scris:
> >
> > Un server cu 3 placi de retzea.
> > 1-conexiune cu IP static
> > 2-conexiune PPPoE (back-up)
> > 3-LAN
> >
> > Am facut un programel care verifica conexiunile shi in momentu in care
> una
> > pica se muta pe celalalt....
> > Problema apare cand.... se deconecteaza PPPoE-ul (din diverse motive
> > externe
> > serverului)
> > Atunci sterge shi ruta implicita.
> >
> > Am incercat fel shi fel de combinatzii.... sa il determin sa ia ruta
> > implicita de la GW1....
> >
> > Nu mi-a ieshit.
> >
> > Varianta 1)
> >
> >    dg=$(ip route | grep default | gawk {'print $3'})
> >    if [ $dg = "" ]; then
> >    route add default gw $GW1
> >    fi;
> >
> > da eroare la if....
> >
> > Varianta 2)
> >
> >    dg=$(ip route | grep default | gawk {'print $3'})
> >    if [ $dg != $GW1 ] && [ $dg != $GW2 ]; then
> >    route add default gw $GW1
> >    fi;
> >
> > nu zice shi nici nu face nimic aici.
> >
> > Va multzumesc anticipat.
> > _______________________________________________
> > RLUG mailing list
> > RLUG@lists.lug.ro
> > http://lists.lug.ro/mailman/listinfo/rlug
> >
>
>
>
> --
> Cristian Ionescu
> [EMAIL PROTECTED]
> www.xplozia.ro
> _______________________________________________
> RLUG mailing list
> RLUG@lists.lug.ro
> http://lists.lug.ro/mailman/listinfo/rlug
>


_______________________________________________
RLUG mailing list
RLUG@lists.lug.ro
http://lists.lug.ro/mailman/listinfo/rlug

Raspunde prin e-mail lui