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
> > [email protected]
> > http://lists.lug.ro/mailman/listinfo/rlug
> >
>
>
>
> --
> Cristian Ionescu
> [EMAIL PROTECTED]
> www.xplozia.ro
> _______________________________________________
> RLUG mailing list
> [email protected]
> http://lists.lug.ro/mailman/listinfo/rlug
>
_______________________________________________
RLUG mailing list
[email protected]
http://lists.lug.ro/mailman/listinfo/rlug