Verwenden von NAT Traversal zum passiven Verbinden von Benutzern

Dieser Artikel ist eine kostenlose Übersetzung eines der DC ++ Developer Blog- Einträge .

Mit der Erlaubnis des Autors (sowie aus Gründen der Klarheit und des Interesses, um der Sache willen) habe ich es mit Links geblüht und einige persönliche Recherchen hinzugefügt.


Einführung

Derzeit muss sich mindestens ein Benutzer aus einem Paar verbindender Benutzer im aktiven Modus befinden. Der NAT-Bypass-Mechanismus ist nützlich, wenn der aktive Modus auf beiden Seiten nicht konfiguriert ist. Dies geschieht normalerweise, weil die eingehende Firewall oder das NAT-Gerät eingehende Verbindungen blockiert.

Wenn sich beide Clients im aktiven Modus befinden, sendet der initiierende Client den

Befehl $ ConnectToMe mit seiner eigenen IP-Adresse und seinem eigenen Port an einen anderen Client. Mit diesen Daten stellt der Client, der den Befehl empfängt, eine Verbindung zum Initiator her.

Befindet sich einer der Clients im passiven Modus

Über den Hub sendet der passive Client A den Befehl $ RevConnectToMe an den aktiven Client B.Dieser antwortet dann mit dem Befehl $ ConnectToMe.


Da der Server S im Fall des oben genannten DC-Hubs fungiert

Wenn sich beide Clients in einem passiven Modus befinden, ist der ADC-Hub, der

sich hinter verschiedenen NAT-Clients A und B befindet, mit dem Hub S verbunden .


Die Verbindung zum Hub sieht also von der Seite von Client A aus . Der

Hub akzeptiert Verbindungen über Port 1511. Client A stellt ausgehende Verbindungen von seinem privaten Netzwerk über Port 50758 her. Der Hub erkennt wiederum die Adresse des NAT-Geräts, arbeitet mit diesem und sendet die Clients gemäß ihren Kennungen.

Client A sendet an Server S.eine Nachricht, in der um Hilfe gebeten wird, um eine Verbindung mit dem Kundenbett herzustellen und . Wenn sich Client B ebenfalls im passiven Modus befindet , muss er nach Erhalt dieses Befehls seinen privaten Port informieren, der für die Verbindung mit dem Hub über NAT verwendet wird. Nach Erhalt dieser Informationen versucht Client A sofort, eine Verbindung mit Client B herzustellen, und meldet seinen eigenen privaten Port.

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



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



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

Was ist das Interesse? Das Interesse besteht darin, den Endpunkt derselben Verbindung zu verschieben, indem über den bereits verwendeten privaten Port eine neue Verbindung zu einer öffentlichen Adresse hergestellt wird.


Bingo!

Gleichzeitig hat das NAT von Client B natürlich das volle Recht, die erste Verbindungsanforderung von Client A abzulehnen , aber seine eigene Anforderung stürzt bereits in das durch diese Verbindung erzeugte „Loch“, und die Verbindung wird hergestellt.


Illustration geeignet für den gesamten Prozess mit dem Vorbehalt , dass das Protokoll nicht öffentliche Häfen durch die geöffneten nicht verwendet NAT - S - Sitzung sowie private Adressen.

Epilog

Zum Zeitpunkt des Schreibens des (Original-) Artikels ist ungefähr die Hälfte der DC-Clients passiv. Dies bedeutet, dass ein Viertel aller möglichen Verbindungen nicht hergestellt werden kann.

In Zukunft kann DC ++ NAT "umgehen"bestehende mit A - S und B - S - Client - Verbindung, auch wenn - Verbindungen eine direkte Client zu etablieren A und B im passiven Modus ist.

All Articles