Οι σταθερές θύρες UDP μπορούν να παρακάμψουν την προώθηση θυρών, αλλά όχι κάθε NAT
Ένα τείχος προστασίας με κατάσταση δέχεται το πακέτο του ομότιμου ως κίνηση επιστροφής όταν και τα δύο άκρα καρφώνουν μία θύρα. Ορίστε πότε δουλεύει αυτό και τι το τερματίζει σιωπηλά.
Δύο οικιακά router, καμία προωθημένη θύρα και ένα VPN που μερικές φορές συνδέεται παρ' όλα αυτά. Το UDP το επιτρέπει, επειδή ένα τείχος προστασίας θα δεχτεί ένα πακέτο που μπορεί να ταιριάξει με μια ροή που το μηχάνημα έχει ήδη ξεκινήσει. Είναι ένα κόλπο υπό όρους, όχι λειτουργία, και οι όροι λέγονται εύκολα μόλις ξέρεις τι συγκρίνει το τείχος προστασίας. Είναι και ο λόγος που πανομοιότυπα προφίλ συμπεριφέρονται διαφορετικά σε διαφορετικά δίκτυα.
Η σύγκριση που κάνει ένα τείχος προστασίας
Κάθε εξερχόμενο datagram δημιουργεί μια βραχύβια εγγραφή: διεύθυνση πηγής, θύρα πηγής, διεύθυνση προορισμού, θύρα προορισμού. Ό,τι φτάνει και ταιριάζει με την εγγραφή αντιμετωπίζεται ως απάντηση και περνά. Οι κανόνες για την εισερχόμενη κίνηση δεν παίζουν κανέναν ρόλο.
Άρα το ερώτημα δεν είναι αν το τείχος προστασίας αφήνει τον ομότιμο μέσα. Είναι αν το πακέτο του ομότιμου μοιάζει με την απάντηση που περιμένει η εγγραφή. Άλλαξε ένα πεδίο αυτής της τετραμερούς πλειάδας και το πακέτο γίνεται ξένος. Γι' αυτό μια ρύθμιση που δουλεύει μπορεί να σπάσει όταν αλλάζει μόνο ο αριθμός θύρας, και γι' αυτό η ίδια θύρα μπορεί να δουλεύει σε ένα router και να αποτυγχάνει στο επόμενο.
Καρφώστε την τοπική θύρα πηγής και ο ίδιος αριθμός εμφανίζεται και στις δύο πλευρές της ανταλλαγής. Αυτός είναι όλος ο μηχανισμός, και εξηγεί γιατί το κόλπο είναι εύθραυστο και όχι μυστηριώδες.
Κάρφωμα μιας θύρας σε κάθε άκρο
Η προεπιλεγμένη θύρα UDP του OpenVPN είναι η 1194, και το lport ορίζει τη θύρα πηγής από την οποία στέλνει. Καρφώστε και τους δύο ομοτίμους και η εξερχόμενη πλειάδα καθενός δείχνει σε μια θύρα όπου ακούει ο άλλος:
# peer A
lport 1194
remote 198.51.100.20 1194
# peer B
lport 1194
remote 203.0.113.10 1194
Αυτό δουλεύει μόνο όσο κανένα router ανάμεσά τους δεν ξαναγράφει τη θύρα πηγής. Όταν πακέτα εμφανίζονται σε σύλληψη αλλά δεν σηκώνεται τούνελ, η επανεγγραφή είναι ο πρώτος ύποπτος.
Πού σταματά να ταιριάζει η πλειάδα
Ένα NAT που αντιστοιχίζει ανά προορισμό δίνει σε κάθε ομότιμο διαφορετική εξωτερική θύρα. Η διεύθυνση που είπαν στον ομότιμό σου να χρησιμοποιήσει δεν είναι η διεύθυνση που τον φτάνει, άρα το εισερχόμενο πακέτο δεν ταιριάζει με τίποτα και απορρίπτεται σιωπηλά.
Η μετάφραση σε επίπεδο παρόχου, το στοιβαγμένο NAT και η τυχαιοποίηση θυρών τελειώνουν όλα το ίδιο. Το ίδιο και κάθε ενδιάμεσο κουτί που ξαναγράφει θύρες αφήνοντας τις διευθύνσεις ήσυχες.
Οι μεταφορές ροής είναι σε χειρότερη θέση. Μια χειραψία TCP παρακολουθείται βήμα βήμα, άρα ένα VPN βασισμένο σε TCP δεν μπορεί να τρυπηθεί καθόλου με αυτόν τον τρόπο και χρειάζεται έναν ακροατή κάπου στη διαδρομή.
Συνήθως αποτυγχάνει πρώτη η μία πλευρά
Στην πράξη τα δύο δίκτυα σπάνια συμπεριφέρονται το ίδιο. Ένα router μπορεί να δίνει προβλέψιμη αντιστοίχιση ενώ το άλλο δίνει θύρες ανά προορισμό, και το αποτέλεσμα είναι μια διαμόρφωση που δουλεύει ανάμεσα σε δύο σπίτια και αποτυγχάνει από κινητό δίκτυο. Αναφορές που αντιφάσκουν μεταξύ τους περιγράφουν συνήθως δύο διαφορετικά ζεύγη router. Κανένας από τους δύο συγγραφείς δεν κάνει λάθος, και κανένα από τα δύο αποτελέσματα δεν γενικεύεται.
Βρες ποια πλευρά πέταξε το πακέτο πριν αγγίξεις τα προφίλ. Συλλήψεις στα δύο άκρα το λύνουν με μία προσπάθεια: datagrams που φεύγουν από το A και δεν φτάνουν ποτέ στο B σημαίνουν ότι η ροή ξαναγράφτηκε στη διαδρομή, ενώ datagrams που φτάνουν στο B χωρίς να γυρίζει απάντηση σημαίνουν ότι το τείχος προστασίας δεν τα δέχτηκε ως σχετιζόμενα.
Δύο ομότιμοι με δημόσιες διευθύνσεις IPv6 παρακάμπτουν όλο το πρόβλημα. Χωρίς μετάφραση δεν υπάρχει τίποτα να ταιριάξει, άρα αρκεί ένας κανόνας τείχους προστασίας που ονομάζει τους ομοτίμους και ο σχεδιασμός παύει να εξαρτάται από τη συμπεριφορά του router.
Πότε να σταματήσεις να προσπαθείς
Ένας host με δημόσια διεύθυνση είναι η αξιόπιστη απάντηση. Μπορεί να τερματίσει το τούνελ και για τους δύο ομοτίμους, ή απλώς να τους βοηθήσει να ανακαλύψουν την τρέχουσα εξωτερική διεύθυνση του άλλου, και οι δύο διατάξεις δουλεύουν ό,τι κι αν κάνουν τα NAT. Ένα διαχειριζόμενο overlay παρέχει τον ίδιο συντονισμό αν το επιτρέπει η πολιτική.
Κανένα από αυτά δεν χρειάζεται απενεργοποιημένο τείχος προστασίας. Το να κλείσεις την προστασία για να κερδίσεις την άμεση σύνδεση πετάει τον λόγο που η άμεση προσπάθεια ήταν ελκυστική, και αφήνει το μηχάνημα ανοιχτό για όλη τη διάρκεια της δοκιμής.
Δοκίμασε πρώτα την άμεση διάταξη και μετά κατέγραψε τι είδες. Η συμπεριφορά του NAT και η σύλληψη που την έδειξε αξίζουν περισσότερο από το ζεύγος θυρών που χρησιμοποίησες τελικά, γιατί το επόμενο δίκτυο θα είναι διαφορετικό. Το εγχειρίδιο του OpenVPN 2.6 τεκμηριώνει lport και τις επιλογές remote από τις οποίες εξαρτάται αυτό.