Χρήση NAT Traversal για σύνδεση χρηστών σε παθητική λειτουργία

Αυτό το άρθρο είναι μια δωρεάν μετάφραση ενός από τα λήμματα στο Ιστολόγιο προγραμματιστή DC++.

Με την άδεια του συγγραφέα (καθώς και για λόγους σαφήνειας και ενδιαφέροντος), το χρωμάτισα με συνδέσμους και το συμπλήρωσα με κάποια προσωπική έρευνα.

Εισαγωγή

Τουλάχιστον ένας χρήστης του ζεύγους σύνδεσης πρέπει να βρίσκεται σε ενεργή λειτουργία αυτήν τη στιγμή. Ο μηχανισμός διέλευσης NAT θα είναι χρήσιμος όταν η ενεργή λειτουργία δεν έχει διαμορφωθεί σε καμία πλευρά. Αυτό συνήθως οφείλεται σε ένα τείχος προστασίας ή μια συσκευή NAT που μπλοκάρει τις εισερχόμενες συνδέσεις.

Εάν και οι δύο πελάτες βρίσκονται σε ενεργή λειτουργία

Ο πελάτης εκκίνησης στέλνει μια εντολή που περιέχει τη δική του διεύθυνση IP και θύρα $ConnectToMe σε άλλο πελάτη. Χρησιμοποιώντας αυτά τα δεδομένα, ο πελάτης που έλαβε την εντολή δημιουργεί μια σύνδεση με τον εκκινητή.

Εάν ένας από τους πελάτες είναι σε παθητική λειτουργία

Μέσω του hub, ένας παθητικός πελάτης A στέλνει εντολή $RevConnectToMe ενεργό πελάτη Bτο οποίο στη συνέχεια απαντά με την εντολή $ConnectToMe.

Χρήση NAT Traversal για σύνδεση χρηστών σε παθητική λειτουργία
Ως διακομιστής S στην παραπάνω περίπτωση υπάρχει διανομέας DC

Αν και οι δύο πελάτες βρίσκονται σε παθητική λειτουργία ενεργοποιημένο ADC hub

Πελάτες πίσω από διαφορετικά NAT A и B εντάχθηκε στο hub S.

Χρήση NAT Traversal για σύνδεση χρηστών σε παθητική λειτουργία
Έτσι φαίνεται η σύνδεση με το hub από την πλευρά του πελάτη A

Ο διανομέας δέχεται συνδέσεις στη θύρα 1511. Πελάτης A πραγματοποιεί εξερχόμενες συνδέσεις από το ιδιωτικό του δίκτυο μέσω της θύρας 50758. Ο διανομέας, με τη σειρά του, βλέπει τη διεύθυνση της συσκευής NAT, συνεργάζεται μαζί της και τη μεταδίδει στους πελάτες σύμφωνα με τα αναγνωριστικά τους.

Πελάτης A στέλνει στον διακομιστή S μήνυμα που ζητά βοήθεια για τη σύνδεση με έναν πελάτη B.

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

Επίσης σε παθητική λειτουργία, ο πελάτης B, έχοντας λάβει αυτήν την εντολή, πρέπει να αναφέρει την ιδιωτική του θύρα που χρησιμοποιείται για τη σύνδεση στο hub μέσω NAT.

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

Μετά τη λήψη αυτών των πληροφοριών ο πελάτης A προσπαθεί αμέσως να δημιουργήσει μια σύνδεση με τον πελάτη B και αναφέρει το δικό της ιδιωτικό λιμάνι.

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

Ποιο είναι το ενδιαφέρον; Το ενδιαφέρον είναι να μετατοπιστεί το τελικό σημείο της ίδιας σύνδεσης δημιουργώντας μια νέα σύνδεση σε μια δημόσια διεύθυνση μέσω μιας ήδη χρησιμοποιούμενης ιδιωτικής θύρας.

Χρήση NAT Traversal για σύνδεση χρηστών σε παθητική λειτουργία
Λοταρία!

Φυσικά, σε αυτή την περίπτωση ο πελάτης NAT B έχει κάθε δικαίωμα να απορρίψει το πρώτο αίτημα σύνδεσης από έναν πελάτη A, αλλά το δικό του αίτημα ορμάει στην «τρύπα» που δημιουργείται από αυτήν ακριβώς τη σύνδεση, και η σύνδεση εδραιώνεται.

Χρήση NAT Traversal για σύνδεση χρηστών σε παθητική λειτουργία
Εικονογράφηση κατάλληλη για όλη τη διαδικασία με την προειδοποίηση ότι πρωτόκολλο δεν χρησιμοποιεί δημόσιες θύρες που ανοίγονται από τη συνεδρία NAT-S, καθώς και ιδιωτικές διευθύνσεις.

Επίλογος

Τη στιγμή της σύνταξης του (πρωτότυπου) άρθρου, περίπου οι μισοί από τους πελάτες DC εργάζονται σε παθητική λειτουργία. Αυτό σημαίνει ότι το ένα τέταρτο όλων των πιθανών συνδέσεων δεν μπορεί να πραγματοποιηθεί.

Στο μέλλον Το DC++ θα μπορεί να παρακάμψει το NATχρησιμοποιώντας υπάρχουσες συνδέσεις A-S и B-S για να δημιουργήσετε μια άμεση σύνδεση πελάτη-πελάτη, ακόμα κι αν A и B βρίσκονται σε παθητική λειτουργία.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο