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