Verwendung von NAT Traversal für die Verbindung von Benutzern im passiven Modus

Dieser Artikel ist eine freie Übersetzung eines Eintrags in dem Blog der DC++-Entwickler.

Mit Erlaubnis des Autors (auch zur Veranschaulichung und aus Interesse) habe ich ihn mit Links versehen und mit einigen persönlichen Erkenntnissen ergänzt.

Einführung

Derzeit muss mindestens ein Nutzer aus dem Paar, das sich verbindet, im aktiven Modus sein. Der NAT-Umgehungsmechanismus ist nützlich, wenn bei keiner der Seiten der aktive Modus eingerichtet ist. Dies geschieht normalerweise aufgrund der Blockierung eingehender Verbindungen durch eine Firewall oder ein NAT-Gerät.

Wenn beide Clients im aktiven Modus sind

sendet der initiierende Client einen Befehl, der seine eigene IP-Adresse und den Port enthält, $ConnectToMe an den anderen Client. Der empfangende Client stellt unter Verwendung dieser Daten die Verbindung zum Initiator her.

Wenn einer der Clients im passiven Modus ist

über den Hub sendet der passive Client A den Befehl $RevConnectToMe an den aktiven Clienten, Bder dann mit dem Befehl $ConnectToMe antwortet.

Verwendung von NAT Traversal für die Verbindung von Benutzern im passiven Modus
Als Server O fungiert in obigem Fall der DC-Hub.

Wenn beide Clients im passiven Modus sind, verbinden sie sich über den ADC-Hub.

Clients, die sich hinter unterschiedlichen NATs befinden, A und B haben sich mit dem Hub verbunden. O.

Verwendung von NAT Traversal für die Verbindung von Benutzern im passiven Modus
So sieht die Verbindung zum Hub aus der Sicht des Clients aus. A

Der Hub akzeptiert Verbindungen am Port 1511. Der Client A stellt aus seinem privaten Netzwerk heraus ausgehende Verbindungen über den Port 50758 her. Der Hub sieht wiederum die NAT-Adresse des Geräts, arbeitet damit und überträgt den Clients entsprechend ihren Identifikatoren.

Kunde A sendet eine Nachricht an den Server O mit der Bitte, die Verbindung zum Client zu unterstützen. B.

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

Auch im passiven Modus muss der Client, Bnach Erhalt dieses Befehls, seinen privaten Port mitteilen, der für die Verbindung zum Hub über NAT verwendet wird.

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

Nach Erhalt dieser Informationen A versucht der Client sofort, eine Verbindung zum Client herzustellen B und gibt seinen eigenen privaten Port an.

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

Was ist da interessant? Es geht darum, den Endpunkt derselben Verbindung zu verschieben, indem eine neue Verbindung zur öffentlichen Adresse über den bereits verwendeten privaten Port hergestellt wird.

Verwendung von NAT Traversal für die Verbindung von Benutzern im passiven Modus
Bingo!

Natürlich hat das NAT des Clients B das volle Recht, die erste Verbindungsanfrage des Clients abzulehnen, Aaber bereits seine eigene Anfrage strömt in das 'Loch', das durch diese Verbindung geschaffen wurde, und die Verbindung wird tatsächlich hergestellt.

Verwendung von NAT Traversal für die Verbindung von Benutzern im passiven Modus
Eine Illustration, die zu dem gesamten Prozess passt, mit der Einschränkung, dass Protokoll keine öffentlichen Ports verwendet werden, die von einer Sitzung geöffnet sind NATO, sowie private Adressen.

Epilog

Zum Zeitpunkt des Schreibens des (originalen) Artikels arbeiten etwa die Hälfte der DC-Kunden im passiven Modus. Das bedeutet, dass ein Viertel aller möglichen Verbindungen nicht hergestellt werden kann.

Zukünftig wird DC++ in der Lage sein, NAT zu umgehen, indem bestehende Verbindungen genutzt werden AO und BO um eine direkte Client-zu-Client-Verbindung herzustellen, selbst wenn A und B sie sich im passiven Modus befinden.

Quelle: habr.com

Erwerben Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster