Utilizarea NAT Traversal pentru conectarea utilizatorilor în modul pasiv

Acest articol reprezintă o traducere liberă a uneia dintre postările din blogul dezvoltatorilor DC++.

Cu permisiunea autorului (și pentru ilustrarea și interesul cititorului) am adăugat linkuri și am completat-o cu câteva observații personale.

Introducere

În prezent, cel puțin un utilizator din perechea care se conectează trebuie să fie în modul activ. Mecanismul de „o ocolire” NAT va fi util în cazul în care modul activ nu este configurat de niciuna dintre părți. De obicei, acest lucru se întâmplă din cauza blocării conexiunilor de intrare de către un firewall sau un dispozitiv NAT.

Dacă ambii clienți sunt în modul activ

Clientul inițiator trimite o comandă care conține propriul său IP și port $ConnectToMe celuiălalt client. Folosind aceste date, clientul care primește comanda stabilește conexiunea cu inițiatorul.

Dacă unul dintre clienți este în modul pasiv

Prin intermediul hub-ului clientul pasiv A trimite comanda $RevConnectToMe clientului activ B, care apoi răspunde cu comanda $ConnectToMe.

Utilizarea NAT Traversal pentru conectarea utilizatorilor în modul pasiv
Ca server S în cazul de mai sus, acționează hub-ul DC

Dacă ambii clienți sunt în modul pasiv pe hub-ul ADC

Clienții care se află în spatele unor NAT diferite A și B s-au alăturat hub-ului S.

Utilizarea NAT Traversal pentru conectarea utilizatorilor în modul pasiv
Așa arată conexiunea cu hub-ul din perspectiva clientului A

Hub-ul acceptă conexiuni pe portul 1511. Clientul A efectuează conexiuni ieșite din rețeaua sa privată prin portul 50758. Hub-ul, la rândul său, vede adresa dispozitivului NAT, lucrează cu aceasta și transmite clienților corespunzător identificatorilor lor.

Clientului A trimite server-ului S un mesaj cu solicitarea de a ajuta la conectarea cu clientul B.

Hub: [Outgoing][178.79.159.147:1511] DRCM AAAA BBBB ADCS/0.10 1649612991

Fiind și el în modul pasiv, clientul B, primind această comandă, trebuie să comunice portul său privat, folosit pentru conectarea la hub prin NAT.

Hub: [Incoming][178.79.159.147:1511] DNAT BBBB AAAA ADCS/0.10 59566 1649612991

După primirea acestei informații, clientul A îndată încearcă să stabilească conexiunea cu clientul B și își comunică propriul port privat.

Hub:		[Outgoing][178.79.159.147:1511]	 	D<b>RNT</b> AAAA BBBB ADCS/0.10 <b>50758</b> 1649612991

Care este interesul? Interesul constă în deplasarea punctului final al aceleași conexiuni prin crearea unei noi conexiuni pe o adresă publică printr-un port privat deja utilizat.

Utilizarea NAT Traversal pentru conectarea utilizatorilor în modul pasiv
Bingo!

Desigur, NAT-ul clientului B are tot dreptul să respingă prima solicitare de conexiune din partea clientului A, dar deja propria sa solicitare se îndreaptă spre „gaura” creată de această conexiune, iar legătura este stabilită.

Utilizarea NAT Traversal pentru conectarea utilizatorilor în modul pasiv
Ilustrarea care se potrivește întregului proces cu mențiunea că protocol nu utilizează porți publice, deschise de sesiune NAT‒S, precum și adrese private.

Epilog

La momentul redactării (originale) a articolului, aproximativ jumătate din clienții DC funcționează în modul pasiv. Aceasta înseamnă că o pătrime din toate conexiunile posibile nu pot fi realizate.

În continuare DC++ va putea "ocoli" NAT, folosind conexiuni existente A‒S și B‒S pentru a stabili o conexiune directă client–client, chiar dacă A și B sunt în modul pasiv.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster