Použitie NAT Traversal pre pripojenie používateľov v pasívnom režime

Tento článok je voľným prekladom jedného z príspevkov v blogu vývojárov DC++.

So súhlasom autora (a tiež pre prehľadnosť a záujem) som ho obohatil odkazmi a doplnil niektorými osobnými zisteniami.

Úvod

V súčasnosti musí byť aspoň jeden používateľ zo spárovaných v aktívnom režime. Mechanizmus "obchádzania" NAT bude užitočný, ak nie je aktívny režim nastavený na ani jednej strane. Zvyčajne sa to deje kvôli blokovaniu prichádzajúcich pripojení firewalom alebo zariadením NAT.

Ak sú oba klienti v aktívnom režime

Klient-initiátor posiela obsahujúci jeho vlastnú IP adresu a port príkaz $ConnectToMe druhému klientovi. Použitím týchto údajov, klient ktorý príkaz prijal, nadviaže spojenie s iniciátorom.

Ak je jeden z klientov v pasívnom režime

Prostredníctvom hubu pasívny klient A posiela príkaz $RevConnectToMe aktívnemu klientovi B, ktorý potom odpovie príkazom $ConnectToMe.

Použitie NAT Traversal pre pripojenie používateľov v pasívnom režime
Ako server S v uvedenom prípade vystupuje DC hub

Ak sú oba klienti v pasívnom režime na ADC hube

Klienti za rôznymi NAT sa A a B pripojili k hubu S.

Použitie NAT Traversal pre pripojenie používateľov v pasívnom režime
Takto vyzerá pripojenie k hubu zo strany klienta A

Hub prijíma pripojenia na port 1511. Klient A uskutočňuje odchádzajúce pripojenia z svojej súkromnej siete cez port 50758. Hub, na druhej strane, vidí adresu zariadenia NAT, pracuje s ňou a prenáša klientom podľa ich identifikátorov.

Klienta A posiela serveru S správu so žiadosťou o pomoc pri pripojení sa ku klientovi B.

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

Akonáhle je tiež v pasívnom režime, klient B, ktorý prijme tento príkaz, musí oznámiť svoj súkromný port, ktorý sa používa na pripojenie k hubu prostredníctvom NAT.

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

Po prijatí týchto informácií klient A ihneď sa pokúsi nadviazať spojenie s klientom B a oznámi svoj vlastný súkromný port.

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

V čom je zaujímavosť? Zaujímavosť spočíva v posunutí koncového bodu toho istého pripojenia vytvorením nového pripojenia na verejnú adresu cez už používaný súkromný port.

Použitie NAT Traversal pre pripojenie používateľov v pasívnom režime
Bingo!

Samozrejme, NAT klienta B má plné právo odmietnuť prvú žiadosť o pripojenie od klienta A, ale už jeho vlastná žiadosť sa ženie do "diery" vytvorenej týmto pripojením, a spojenie sa predsa nadviaže.

Použitie NAT Traversal pre pripojenie používateľov v pasívnom režime
Ilustrácia, vhodná pre celý proces s výhradou, že protokol nevyžaduje verejné porty otvorené reláciou NAT‒S, ako aj súkromné adresy.

Epilog

V čase písania (pôvodného) článku asi polovica klientov DC funguje v pasívnom režime. To znamená, že štvrtina všetkých možných spojení nemôže byť uskutočnená.

Ďalej DC++ bude schopný "obchádzať" NAT, využívaním existujúcich spojení A‒S a B‒S na vytvorenie priameho spojenia klient–klient, aj keď A a B sú v pasívnom režime.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster