Primjena NAT Traversala za povezivanje korisnika u pasivnom režimu

Ovaj članak predstavlja slobodan prijevod jednog od postova u blogu developera DC++.

Uz dopuštenje autora (kao i iz vizualnih i zanimljivih razloga) obogatio sam ga linkovima i dopunio nekim svojim istraživanjima.

Uvod

Trenutno barem jedan korisnik iz para koji se povezuje mora biti u aktivnom režimu. Mehanizam "obiđenja" NAT-a bit će koristan kada nijedna strana ne ima aktivni režim podešen. Obično se to događa zbog blokiranja ulaznih veza od strane vatrozida ili NAT uređaja.

Ako su oba klijenta u aktivnom režimu

Klijent-inicijator šalje komandu koja sadrži njegov vlastiti IP adresa i port $ConnectToMe drugom klijentu. Koristeći te podatke, klijent koji je primio komandu uspostavlja vezu s inicijatorom.

Ako je jedan od klijenata u pasivnom režimu

Pasivni klijent preko huba A šalje komandu $RevConnectToMe aktivnom klijentu B, koji tada odgovara komandom $ConnectToMe.

Primjena NAT Traversala za povezivanje korisnika u pasivnom režimu
U ulozi servera S u gornjem slučaju djeluje DC hub

Ako su oba klijenta u pasivnom režimu na ADC hubu

Klijenti koji su iza različitih NAT-ova A i B priključili su se na hub S.

Primjena NAT Traversala za povezivanje korisnika u pasivnom režimu
Ovako veza s hubom izgleda s perspektive klijenta A

Hub prihvaća veze na portu 1511. Klijent A uspostavlja odlazne veze iz svoje privatne mreže putem porta 50758. Hub, zauzvrat, vidi adresu NAT uređaja, radi s njom i prosljeđuje klijentima u skladu s njihovim identifikatorima.

Klijent A šalje serveru S poruku s molbom za pomoć u povezivanju s klijentom B.

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

Budući da je također u pasivnom režimu, klijent B, nakon što primi ovu komandu, treba obavijestiti o svom privatnom portu koji se koristi za povezivanje s hubom putem NAT-a.

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

Nakon primanja tih informacija, klijent A odmah pokušava uspostaviti vezu s klijentom B i javlja svoj vlastiti privatni port.

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

U čemu je zanimljivost? Zanimljivost je u pomicanju krajnje točke iste veze stvaranjem nove veze na javnoj adresi putem već korištenog privatnog porta.

Primjena NAT Traversala za povezivanje korisnika u pasivnom režimu
Bingo!

Bez sumnje, pri tome NAT klijenta B ima potpuno pravo odbiti prvi zahtjev za vezu od klijenta A, ali već njegov vlastiti zahtjev se usmjerava prema „rupi“ koju stvara ovo isto povezivanje, te se veza ipak uspostavlja.

Primjena NAT Traversala za povezivanje korisnika u pasivnom režimu
Ilustracija koja odgovara cijelom procesu uz napomenu da protokol ne koristi javne portove otvorene od strane sesije NAT‒S, kao i privatne adrese.

Epilog

U trenutku pisanja (originalnog) članka otprilike polovica DC klijenata radi u pasivnom režimu. To znači da četvrtina svih mogućih veza ne može biti uspostavljena.

U nastavku DC++ će moći „obići“ NAT, koristeći postojeće veze A‒S i B‒S za uspostavljanje direktne veze klijent–klijent, čak i ako A i B su u pasivnom režimu.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster