Welcome, Guest. Please login or register.
+  Linux Soft Forum
|-+  Cercetează» Reţele, servere» Gateway cu load balancing
[Picture 161] [Picture 160] [Picture 159]
Username:
Password:
 
Pages: [1]   Go Down
  Print  
Author Topic: Gateway cu load balancing  (Read 1779 times)
0 Members and 1 Guest are viewing this topic.
foxbymariuss
Membru
*

« on: November 18, 2007, 02:42:16 PM »

Salutare !

Am si eu o problema pe care o voi descrie mai jos. Daca ma puteti ajuta in rezolvarea ei voi fi recunoscator. So:

Am reteaua unei firme a carei activitate e foarte dependenta de internet. Ca urmare, s-a hotarat contractarea net-ului de la 2 ISP-isti. Eu trebuie sa fac un Gateway care sa ofere net (prin NAT) retelei locale, gateway care sa faca load balancing intre cei 2 ISP-isti si, cel mai important, in momentul cand conexiunea cu un ISP pica tot traficul sa fie routat prin cealalta conexiune, care inca mai merge.
Am citit documentatia de la IP route si am gasit ceva. Totusi, pe un alt forum am primit avertismente ca solutii de genul:
ip route add default nexthop via ISP1 weight 1 nexthop via ISP2 weight 1
imi fac fac probleme cu clientii care tin foarte mult timp conexiuni deschise.

Plus ca inca nu stiu cum sa fac ca atunci cand cade o conexiune sa se routeze tot traficul prin cealalta...
Aveti vreo solutie ?


Multumesc anticipat.
Logged
gheorghe
Veteran
**


« Reply #1 on: November 18, 2007, 04:11:54 PM »

Solutia ideala este sa ai bgp cu cei 2 provideri, daca firma isi permite, si daca gasesti ispii care sa sa iti ofere sesiune bgp cu ei.

Daca nu, poti sa faci ceva si cu rutele, dar este mai mult un hack destul de urat dupa parerea mea.

Prima problema este cum sa detectezi daca a picat o legatura, nu poti sa te bazezi pe linkul in placa de retea, deci singurul mod este sa dai ping la ceva, de exemplu google sau yahoo dintr-un cron si daca nu ai raspuns sa modifici rutele. Nu e bine sa dai ping la gateway-ul isp-ului pentru ca gateway-ul poate sa mearga dar isp-ul sa aiba toate legaturile la internet picate.

Daca faci load balancing si iti pica o legatura, cum iti dai seama care a picat? Cred ca exista o modalitate sa trimiti ping la google sau ceva prin care legatura vrei, dar nu m-am obosit sa aflu cum. Oricum load balancingul nu cred ca ajuta foarte mult performanta si iti face setupul mult mai complex si cu sanse mai multe sa se strice subit.

Deci cred ca cel mai castigat iesi cu o configuratie failover. Ai putea sa pui 2 rute, una catre un gateway, una catre celalalt, cu greutati diferite, deci pachetele vor fi rutate numai printr-o ruta, un script in cron care da ping la google si daca nu primeste raspuns schimba greutatile rutelor intre ele. Chiar am facut un astfel de setup si a functionat binisor.

O problema pe care am observat-o si care ar putea sa te afecteze este ca daca pica o legatura, inca mai ramane ruta catre subnetul respectiv si daca este picata de tot conexiunea catre ispul respectiv, nu o sa poti sa ajungi la o masina de acolo. Ai putea sa pui scriptul sa-ti stearga si ruta respectiva, si pachetele ar putea ajunge prin ruta default catre celalalt isp, dar il face mai complex, ca trebuie sa verifici mai multe chestii.

Logged
wonder
Veteran
**


WWW
« Reply #2 on: November 18, 2007, 04:38:27 PM »

setezi cele doua gw default dar cu distante administrative diferite, distanta cea mai mica avand prioritate si atunci cand pica se comuta pe cealalta AUTOMAT
faza e ca nu stiu cum sa setez distanta administrativa din route(cred ca nici nu se poate) ci doar cu ip route.
http://www.mikrotik.com/testdocs/ros/2.9/ip/route.php
este disponibil in iproute2
« Last Edit: November 18, 2007, 04:41:43 PM by wonder » Logged

Give what you have. To someone, it may be better than you dare to think.
My blog wonder.rodp.net
gheorghe
Veteran
**


« Reply #3 on: November 18, 2007, 05:45:56 PM »

iproute2 nu face nici un fel de verificare a starii conexiunii, trebuie sa faci un script pentru asta.
Logged
wonder
Veteran
**


WWW
« Reply #4 on: November 18, 2007, 06:08:40 PM »

Code:
[root@anaconda wonder]# ip route add 0.0.0.0/0 via 192.168.0.1 tos 0
[root@anaconda wonder]# ip route
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.2
169.254.0.0/16 dev eth0  scope link
default via 192.168.0.1 dev eth0
[root@anaconda wonder]# ip route add 0.0.0.0/0 via 192.168.0.2 tos 1
[root@anaconda wonder]# ip route
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.2
169.254.0.0/16 dev eth0  scope link
default tos 0x01 via 192.168.0.2 dev eth0
default via 192.168.0.1 dev eth0
[root@anaconda wonder]# ping google.ro
PING google.ro (216.239.59.104) 56(84) bytes of data.
64 bytes from 216.239.59.104: icmp_seq=1 ttl=240 time=77.1 ms
64 bytes from 216.239.59.104: icmp_seq=2 ttl=240 time=74.7 ms
64 bytes from 216.239.59.104: icmp_seq=3 ttl=240 time=69.3 ms

--- google.ro ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 69.302/73.712/77.116/3.276 ms
[root@anaconda wonder]# traceroute 193.230.222.1
traceroute to 193.230.222.1 (193.230.222.1), 30 hops max, 40 byte packets
 1  naboo (192.168.0.1)  0.253 ms  0.158 ms  0.132 ms
 2  gw2.hotnet.ro (85.204.119.1)  44.353 ms  21.624 ms  16.752 ms
 3  sv1.hotnet.ro (89.40.65.1)  15.005 ms  0.929 ms  0.521 ms
 4  cr1.bucharest.vipnet.ro (89.18.3.41)  5.195 ms  22.510 ms  12.360 ms
 5  xr.bucharest.vipnet.ro (89.18.2.2)  7.761 ms  3.025 ms  3.492 ms
 6  Combridge.RoNIX.Ro (217.156.113.26)  2.954 ms  39.316 ms  46.466 ms
 7  g1-26.me6k-temesvar.ro.net.telekom.hu (84.1.81.9)  52.962 ms  53.370 ms  36.504 ms
 8  g1-25.me6k-drobeta.ro.net.telekom.hu (84.1.81.18)  35.428 ms  21.649 ms  18.105 ms
 9  ce-expertcomputer.ro.net.telekom.hu (84.1.226.42)  51.452 ms  17.486 ms  14.910 ms
10  pathfinder.expert.ro (193.230.222.1)  15.838 ms  16.855 ms  17.596 ms
[root@anaconda wonder]# traceroute 193.230.222.1
traceroute to 193.230.222.1 (193.230.222.1), 30 hops max, 40 byte packets
 1  * *
[root@anaconda wonder]# traceroute 193.230.222.1
traceroute to 193.230.222.1 (193.230.222.1), 30 hops max, 40 byte packets
 1  anaconda (192.168.0.2)  105.513 ms !H  3003.049 ms !H

no scripts & stuff like ping Smiley
linkul ala nu prea e de mare ajutor. cel putin in versiunea pe care o aveam eu nu erau disponibile comenzilea acelea. man ip

EDIT:
e cam de cacat:) nu stiu daca merge in toate "dezastrele"
« Last Edit: November 18, 2007, 09:27:47 PM by wonder » Logged

Give what you have. To someone, it may be better than you dare to think.
My blog wonder.rodp.net
foxbymariuss
Membru
*

« Reply #5 on: November 27, 2007, 08:02:50 PM »

ok...
Multumesc pentru sfaturi.
Totusi... mai am o problema - cele doua conexiuni sunt destul de mici ca banda... adica una are un mega, celalalta 512 k(in zona respectiva nu exista infrastructura de fibra optica si banda mai larga nu am putut obtine).
Din acest motiv, as dori ca in timpul in care ambele conexiuni sunt functionale, sa le folosesc pe amandoua pentru a "scoate" clientii pe net, adica sa am permanent 1Mb+512K banda, iar cand una pica sa iasa toti prin cealalta.
O metoda prin care pot face asta cred ca este sa routez in functie de IP. Adica sa spun ca astea zece IP-uri sa se routeze prin conexiunea de 1 mega, iar celelalte 5 IP-uri sa iasa prin conexiunea de 512.
Totusi, metoda asta are dezavantajul ca nu folosesc intotdeauna toata bada (1 mega + 512k). Adica atunci cand niciunul din cei 5 clienti de pe conexiunea de 512 nu iese pe net, conexiunea este nefolosita, iar celorlalti 10 de pe conexiunea de 1 mega le merge la fel de prost (adica eu am o conexiune de 512 nefolosita).
Stiti vreo metoda prin care sa pot folosi tot timpul toata banda disponibila de la cei doi provideri, indiferent de IP-ul intern de la care vine clientul? (binenteles, imi doresc in continuare ca in momentul in care o conexiune pica sa fie toti routati prin cealalta, dar chestiunea asta a cam fost acoperita in raspunsurile de mai sus).

Multumesc anticipat.
Logged
gheorghe
Veteran
**


« Reply #6 on: November 27, 2007, 08:38:17 PM »

Nu stiu ce sa zic de load balancing, n-am facut niciodata si din cate stiu rutele oricum se cachuiesc deci s-ar putea sa nu fie chiar asa de eficient. Uite un script care teoretic ar trebui sa functioneze:

#!/bin/bash
 CURRENT_GW=`ip route show |grep default|awk '{print $3}'`
 ISP1_GW="gw_ISP1"
 ISP2_GW="gw_ISP2"
 
alive(){
         ping -c 1 -v $1|grep received|awk '{print $4}'
 }
 
if [ "`alive $ISP1_GW`" = "1" ];
    then
    if [ "$CURRENT_GW" == "$ISP2_GW" ];
    then
    route del default
    route add default gw $ISP1_GW
    ip route flush cache
    fi
elif [ "`alive $ISP2_GW`" = "1" ];
then
    if [ "$CURRENT_GW" == "$ISP1_GW" ];
    then
    route del default
    route add default gw $ISP2_G


Modificand scriptul asta ai putea sa faci ceva cu policy routing, de exemplu ai 10 calculatoare pe o conexiune si 5 pe alta, daca pica conexiunea cu cele 5 calculatoare (nu ai ping la gateway) sa schimbe regula iptables si sa marcheze pachetele astfel incat sa iasa prin cealalta conexiune.
Logged
Pages: [1]   Go Up
  Print  
 
Jump to: