Το NAT καθορίζει ποια διεύθυνση πηγής βλέπει στην πραγματικότητα ο διακομιστής VPN σας
Η διεύθυνση του φορητού σας δεν φτάνει ποτέ στον διακομιστή VPN. Το NAT την ξαναγράφει στο τελευταίο άλμα και η IP της σήραγγας εκχωρείται αργότερα. Πώς να συγκρίνετε τα δύο άκρα.
Φαντάζεστε τον διακομιστή VPN να διαβάζει τη διεύθυνση του φορητού σας από το πακέτο και να τη γράφει σε ένα αρχείο καταγραφής. Αυτό που διαβάζει είναι ό,τι έβαλε το τελευταίο άλμα NAT στην εξωτερική κεφαλίδα, και σε ένα τηλέφωνο που μοιράζεται τη σύνδεση αυτό είναι συχνά μια διεύθυνση κοινή με εκατοντάδες άλλους συνδρομητές. Η δική σας διεύθυνση της μηχανής 192.168.x.x δεν περνά ποτέ το διαδίκτυο σε αυτή την κεφαλίδα, και η διεύθυνση της σήραγγας εκχωρείται από τον διακομιστή αφού η σύνδεση είναι ήδη ενεργή. Έτσι, όταν το αρχείο καταγραφής του διακομιστή και το ip addr στον φορητό διαφωνούν, κανένα από τα δύο δεν είναι λάθος· περιγράφουν διαφορετικά επίπεδα μιας συνεδρίας.
Τρεις διευθύνσεις και μόνο μία στο αρχείο καταγραφής
Η σύγχυση προκύπτει όταν τρεις διευθύνσεις συνενώνονται σε μία. Καθεμία έχει διαφορετικό ιδιοκτήτη, ζει σε διαφορετική κεφαλίδα και φτάνει στον διακομιστή από διαφορετική διαδρομή.
| Address | Who assigns it | Where it sits | Visible to the VPN server |
|---|---|---|---|
Device address, e.g. 192.168.1.24 | Your router via DHCP | Outer header, before translation | No, rewritten in place |
| Translated address and port | Router, ISP CGNAT, or both | Outer header, after translation | Yes, this is the tuple it logs |
Tunnel address, e.g. 10.8.0.6 | The VPN server itself | Inner header, after decapsulation | Yes, but it chose it |
Μόνο η μεσαία γραμμή είναι άγνωστη τη στιγμή της σύνδεσης. Ο διακομιστής τη γράφει στον πίνακα ομοτίμων, στο αρχείο κατάστασης ή στο αρχείο ροών ανάλογα με τον δαίμονα: το WireGuard την ονομάζει τελικό σημείο, ένα αρχείο κατάστασης του OpenVPN τη χαρακτηρίζει Real Address και το strongSwan την αναφέρει ως απομακρυσμένο κεντρικό υπολογιστή του IKE_SA. Αυτή η τιμή ανανεώνεται κάθε φορά που φτάνει πακέτο από διαφορετική πηγή, οπότε αλλάζει χωρίς να επανεκκινήσει κανείς τίποτα.
Η κάτω γραμμή είναι αυτή που οι άνθρωποι διαβάζουν λανθασμένα ως δήλωση ταυτότητας. Σημειώνει μια θέση στη διαμόρφωση του διακομιστή, όχι ένα πρόσωπο, γιατί ο διακομιστής τη διάλεξε από τη δική του δεξαμενή. Δύο χρήστες μπορούν να λάβουν την ίδια διεύθυνση σήραγγας σε διαφορετικές ημέρες και ένας μπορεί να κρατά δύο από αυτές από δύο συσκευές.
Γιατί η καταγεγραμμένη πλειάδα αλλάζει ενώ η σήραγγα μένει ενεργή
Η μετάφραση διευθύνσεων είναι πίνακας με χρονόμετρο, όχι μόνιμη δέσμευση. Ένας οικιακός δρομολογητής κρατά την αντιστοίχιση UDP για λίγο μετά το τελευταίο πακέτο, μια πύλη παρόχου ανακυκλώνει θύρες με το δικό της χρονοδιάγραμμα και ένα τηλέφωνο που περνά από Wi-Fi σε LTE επιστρέφει με εντελώς διαφορετική πηγή. Οι προεπιλογές του conntrack στο Linux είναι ένα χρήσιμο μέτρο εδώ: το nf_conntrack_udp_timeout είναι 30 δευτερόλεπτα και η παραλλαγή για ροή είναι 120, οπότε μια ήσυχη σήραγγα μπορεί να χάσει την αντιστοίχιση πολύ πριν το αντιληφθεί ο χρήστης.
Η σήραγγα επιβιώνει επειδή το πρωτόκολλο επαληθεύει τον ομότιμο, όχι τη διεύθυνση. Το WireGuard είναι χωρίς κατάσταση μετά τη χειραψία, οπότε κάθε επαληθευμένο πακέτο ενημερώνει το αποθηκευμένο τελικό σημείο και η επανασύνδεση θεραπεύεται με το επόμενο πακέτο· γι' αυτό υπάρχει το persistent-keepalive = 25, για να κρατά την αντιστοίχιση ζεστή όσο είναι ανενεργή. Το --float του OpenVPN κάνει την ίδια δουλειά και επιτρέπει σε επαληθευμένο πελάτη να συνεχίσει από νέα διεύθυνση και θύρα. Στις εκδόσεις 2.4 και 2.5 όπου το float είναι απενεργοποιημένο από προεπιλογή, μια επανασύνδεση επαναφέρει τη συνεδρία και ο πελάτης συνδέεται ξανά.
Το IPsec φτάνει εκεί με περισσότερα κινούμενα μέρη. Το IKEv2 αντιλαμβάνεται τη μετάφραση συγκρίνοντας τα χάσες πηγής και προορισμού στα ωφέλιμα φορτία ανίχνευσης NAT, περνά σε ενθυλάκωση UDP 4500 και ακολουθεί τα keepalive στη νέα πλειάδα. Όταν τα keepalive μπλοκάρονται, το SA μένει ενεργό στα χαρτιά ενώ η κίνηση προς μία κατεύθυνση σταματά σιωπηλά.
Τι μπορεί να αποδώσει ο διακομιστής και τι όχι
Ο μύθος που αξίζει να σκοτώσουμε είναι ότι η μετάφραση σας κρύβει από τον πάροχο. Αλλάζει την ετικέτα, όχι την παρατήρηση. Μια πύλη πίσω από το NAT παρόχου βλέπει χώρο 100.64.0.0/10 ή μία δημόσια διεύθυνση κοινή σε πολλούς συνδρομητές, και μπορεί ακόμη να συνδέσει τη ροή με θέμα πιστοποιητικού, δημόσιο κλειδί WireGuard, εκχωρημένη διεύθυνση σήραγγας, μετρητές byte και χρονικό παράθυρο. Κανένα από αυτά δεν χρειάζεται τη διεύθυνση LAN σας.
Τα όρια πάνε και προς την άλλη κατεύθυνση. Μια κοινή διεύθυνση σε αρχείο καταγραφής δείχνει πύλη, όχι νοικοκυριό· δύο συνεδρίες από την ίδια μεταφρασμένη διεύθυνση σε διαφορετικές θύρες είναι διαφορετικές συσκευές· η ίδια διεύθυνση σε δύο διαφορετικές ημέρες μπορεί να είναι δύο άσχετοι συνδρομητές αν η θύρα ανακυκλώθηκε. Ένας διακομιστής που καταγράφει μόνο κλειδιά ομοτίμων δεν μπορεί να τα αντιστοιχίσει σε πελάτη χωρίς τη βάση δεδομένων λογαριασμών, και ένας διακομιστής που καταγράφει μόνο διευθύνσεις δεν ξεχωρίζει φορητό από τηλέφωνο πίσω από τον ίδιο δρομολογητή.
Συγκρίνετε τα δύο άκρα αντί να μαντεύετε
Για να ξεκαθαρίσετε τι συνέβη, καταγράψτε την ίδια σύνδεση και στα δύο άκρα την ίδια στιγμή και συγκρίνετε την πλειάδα, όχι τη διεύθυνση. Στον πελάτη, πριν από οποιαδήποτε μετάφραση:
ss -uapn 'dport = :51820'
ip -4 route get 203.0.113.10
wg show wg0 endpoints
Έπειτα διαβάστε την καταχώριση μετάφρασης στον δρομολογητή ή στην πύλη CGNAT και τι φτάνει τελικά στον διακομιστή:
conntrack -L -p udp --dport 51820
tcpdump -ni eth0 udp port 51820
Τρία μοτίβα εξηγούν τα περισσότερα ασυμβίβαστα. Η θύρα πηγής στον διακομιστή διαφέρει από την τοπική θύρα ενώ ο προορισμός ταιριάζει: συνηθισμένη μετάφραση θυρών. Η διεύθυνση πηγής στον διακομιστή ανήκει σε μπλοκ ISP που δεν είναι δικό σας: τουλάχιστον ένα επιπλέον επίπεδο NAT. Τα πακέτα σταματούν μετά από περίοδο αδράνειας και συνεχίζουν με νέα θύρα: η αντιστοίχιση έληξε, όχι βλάβη δρομολόγησης. Αν οι χρονικές σφραγίδες απέχουν περισσότερο από ένα ή δύο δευτερόλεπτα, συγκρίνετε δύο διαφορετικές προσπάθειες.
Πού η διαφορά χαλάει τα πράγματα
Οι διακοπές που μοιάζουν με βλάβες διακομιστή συνήθως ξεκινούν εδώ. Ένας κανόνας πρόσβασης καρφιτσωμένος στη διεύθυνση του σπιτιού σας αποτυγχάνει όταν αλλάξει η μίσθωση του ISP. Ένας κανόνας fail2ban που ταιριάζει με μεταφρασμένη διεύθυνση αποκλείει όλους τους συνδρομητές πίσω από αυτή την πύλη ταυτόχρονα. Ένας ομότιμος τοποθεσίας-σε-τοποθεσία με σταθερή απομακρυσμένη διεύθυνση σταματά να ανανεώνει κλειδιά όταν αλλάξει μια κινητή ζεύξη. Το πρωτόκολλο της σήραγγας ήταν εντάξει· η παραδοχή για την εξωτερική πλειάδα δεν ήταν.
Η ίδια σύγχυση εμφανίζεται και στην πλευρά του διακομιστή. Αν το ίδιο το κουτί VPN βρίσκεται πίσω από NAT, χρειάζεστε προώθηση θύρας και λειτουργική διαδρομή προώθησης· ο οδηγός προώθησης του strongSwan καλύπτει αυτή την περίπτωση για IPsec. Ένας διακομιστής προσβάσιμος μόνο σε ιδιωτική διεύθυνση δεν βλέπει ποτέ τη μεταφρασμένη πλειάδα που παρουσιάζουν οι πελάτες του, και αυτό είναι διαφορετικό πρόβλημα από το να μεταφράζονται οι πελάτες.
Περάστε από αυτούς τους τέσσερις ελέγχους με σειρά και σταματήστε στον πρώτο που αποτυγχάνει:
- Καταγράψτε και στα δύο άκρα ταυτόχρονα· επιβεβαιώστε ότι η θύρα πηγής, η θύρα προορισμού και οι χρονικές σφραγίδες συμφωνούν.
- Διαβάστε τη λίστα ομοτίμων του διακομιστή για τη διεύθυνση που κρατά τώρα, όχι για αυτή που περιμένατε.
- Ελέγξτε τον πίνακα conntrack ή NAT για την καταχώριση και την υπόλοιπη διάρκεια ζωής της.
- Επιβεβαιώστε ότι η διεύθυνση της διεπαφής σήραγγας στον πελάτη ταιριάζει με αυτή που εκχώρησε ο διακομιστής, όχι με τη διεύθυνση LAN.
Αν και οι δύο καταγραφές συμφωνούν στην πλειάδα και η σήραγγα εξακολουθεί να αποτυγχάνει, η μετάφραση δεν είναι το πρόβλημά σας· προχωρήστε στη χειραψία και στον πίνακα δρομολόγησης μέσα στη σήραγγα.