Ένα νήμα υποστήριξης τελειώνει με την ετυμηγορία «συμμετρικό NAT, το VPN δεν θα δουλέψει εδώ», και μετά ο πελάτης επανεγκαθίσταται τρεις φορές χωρίς λόγο. Η ετικέτα κάνει ζημιά επειδή απαντά σε μια ερώτηση που δεν έθεσε κανείς. Ένας πελάτης που συνδέεται προς τα έξω με σταθερό διακομιστή δημιουργεί αντιστοίχιση τη στιγμή που στέλνει το πρώτο πακέτο, και η απάντηση επιτρέπεται να επιστρέψει με κανόνες που εφαρμόζει σχεδόν κάθε δίκτυο. Αυτό που πραγματικά περιπλέκει η αντιστοίχιση που εξαρτάται από το άκρο είναι δύο ομότιμοι που προσπαθούν να φτάσουν ο ένας τον άλλον ταυτόχρονα, και αυτό είναι άλλη δοκιμή.

Δύο ερωτήσεις κρύβονται πίσω από μία ετικέτα

Η πρώτη ερώτηση είναι αν ένας κεντρικός υπολογιστής πίσω από αυτό το δίκτυο μπορεί να ανοίξει συνεδρία προς γνωστή δημόσια διεύθυνση και θύρα. Για πελάτη τούνελ αυτή είναι η συνήθης περίπτωση, και η απάντηση είναι σχεδόν πάντα ναι. Ο δρομολογητής καταγράφει την εσωτερική πηγή, εκχωρεί εξωτερική θύρα και αφήνει την απάντηση να περάσει επειδή ανήκει σε συνεδρία που ξεκίνησε από μέσα.

Η δεύτερη ερώτηση είναι αν δύο κεντρικοί υπολογιστές πίσω από διαφορετικά δίκτυα μπορούν να ανακαλύψουν κοινή διαδρομή και να στέλνουν ο ένας στον άλλον χωρίς διακομιστή στη μέση. Αυτό εξαρτάται από το πώς κάθε δίκτυο εκχωρεί αυτές τις εξωτερικές θύρες, και είναι το μόνο σημείο όπου η συμπεριφορά της αντιστοίχισης έχει σημασία.

Η σύγχυση των δύο παράγει τη γνωστή λανθασμένη διάγνωση: μια λειτουργία ομοτίμων αποτυγχάνει, κάποιος τρέχει δοκιμή τύπου NAT, βλέπει τη χειρότερη κατηγορία και συμπεραίνει ότι ούτε το συνηθισμένο τούνελ μπορεί να δουλέψει. Το τούνελ δεν ήταν ποτέ αυτό που απέτυχε.

Αντιστοίχιση και φιλτράρισμα είναι ξεχωριστές ιδιότητες

Η ορολογία του RFC είναι ακριβέστερη από τα ονόματα που χρησιμοποιούν οι προμηθευτές, και αξίζει να περάσει στο δελτίο επειδή λύνει διαφωνίες. Αντιστοίχιση είναι το πώς εκχωρείται η εξωτερική θύρα. Φιλτράρισμα είναι ποια εισερχόμενα πακέτα επιτρέπεται να περάσουν. Ένα δίκτυο μπορεί να είναι αυστηρό στο ένα και επιεικές στο άλλο, και ο συνδυασμός είναι αυτό που πρέπει να επιβιώσει ένα πρωτόκολλο ομοτίμων.

BehaviourWhat it meansEffect on a direct peer path
Endpoint-independent mappingOne external port for every destinationDiscovery works if the port is advertised
Address-dependent mappingNew port per remote addressWorks only if both sides probe the same pair
Address-and-port-dependentNew port per remote address and portUsually needs a relay

Η τρίτη γραμμή είναι αυτό που οι περισσότεροι οικιακοί δρομολογητές και κινητοί πάροχοι εννοούν με τη λέξη συμμετρικό. Προσέξτε ότι η ετικέτα περιγράφει μόνο την εκχώρηση. Ένα δίκτυο με αυτή την αντιστοίχιση και επιεικές φιλτράρισμα μπορεί ακόμη να δέχεται εισερχόμενα πακέτα στη θύρα που μόλις εκχώρησε, γι’ αυτό το τρύπημα οπών πετυχαίνει σε μερικά και αποτυγχάνει σε άλλα.

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

Μετρήστε την αντιστοίχιση αντί να της δώσετε όνομα

Μπορείτε να παρατηρήσετε την εκχωρημένη θύρα απευθείας από την πλευρά του διακομιστή οποιασδήποτε υπηρεσίας UDP ελέγχετε. Ξεκινήστε καταγραφή στον δημόσιο κεντρικό υπολογιστή, στείλτε από τον πελάτη και διαβάστε τη θύρα πηγής με την οποία έφτασε το πακέτο:

sudo tcpdump -ni eth0 -c 10 'udp port 51820'
sudo wg show wg0 endpoints
sudo conntrack -L -p udp --dport 51820

Η γραμμή άκρου είναι η πιο χρήσιμη από τις τρεις, επειδή το WireGuard καταγράφει την τελευταία διεύθυνση και θύρα που έλαβε από κάθε ομότιμο. Συγκρίνετε αυτή τη θύρα με εκείνη που ο πελάτης νομίζει ότι χρησιμοποιεί. Θα διαφέρουν όποτε συμβαίνει οποιαδήποτε μετάφραση, και το σημαντικό ερώτημα είναι αν η τιμή μένει σταθερή.

Επαναλάβετε την παρατήρηση προς δεύτερη θύρα προορισμού ή δεύτερο διακομιστή και συγκρίνετε ξανά. Αν η εξωτερική θύρα αλλάζει ανά προορισμό, η αντιστοίχιση εξαρτάται από διεύθυνση και θύρα. Αν μένει ίδια, το δίκτυο σας δίνει μία αντιστοίχιση και η ανακάλυψη έχει πιθανότητες.

Τα εργαλεία που βασίζονται στο STUN αναφέρουν την ίδια ταξινόμηση σε ένα βήμα, και είναι εντάξει να τα χρησιμοποιείτε όταν το δίκτυο επιτρέπει εξερχόμενο UDP προς δημόσιο διακομιστή STUN. Όταν δεν το επιτρέπει, η παραπάνω μέθοδος καταγραφής εξακολουθεί να δουλεύει και δεν απαιτεί τίποτε άλλο από έναν κεντρικό υπολογιστή που ήδη ελέγχετε.

Διαλέξτε διόρθωση που ταιριάζει στην αποτυχία

Αν η λειτουργία που αποτυγχάνει είναι ομότιμη, οι υποστηριζόμενες απαντήσεις είναι ένας αναμεταδότης, μια υπηρεσία συνάντησης που μπορούν να φτάσουν και οι δύο ομότιμοι, ή διαφορετική τοπολογία. Το TURN υπάρχει ακριβώς γι’ αυτό, και ένα προϊόν που παρέχει δικό του αναμεταδότη σας λέει ότι περιμένει μερικά δίκτυα να είναι εχθρικά.

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

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

Καταγράψτε την αρχιτεκτονική, όχι την ετυμηγορία

Μια χρήσιμη σημείωση λέει ποιο πρωτόκολλο, προς ποια κατεύθυνση ξεκινά η συνεδρία, αν υπάρχει αναμεταδότης στη διαδρομή και τι παρατηρήθηκε στο καλώδιο. Το «συμμετρικό NAT, δεν δουλεύει» είναι άχρηστο, επειδή ταυτόχρονα είναι λάθος για το τούνελ και μη πληροφοριακό για τη διαδρομή του ομοτίμου.

Συμπεριλάβετε τη μετρημένη σταθερότητα θύρας και τη συμπεριφορά φιλτραρίσματος αν τα δοκιμάσατε. Αυτά τα δύο γεγονότα επιτρέπουν σε κάποιον άλλον να προβλέψει αν μια νέα λειτουργία θα δουλέψει σε εκείνο το δίκτυο χωρίς να επαναλάβει όλη την έρευνα. Γερνούν επίσης καλύτερα από μια κατηγορία προμηθευτή που σημαίνει κάτι ελαφρώς διαφορετικό σε κάθε σελίδα βοήθειας.

Τέλος, κρατήστε πρόχειρη την ορολογία του RFC 4787 όταν το γράφετε. Η χρήση των ακριβών όρων κοστίζει μία πρόταση και εμποδίζει τον επόμενο αναγνώστη να επαναλάβει την ίδια λανθασμένη διάγνωση, και αυτός είναι όλος ο σκοπός του να γραφτεί η σημείωση.

Σχετικά άρθρα