Din scrisorile către serviciul de suport tehnic Tucha se nasc adevărate articole. Recent, un client ne-a contactat pentru a solicita explicații despre ce se întâmplă în cadrul conexiunilor din interiorul tunelului VPN între biroul utilizatorului și mediu în cloud, precum și în cazul conexiunilor în afara tunelului VPN. Așadar, întregul text de mai jos este o scrisoare reală pe care am trimis-o unui client ca răspuns la întrebarea sa. Desigur, am schimbat adresele IP pentru a nu deanonimiza clientul. Dar, da, serviciul de suport tehnic Tucha este cunoscut pentru răspunsurile sale detaliate și scrisorile informative. 🙂
Desigur, înțelegem că pentru mulți aceasta nu va fi o revelație. Dar, întrucât pe Habr apar din când în când articole pentru administratori începători și având în vedere că acest articol a apărut dintr-o scrisoare reală adresată unui client real, ne va face plăcere să împărtășim aceste informații și aici. Există o probabilitate mare ca aceste informații să fie utile cuiva.
De aceea, explicăm în detaliu ce se întâmplă între serverul din cloud și birou, dacă acestea sunt unite printr-o rețea site-to-site. Menționăm că, în acest caz, unele servicii sunt disponibile doar din birou, iar altele - din orice loc de pe internet.
Imediat vom explica că clientul nostru a dorit ca pe serverul 192.168.A.1 să se poată conecta de oriunde prin RDP, accesând A.A.A.2:13389, iar celelalte servicii - doar din birou (192.168.B.0/24), conectat prin VPN. De asemenea, clientul a configurat inițial așa încât pentru mașina 192.168.B.2 din birou să se poată conecta de oriunde prin RDP, accesând B.B.B.1:11111. Am ajutat la organizarea conexiunilor IPSec între cloud și birou, iar specialistul IT al clientului a început să pună întrebări despre ce se va întâmpla în fiecare caz. Pentru a răspunde la toate aceste întrebări, am scris, de fapt, tot ceea ce puteți citi mai jos.

Acum, să examinăm aceste procese mai în detaliu.
Poziția prima
Când ceva este trimis din 192.168.B.0/24 în 192.168.A.0/24 sau din 192.168.A.0/24 în 192.168.B.0/24, acesta intră în VPN. Adică, acest pachet este suplimentar criptat și transmis între B.B.B.1 și A.A.A.1, dar 192.168.A.1 vede pachetul tocmai de la 192.168.B.1. Ele pot comunica între ele prin orice protocoale. Răspunsurile invers sunt transmise la fel prin VPN, ceea ce înseamnă că pachetul din 192.168.A.1 pentru 192.168.B.1 va fi trimis ca un datagram ESP din A.A.A.1 pe B.B.B.1, pe care routerul de cealaltă parte o va desfășura, va extrage acel pachet și îl va returna la 192.168.B.1 ca pachet de la 192.168.A.1.
Un exemplu concret:
1) 192.168.B.1 se adresează 192.168.A.1, dorește să stabilească o conexiune TCP cu 192.168.A.1:3389;
2) 192.168.B.1 trimite o solicitare pentru stabilirea conexiunii de la 192.168.B.1:55555 (numărul portului pentru feedback este ales de el, aici și mai departe vom folosi numărul 55555 ca exemplu de număr de port pe care sistemul îl alege în formarea conexiunii TCP) la 192.168.A.1:3389;
3) sistemul de operare care funcționează pe computerul cu adresa 192.168.B.1, decide să transmită acest pachet la adresa gateway a routerului (192.168.B.254 în cazul nostru), deoarece nu există rute mai specifice pentru 192.168.A.1, aceasta trece pachetul pe ruta implicită (0.0.0.0/0);
4) pentru asta, încearcă să găsească adresa MAC pentru adresa IP 192.168.B.254 în tabela de cache a protocolului ARP. Dacă nu este găsită, trimite de la 192.168.B.1 o solicitare broadcaст who-has rețelei 192.168.B.0/24. Când 192.168.B.254 în răspuns trimite adresa sa MAC, sistemul trimite pachetul Ethernet pentru ea și salvează această informație în tabela sa de cache;
5) routerul primește acest pachet și decide unde să-l trimită: are o politică conform căreia trebuie să transmită toate pachetele între 192.168.B.0/24 și 192.168.A.0/24 printr-o conexiune VPN între B.B.B.1 și A.A.A.1;
6) routerul formează un datagram ESP de la B.B.B.1 pe A.A.A.1;
7) routerul decide cui să transmită acest pachet, îl trimite către, să zicem, B.B.B.254 (gateway-ul providerului de internet), deoarece nu are rute mai specifice către A.A.A.1, decât 0.0.0.0/0;
8) exact la fel cum s-a spus deja, el găsește adresa MAC pentru B.B.B.254 și transmite pachetul către gateway-ul providerului de internet;
9) providerii de internet transmit prin rețelele lor datagramul ESP de la B.B.B.1 pe A.A.A.1;
10) routerul virtual de pe A.A.A.1 primește această datagramă, o decriptează și obține pachetul de la 192.168.B.1:55555 pentru 192.168.A.1:3389;
11) routerul virtual verifică cui să-l transmită, găsește rețeaua în tabela de rutare 192.168.A.0/24 și îl trimite direct la 192.168.A.1, deoarece are un interfață 192.168.A.254/24;
12) pentru asta routerul virtual găsește adresa MAC pentru 192.168.A.1 și îi transmite acest pachet prin rețeaua Ethernet virtuală;
13) 192.168.A.1 primește acest pachet pe portul 3389, este de acord să stabilească o conexiune și formează un pachet în răspuns de la 192.168.A.1:3389 pe 192.168.B.1:55555;
14) sistemul său trimite acest pachet la adresa gateway a routerului virtual (192.168.A.254 în cazul nostru), deoarece nu există rute mai specifice pentru 192.168.B.1, ea nu are, prin urmare, trebuie să transmită pachetul pe ruta implicită (0.0.0.0/0);
15) la fel ca în cazurile anterioare, sistemul care funcționează pe serverul cu adresa 192.168.A.1, găsește adresa MAC 192.168.A.254, deoarece acesta se află în aceeași rețea cu interfața sa 192.168.A.1/24;
16) routerul virtual primește acest pachet și decide unde să-l transmită: are o politică conform căreia trebuie să trimită toate pachetele între 192.168.A.0/24 și 192.168.B.0/24 printr-o conexiune VPN între A.A.A.1 și B.B.B.1;
17) routerul virtual formează un datagram ESP de la A.A.A.1 pentru B.B.B.1;
18) routerul virtual decide cui să transmită acest pachet, îl trimite către A.A.A.254 (gateway-ul furnizorului de internet, în acest caz, suntem tot noi), deoarece nu există rute mai specifice către B.B.B.1, decât 0.0.0.0/0;
19) furnizorii de internet transmit peste rețelele lor datagrama ESP cu A.A.A.1 pe B.B.B.1;
20) routerul pe B.B.B.1 primește această datagramă, o decriptează și obține pachetul de la 192.168.A.1:3389 pentru 192.168.B.1:55555;
21) el înțelege că trebuie să fie transmis exact către 192.168.B.1, deoarece acesta se află în aceeași rețea, prin urmare, are o înregistrare corespunzătoare în tabela de rutare, care îl determină să trimită pachetele pentru întreaga 192.168.B.0/24 direct;
22) routerul găsește adresa MAC pentru 192.168.B.1 și îi transmite acest pachet;
23) sistemul de operare de pe computerul cu adresa 192.168.B.1 primește pachetul de la 192.168.A.1:3389 pentru 192.168.B.1:55555 și inițiază pașii următori pentru stabilirea unei conexiuni TCP.
În acest exemplu, a fost descris succint și simplificat (și aici se pot aminti multe detalii) ce se întâmplă la nivelurile 2-4. Nivelurile 1, 5-7 nu sunt discutate.
Poziția a doua
Dacă cu 192.168.B.0/24 se trimite ceva exact către A.A.A.2, acesta nu merge în VPN, ci direct. Asta înseamnă că dacă utilizatorul cu adresa 192.168.B.1 se adresează A.A.A.2:13389, acest pachet provine de la adresa B.B.B.1, trece pe la A.A.A.2, iar acolo routerul îl primește și îl transmite către 192.168.A.1. 192.168.A.1 nu știe nimic despre 192.168.B.1, el vede pachetul de la B.B.B.1, deoarece acesta l-a inițiat. Prin urmare, răspunsul la această solicitare merge pe ruta generală, el provine tot de la adresa A.A.A.2 și merge către B.B.B.1, iar acel router returnează răspunsul la 192.168.B.1, acesta vede răspunsul de la A.A.A.2, către care s-a adresat.
Un exemplu concret:
1) 192.168.B.1 se adresează A.A.A.2, dorește să stabilească o conexiune TCP cu A.A.A.2:13389;
2) 192.168.B.1 trimite o solicitare pentru stabilirea conexiunii de la 192.168.B.1:55555 (această număr, la fel ca în exemplul anterior, poate fi altul) către A.A.A.2:13389;
3) sistemul de operare care funcționează pe computerul cu adresa 192.168.B.1, decide să transmită acest pachet la adresa gateway a routerului (192.168.B.254 în cazul nostru), deoarece nu există rute mai specifice pentru A.A.A.2, ea nu are, așa că transmite pachetul pe ruta implicită (0.0.0.0/0);
4) pentru aceasta, așa cum am menționat în exemplul anterior, încearcă să găsească adresa MAC pentru adresa IP 192.168.B.254 în tabela de cache a protocolului ARP. Dacă nu este găsită, trimite de la 192.168.B.1 o solicitare broadcaст who-has rețelei 192.168.B.0/24. Când 192.168.B.254 în răspuns trimite adresa sa MAC, sistemul trimite pachetul Ethernet pentru ea și salvează această informație în tabela sa de cache;
5) routerul primește acest pachet și decide unde să-l transmită: are o politică conform căreia trebuie să trimită (înlocuind adresa de întoarcere) toate pachetele de la 192.168.B.0/24 către alte noduri ale rețelei Internet;
6) deoarece această politică preconizează că adresa de răspuns trebuie să coincidă cu adresa inferioară de pe interfața prin care va fi transmis acest pachet, routerul determină mai întâi cui să transmită acest pachet, iar el, la fel ca în exemplul anterior, trebuie să-l trimită către B.B.B.254 (gateway-ul providerului de internet), deoarece nu are rute mai specifice către A.A.A.2, decât 0.0.0.0/0;
7) prin urmare, routerul înlocuiește adresa de răspuns a pachetului, de acum înainte pachetul de la B.B.B.1:44444 (numărul portului poate fi, desigur, altul) pe A.A.A.2:13389;
8) routerul își amintește ce a făcut, așa că atunci când de la A.A.A.2:13389 la B.B.B.1:44444 va veni un răspuns, va ști că trebuie să schimbe adresa și portul destinatarului pe 192.168.B.1:55555.
9) acum routerul trebuie să-l transmită providerului de internet prin B.B.B.254, prin urmare, exact așa cum am menționat anterior, acesta găsește adresa MAC pentru B.B.B.254 și transmite pachetul către gateway-ul providerului de internet;
10) providerii de internet transmit pachetul prin rețelele lor de la B.B.B.1 pe A.A.A.2;
11) routerul virtual pe A.A.A.2 primește acest pachet pe portul 13389;
12) pe routerul virtual există o regulă care prevede că pachetele primite de la orice expeditor pe acest port trebuie să fie transmise către 192.168.A.1:3389;
13) routerul virtual găsește în tabela de rutare rețeaua 192.168.A.0/24 și îl trimite direct 192.168.A.1, deoarece are interfața 192.168.A.254/24;
14) pentru aceasta, routerul virtual găsește adresa MAC pentru 192.168.A.1 și îi transmite acest pachet prin rețeaua Ethernet virtuală;
15) 192.168.A.1 primește acest pachet pe portul 3389, este de acord să stabilească o conexiune și formează un pachet în răspuns de la 192.168.A.1:3389 pe B.B.B.1:44444;
16) sistemul său transmite acest pachet la adresa gateway a routerului virtual (192.168.A.254 în cazul nostru), deoarece nu există rute mai specifice pentru B.B.B.1, ea nu are, prin urmare, trebuie să transmită pachetul pe ruta implicită (0.0.0.0/0);
17) la fel ca în cazurile anterioare, sistemul care funcționează pe serverul cu adresa 192.168.A.1, găsește adresa MAC 192.168.A.254, deoarece acesta se află în aceeași rețea cu interfața sa 192.168.A.1/24;
18) routerul virtual primește acest pachet. Trebuie menționat că își amintește că a primit pe A.A.A.2:13389 pachet de la B.B.B.1:44444 și a schimbat adresa și portul destinatarului pe 192.168.A.1:3389, prin urmare, pachetului de la 192.168.A.1:3389 pentru B.B.B.1:44444 îi schimbă adresa expeditorului pe A.A.A.2:13389;
19) routerul virtual decide cui să transmită acest pachet, îl trimite către A.A.A.254 (gateway-ul furnizorului de internet, în acest caz, suntem tot noi), deoarece nu există rute mai specifice către B.B.B.1, decât 0.0.0.0/0;
20) providerii de internet transmit pachetul prin rețelele lor cu A.A.A.2 pe B.B.B.1;
21) routerul de pe B.B.B.1 primește acest pachet și își amintește că, atunci când a transmis pachetul de la 192.168.B.1:55555 pentru A.A.A.2:13389, a schimbat adresa și portul expeditorului pe B.B.B.1:44444, deci este un răspuns care trebuie transmis către 192.168.B.1:55555 (de fapt, acolo există încă câteva verificări, dar nu ne adâncim în asta);
22) își dă seama că trebuie să-l transmită direct către 192.168.B.1, deoarece acesta se află în aceeași rețea cu el, prin urmare, acesta are în tabela de rutare o înregistrare corespunzătoare care obligă la trimiterea pachetelor pentru tot 192.168.B.0/24 direct;
23) routerul găsește adresa MAC pentru 192.168.B.1 și îi transmite acest pachet;
24) sistemul de operare de pe computerul cu adresa 192.168.B.1 primește pachetul de la A.A.A.2:13389 pentru 192.168.B.1:55555 și inițiază pașii următori pentru stabilirea unei conexiuni TCP.
Este important de menționat că, în acest caz, computerul cu adresa 192.168.B.1 nu cunoaște serverul cu adresa 192.168.A.1, acesta comunică doar cu A.A.A.2. La fel, și serverul cu adresa 192.168.A.1 nu cunoaște computerul cu adresa 192.168.B.1. El consideră că s-a conectat de la adresa B.B.B.1, iar mai mult nu știe nimic, așa-zis.
De asemenea, este important de menționat că, în cazul în care acest computer se adresează A.A.A.2:1540, conexiunea nu va fi stabilită, deoarece redirecționarea conexiunilor pe portul 1540 nu este configurată pe routerul virtual, chiar dacă pe unele servere din rețeaua virtuală 192.168.A.0/24 (de exemplu, pe serverul cu adresa 192.168.A.1) există servicii care așteaptă conexiuni pe acest port. Dacă utilizatorului computerului cu adresa 192.168.B.1 ii este extrem de necesar să stabilească o conexiune cu acest serviciu, el trebuie să folosească VPN, adică să se adreseze direct la 192.168.A.1:1540.
Este important de subliniat că orice încercare de a stabili o conexiune cu A.A.A.1 (cu excepția conexiunii IPSec de partea B.B.B.1 nu va avea succes. Orice încercări de a stabili conexiuni cu A.A.A.2, cu excepția conexiunilor cu portul 13389, de asemenea nu vor avea succes.
De asemenea, să notăm că, în cazul în care cineva altcineva se adresează la A.A.A.2 tot ce este menționat în punctele 10-20 se va aplica și lui. Ce se întâmplă înainte și după depinde de ceea ce se află în spatele acestuia C.C.C.C. Nu avem această informație, așa că recomandăm să contactați administratorii nodului cu adresa C.C.C.C.
Poziția a treia
Și, invers, dacă de la 192.168.A.1 se trimite ceva către un port care este configurat pentru a redirecționa în interior către B.B.B.1 (de exemplu, 11111), acesta de asemenea nu ajunge în VPN, ci este pur și simplu redirecționat de la A.A.A.1 și ajunge în B.B.B.1, iar acesta deja îl trimite undeva, să zicem, 192.168.B.2:3389. Acesta vede acest pachet nu de la 192.168.A.1, ci de la A.A.A.1. Și, când 192.168.B.2 răspunde, pachetul vine de la B.B.B.1 pe A.A.A.1, iar mai târziu ajunge la inițiatorul conexiunii — 192.168.A.1.
Un exemplu concret:
1) 192.168.A.1 se adresează B.B.B.1, dorește să stabilească o conexiune TCP cu B.B.B.1:11111;
2) 192.168.A.1 trimite o solicitare pentru stabilirea conexiunii de la 192.168.A.1:55555 (această număr, la fel ca în exemplul anterior, poate fi altul) către B.B.B.1:11111;
3) sistemul de operare care funcționează pe serverul cu adresa 192.168.A.1, decide să transmită acest pachet la adresa gateway a routerului (192.168.A.254 în cazul nostru), deoarece nu există rute mai specifice pentru B.B.B.1, aceasta trece pachetul pe ruta implicită (0.0.0.0/0);
4) pentru aceasta, așa cum am menționat în exemplele anterioare, încearcă să găsească adresa MAC pentru IP-ul 192.168.A.254 în tabela de cache a protocolului ARP. Dacă nu este găsită, trimite de la 192.168.A.1 o solicitare broadcaст who-has rețelei 192.168.A.0/24. Când 192.168.A.254 în răspuns îi trimite adresa sa MAC, sistemul trimite un pachet Ethernet pentru el și introduce aceste informații în tabela sa de cache;
5) routerul virtual primește acest pachet și decide unde să-l transmită: el are o politică definită conform căreia trebuie să schimbe (înlocuind adresa de răspuns) toate pachetele de la 192.168.A.0/24 către alte noduri ale rețelei Internet;
6) deoarece această politică presupune că adresa de răspuns trebuie să se potrivească cu adresa superioară de pe interfața prin care va fi transmis acest pachet, routerul virtual decide mai întâi cui să transmită acest pachet, iar acesta, la fel ca în exemplul precedent, trebuie să-l trimită la A.A.A.254 (gateway-ul furnizorului de internet, în acest caz, suntem tot noi), deoarece nu există rute mai specifice către B.B.B.1, decât 0.0.0.0/0;
7) așadar, routerul virtual înlocuiește adresa de răspuns a pachetului, de acum acesta este un pachet de la A.A.A.1:44444 (numărul portului poate fi, desigur, altul) pe B.B.B.1:11111;
8) routerul virtual își amintește ce a făcut, prin urmare, când de la B.B.B.1:11111 pentru A.A.A.1:44444 va veni un răspuns, va ști că trebuie să schimbe adresa și portul destinatarului pe 192.168.A.1:55555.
9) acum routerul virtual trebuie să-l transmită în rețeaua furnizorului de internet prin A.A.A.254, așadar, exact așa cum am menționat anterior, el caută adresa MAC pentru A.A.A.254 și transmite pachetul către gateway-ul providerului de internet;
10) providerii de internet transmit pachetul prin rețelele lor de la A.A.A.1 pe B.B.B.1;
11) routerul pe B.B.B.1 primește acest pachet pe portul 11111;
12) pe routerul virtual există o regulă care prevede că pachetele care sosesc de la un anumit expeditor pe acest port trebuie transmise pe 192.168.B.2:3389;
13) routerul găsește în tabela de rutare rețeaua 192.168.B.0/24 și îl trimite direct la 192.168.B.2, deoarece are un interfață 192.168.B.254/24;
14) pentru aceasta, routerul virtual găsește adresa MAC pentru 192.168.B.2 și îi transmite acest pachet prin rețeaua Ethernet virtuală;
15) 192.168.B.2 primește acest pachet pe portul 3389, este de acord să stabilească o conexiune și formează un pachet în răspuns de la 192.168.B.2:3389 pe A.A.A.1:44444;
16) sistemul său trimite acest pachet către adresa de gateway a routerului (192.168.B.254 în cazul nostru), deoarece nu există rute mai specifice pentru A.A.A.1, ea nu are, prin urmare, trebuie să transmită pachetul pe ruta implicită (0.0.0.0/0);
17) la fel ca în cazurile anterioare, sistemul care funcționează pe computerul cu adresa 192.168.B.2, găsește adresa MAC 192.168.B.254, deoarece acesta se află în aceeași rețea cu interfața sa 192.168.B.2/24;
18) routerul primește acest pachet. Trebuie menționat că își amintește că a primit pe B.B.B.1:11111 pachet de la A.A.A.1 și a schimbat adresa și portul destinatarului pe 192.168.B.2:3389, prin urmare, pachetului de la 192.168.B.2:3389 pentru A.A.A.1:44444 îi schimbă adresa expeditorului pe B.B.B.1:11111;
19) routerul decide cui să transmită acest pachet. El îl trimite la, să spunem, B.B.B.254 (gateway-ul furnizorului de internet, ale cărui adrese exacte nu le cunoaștem), deoarece nu există rute mai specifice către A.A.A.1, decât 0.0.0.0/0;
20) providerii de internet transmit pachetul prin rețelele lor cu B.B.B.1 pe A.A.A.1;
21) routerul virtual pe A.A.A.1 primește acest pachet și își amintește că, atunci când a transmis pachetul de la 192.168.A.1:55555 pentru B.B.B.1:11111, a schimbat adresa și portul expeditorului pe A.A.A.1:44444. Așadar, acesta este răspunsul care trebuie transmis la 192.168.A.1:55555 (de fapt, așa cum am menționat în exemplul anterior, există și câteva alte verificări, dar de data aceasta nu ne adâncim în ele);
22) el înțelege că trebuie să fie transmis direct la 192.168.A.1, deoarece acesta este în aceeași rețea cu el, așadar, acesta are în tabela sa de rutare o înregistrare corespunzătoare care îl face să trimită pachetele pentru întreaga 192.168.A.0/24 direct;
23) routerul găsește adresa MAC pentru 192.168.A.1 și îi transmite acest pachet;
24) sistemul de operare de pe serverul cu adresa 192.168.A.1 primește pachetul de la B.B.B.1:11111 pentru 192.168.A.1:55555 și inițiază pașii următori pentru stabilirea unei conexiuni TCP.
la fel ca și în cazul precedent, în această situație serverul cu adresa 192.168.A.1 nu cunoaște computerul cu adresa 192.168.B.1, acesta comunică doar cu B.B.B.1. Computerul cu adresa 192.168.B.1 nu știe nimic despre serverul cu adresa 192.168.A.1. El consideră că s-a conectat de la adresa A.A.A.1, și restul este ascuns.
Ieșire
Așa se desfășoară totul în timpul conexiunilor din interiorul tunelului VPN între biroul clientului și mediul din cloud, precum și în cazul conexiunilor în afara tunelului VPN. Dacă aveți întrebări sau aveți nevoie de ajutorul nostru pentru a rezolva problemele din cloud,
Sursa: habr.com
