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

Ο πίνακας αντιστοίχισης κρίνει τα πάντα

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

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

Τι μπορεί και τι δεν μπορεί να κάνει η υπηρεσία συνάντησης

Το άνοιγμα τρυπών UDP χρησιμοποιεί την εξερχόμενη εγγραφή ως προσωρινό άνοιγμα αντί να νικήσει το φίλτρο. Και οι δύο ομότιμοι επικοινωνούν με μια υπηρεσία συνάντησης, που μαθαίνει κάθε δημόσιο άκρο και αναφέρει πίσω στην άλλη πλευρά το δικό της άκρο. Έπειτα και οι δύο στέλνουν ο ένας προς τον άλλον, και κάθε εξερχόμενο πακέτο δημιουργεί ή ανανεώνει την εγγραφή που αφήνει την απάντηση να μπει. Η σειρά είναι αυτό που το κάνει να δουλεύει, και η σειρά είναι επίσης αυτό που το κάνει εύθραυστο: ένας ομότιμος που στέλνει πριν η άλλη πλευρά δημιουργήσει την εγγραφή της απλώς απορρίπτεται, ενώ μια νέα προσπάθεια λίγο αργότερα πετυχαίνει. Η ίδια η υπηρεσία δεν μεταφέρει κίνηση VPN, άρα το μόνο της μοχλικό είναι ο χρονισμός που συντονίζει.

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

Keepalives, επανεκκινήσεις και το άκρο που μετακινείται

Ένα ανοιγμένο μονοπάτι είναι ροή και όχι ακροατής, άρα ό,τι τρέχει από πάνω του πρέπει να επιβιώσει από αλλαγές. Πρέπει να κρατά την αντιστοίχιση ζωντανή με περιοδική κίνηση, να αντιλαμβάνεται πότε μετακινείται το δημόσιο άκρο και να επανιδρύεται μετά την επανεκκίνηση του δρομολογητή ή την εκ νέου απόδοση διεύθυνσης. Τα προϊόντα mesh VPN βάζουν αυτή τη λογική στο δικό τους επίπεδο ελέγχου, ενώ ένας απλός διακομιστής την αφήνει σε εσάς. Τα keepalives βοηθούν μόνο όσο επιβιώνει η ίδια αντιστοίχιση, και κοστίζουν μπαταρία σε κινητό πελάτη, γι' αυτό ένα επιθετικό διάστημα δεν είναι δωρεάν.

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

Τρεις τρόποι γύρω από μια χαμένη προώθηση

Ο πρώτος τρόπος ζητά από τον δρομολογητή να δημιουργήσει ο ίδιος την εγγραφή, μέσω UPnP IGD, NAT-PMP ή PCP, όταν η λειτουργία υπάρχει και είναι ενεργοποιημένη. Ο δεύτερος παραδίδει την κίνηση σε ένα relay με δημόσια διεύθυνση, που πάντα λειτουργεί και πάντα κοστίζει εύρος ζώνης συν ένα διαφορετικό όριο εμπιστοσύνης. Ο τρίτος αντιστρέφει την κατεύθυνση: ο εσωτερικός κεντρικός υπολογιστής ανοίγει εξερχόμενη σήραγγα προς δημόσιο διακομιστή και όλα τα άλλα ταξιδεύουν μέσα της.

[Peer]
PublicKey = 6yGj3kQ2wVb8sTn1pLx4dRc7hZa9mKf2uYe5oNq0iXw=
Endpoint = relay.corp.internal:51820
PersistentKeepalive = 25
AllowedIPs = 10.44.0.0/24

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

Ταιριάξτε τη λύση με το ποιος κατέχει τον δρομολογητή

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

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

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