lonely wolf wrote: >Eduard Gheorghiu wrote: > > > >>Revin cu o reformulare a problemei >>Am un LAN cu: >>- calculatorul LINUX >>- 2 routere cu IP-urile GW1 si GW2 >>LINUX are doua IP-uri pe aceeasi placa de retea, IP1 si IP2 >>GW1, GW2, IP1 si IP2 sunt in acelasi subnet. >>Pe LINUX am definit source-routing cu doua reguli si doua tabele de >>rutare T1 si T2 pentru aceste reguli. Tabelele contin rute default, astfel: >>sursa IP1 --- lookup T1 --- default via GW1 >>sursa IP2 --- lookup T2 --- default via GW2 >>Situatia e cumva anormala pentru ca exista o suprapunere de IP-uri in >>alte subnet-uri, care sunt dincolo de GW1 si GW2. >>Un client IPCA-IP1 care e dincolo de GW1, ajunge la IP1 prin GW1 iar >>intoarcerea trebuie sa se faca tot prin GW1; daca se face prin GW2 >>raspunsul ajunge la IPCB-IP1 (da, tot IP1). >>Intrucat nu pot elimina aceasta suprapunere de adrese, am recurs la >>varianta cu source-routing pe LINUX. Solutia merge perfect atunci cand >>sesiunile TCP sunt initiate din afara. >> >> >> >> >esti SIGUR ca nu poti elimina? nici macar facind un iptables DNAT pe >undeva ? eu de pilda evaluez in clipa asta cu foarte mult interes >optiunea "netmap" din patch-o-matic. >ca paranteza: problema mea este >- am 2 subneturi, aflate in locatii diferite (fie ele S1 si S2) >- una dintre locatii are 2 conexiuni la internet, pt redundanta >- openswan nu ma lasa sa am 2 tunele diferite intre aceleasi doua >subneturi, astfel incit nu pot defini 2 tunele S1 <-->Gw1.....GW_remote ><->S2 si S1 <-->Gw2.....GW_remote<->S2 >ceea ce vreau sa fac este ca S1 sa fie mapat automat de iptables intr-un >S3 de aceeasi dimensiune, si sa definesc al doilea tunel S3 ><-->Gw1.....GW_remote <->S2. > > > >>Problema e ca source-routing-ul nu functioneaza pentru sesiuni initiate >>de pe LINUX si pentru care nu specifica in bind() ce adresa sursa sa fie >>utilizata. Ca sa rezolv sunt nevoit sa pun in MAIN ruta catre GW1 dar >>asta inseamna ca nu pot initia conexiuni de pe LINUX decat catre IP-uri >>care sunt dincolo de GW1. >> >> >> >> >pai nu vad ce mecanism ar putea ghici in locul tau cu ce IP vrei sa iesi. >ai putea sa pui niste reguli de genul > ip rule to o_clasa_de_ip table T2 >dar asta ar presupune sa stii in avans adresele din spatele fiecarui >gateway. ceea ce din cite inteleg de la tine, nu iti convine >asa ca problema se pune simplu: care e algoritmul pe baza caruia decizi >cu ce IP iti doresti sa plece pachetele pt conexiuni initiate de linuxul >tau ? > > > >>Practic pot renunta la T1 si pot face source-routing doar pentru IP-2 >>iar daca vreau sa initiez conexiuni cu IP2 ca sursa, n-am decat sa caut >>aplicatii la care se poate specifica ip-ul sursa. >>In concluzie: >>- ip-ul default e cel primary >> >> >> >> >corect (cred) > > > >>- nu pot initia conexiuni cu ip default daca nu am rute in MAIN >> >> >> >> >aproape corect. nu poti intia conexiuni pt care nu ai ruta. daca vreuna >din tabele (nu neaparat main sau T1 sau T2) are o ruta default care sa >poata fi utilizata, e OK. > > > >>- daca o aplicatie trebuie sa plece cu ip-ul secondary, trebuie sa il >>dea ca parametru la bind(IP2) >> >> >> >> >in cazul tau, da > > > >>- trebuie sa fac source-routing doar pe IP2 (IP1 merge pe tabela MAIN) >>/lonely wolf/ ai dreptate, >> >> >> >nu am :) >eu intelesem ca ai un unic gateway. > > > >>problema nu poate fi rezolvata numai din rutare; fiind o situatie de situatie >>de suprapunere a ip-urilor, numai >>aplicatia poate sti la care din IPCA/B sa se conecteze, adica ce ip >>sursa trebuie sa foloseasca >> >> >> >cam asa pare. > >mai gindeste-te o data daca nu poti modifica/simplifica problema. poate >folosind tunele ( de pilda), sau un program de rutare dinamica prin care >sa specifici o anumita preferinta pt o ruta sau alta. >repet: gindeste-te intii care e algoritmul de selectie a rutei/ip-ului sursa > > > > cred ca din toate astea am inteles cum se face selectia ip-ului sursa; rutarea efectiva o decide tabela de rutare la pct.1, ce urmeaza se pare ca nu era asa simplu pe cat mi-am imaginat ...
1. se afla gw din tabela de rutare pentru o anumita destinatie 2. se cauta o interfatza de iesire catre acel gw 3. daca interfatza are un singur IP, il foloseste, STOP 4. se cauta IP-uri dintre cele de pe interfatza care sa fie in acelasi subnet cu gw; daca e unul singur, il foloseste, STOP 5. se alege din lista de IP-uri de la 4, cel care este primary, STOP din pacate singurul sistem a carui configuratie pot s-o modific este cel in cauza (LINUX), decizia in privinta IP-ului sursa folosit (altul decat default) va trebui luata de aplicatie... --- Detalii despre listele noastre de mail: http://www.lug.ro/
