Tento článok je voľným prekladom jedného z príspevkov v .
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 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 aktívnemu klientovi B, ktorý potom odpovie príkazom $ConnectToMe.

Ako server S v uvedenom prípade vystupuje DC hub
Ak sú oba klienti v pasívnom režime na
Klienti za rôznymi NAT sa A a B pripojili k hubu S.

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> 1649612991V č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.

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.

Ilustrácia, vhodná pre celý proces s výhradou, že 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 , 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
