Toepassing van NAT Traversal voor het verbinden van gebruikers in passieve modus

Dit artikel is een vrije vertaling van een van de berichten in de blog van de ontwikkelaars van DC++.

Met toestemming van de auteur (en ook voor de duidelijkheid en het belang) heb ik het aangevuld met links en wat persoonlijke onderzoeken.

Inleiding

Momenteel moet ten minste één gebruiker van het paar dat verbinding maakt in actieve modus zijn. De 'NAT-bypass'-mechanisme is nuttig wanneer geen van beide kanten in actieve modus is ingesteld. Dit gebeurt meestal vanwege het blokkeren van inkomende verbindingen door een firewall of een NAT-apparaat.

Als beide clients in actieve modus zijn

stuurt de initiërende client een opdracht die zijn eigen IP-adres en poort bevat, $ConnectToMe aan de andere client. Met deze gegevens maakt de ontvangende client verbinding met de initiator.

Als een van de clients in passieve modus is

stuur de passieve client via de hub A de opdracht $RevConnectToMe aan de actieve client, Bdie dan reageert met de opdracht $ConnectToMe.

Toepassing van NAT Traversal voor het verbinden van gebruikers in passieve modus
Als server S is de DC-hub in het bovenstaande geval

Als beide clients in passieve modus zijn op de ADC-hub

Diverse clients achter verschillende NAT A en B sloten zich aan bij de hub. S.

Toepassing van NAT Traversal voor het verbinden van gebruikers in passieve modus
Zo ziet de verbinding met de hub eruit vanuit het perspectief van de client: A

De hub accepteert verbindingen op poort 1511. De client A maakt uitgaande verbindingen vanuit zijn privénetwerk via poort 50758. De hub ziet op zijn beurt het adres van het NAT-apparaat, werkt daarmee en zendt de clients hun identificaties.

Klant A sturen een bericht naar de server S met het verzoek hulp te bieden bij het verbinden met een client. B.

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

Ook in passieve modus moet de client, Bna ontvangst van deze opdracht, zijn privépunt melden dat wordt gebruikt voor de verbinding met de hub via NAT.

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

Na het ontvangen van deze informatie probeert de client A onmiddellijk verbinding te maken met de client B en meldt zijn eigen privépunt.

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

Wat is het interessante? Het interessante zit in het verschuiven van de eindpunten van dezelfde verbinding door een nieuwe verbinding te creëren op een openbaar adres via al gebruikte privépunt.

Toepassing van NAT Traversal voor het verbinden van gebruikers in passieve modus
Bingo!

Zeker, kan de NAT van de client B het eerste verbindingsverzoek van de client volledig weigeren, Amaar al zijn eigen verzoek is al gericht op het 'gat' dat is gemaakt door diezelfde verbinding, en de verbinding wordt toch tot stand gebracht.

Toepassing van NAT Traversal voor het verbinden van gebruikers in passieve modus
Een illustratie die bij het gehele proces past, met de kanttekening dat wordt het protocol maakt geen gebruik van openbare poorten die door de sessie zijn geopend NAT‒S, evenals privé-adressen.

Epilog

Op het moment van schrijven van dit artikel werkt ongeveer de helft van de DC-klanten in de passieve modus. Dit betekent dat een kwart van alle mogelijke verbindingen niet kan worden gemaakt.

Vervolgens kan DC++ "omzeilen" NAT, door gebruik te maken van bestaande verbindingen A‒S en B‒S om een directe client-naar-clientverbinding tot stand te brengen, zelfs als A en B ze zich in de passieve modus bevinden.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster