Ο ισχυρισμός ότι το NAT σπάει το L2TP/IPsec είναι μισός αληθινός και γι’ αυτό άχρηστος. Η μετάφραση διευθύνσεων είναι φυσιολογική, το NAT traversal υπάρχει ακριβώς για να την επιβιώνει, και εκατομμύρια πελάτες συνδέονται καθημερινά πίσω από έναν δρομολογητή. Αυτό που σπάει είναι ένα συγκεκριμένο στάδιο μιας συγκεκριμένης ανταλλαγής: το IKE δεν παίρνει ποτέ απάντηση, η ενθυλακωμένη σήραγγα απορρίπτεται από πολιτική που επιτρέπει μόνο ένα πρωτόκολλο, ή η αντιστοίχιση λήγει όσο η σήραγγα είναι αδρανής. Μόλις ξέρετε σε ποιο στάδιο βρίσκεστε, η διόρθωση είναι συνήθως ένας κανόνας ή ένα keepalive και όχι νέος σχεδιασμός VPN.

Ο μύθος είναι η λάθος ερώτηση

Η χρήσιμη ερώτηση δεν είναι «σπάει αυτό το NAT» αλλά «ποιο μέρος της ανταλλαγής μεταφράζεται και τι κάνει με αυτό η συσκευή που μεταφράζει». Το L2TP/IPsec είναι πρωτόκολλο με επίπεδα: το IKE διαπραγματεύεται, το ESP προστατεύει, και το L2TP μεταφέρει PPP μέσα σε αυτή την προστασία. Η μετάφραση διευθύνσεων αλληλεπιδρά διαφορετικά με κάθε επίπεδο, και οι υπογραφές αποτυχίας διακρίνονται αν κοιτάξετε το στάδιο διαπραγμάτευσης και όχι τον διάλογο σφάλματος.

Ένας δρομολογητής που περιηγείται στο web με επιτυχία αποδεικνύει μόνο ότι το TCP με μετάφραση θύρας προέλευσης λειτουργεί. Δεν λέει τίποτα για το UDP 500, το UDP 4500 ή το πρωτόκολλο 50, και αυτά είναι τα τρία πράγματα από τα οποία εξαρτάται αυτή η ανάπτυξη.

Στάδιο 1: το IKE πρέπει να πάρει απάντηση έστω και μία

Η πρώτη ανταλλαγή πηγαίνει στον αποκρινόμενο στη θύρα UDP 500. Αν δεν επιστρέψει απάντηση, τίποτα άλλο δεν έχει σημασία: το προκοινόχρηστο κλειδί, η πρόταση και τα διαπιστευτήρια μένουν αδιάβαστα. Παρακολουθήστε το αίτημα και την απάντηση αντί να συμπεράνετε από το timeout του πελάτη:

sudo tcpdump -n -i any 'udp port 500 or udp port 4500 or proto 50'
swanctl --list-sas

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

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

Στάδιο 2: η ενθυλάκωση αλλάζει αυτό που βλέπει το firewall

Το ESP είναι πρωτόκολλο IP, όχι θύρα TCP ή UDP, και η συνηθισμένη μετάφραση διευθύνσεων θυρών δεν έχει πεδίο θύρας για να ξαναγράψει. Γι’ αυτό το NAT traversal μεταφέρει το προστατευμένο ωφέλιμο φορτίο στο UDP 4500: η ενθυλάκωση δίνει στη συσκευή που μεταφράζει κάτι που ξέρει να μεταφράζει. Μόλις συμβεί αυτό, ένας κανόνας firewall γραμμένος μόνο για UDP 500 επιτρέπει τη διαπραγμάτευση και απορρίπτει τη σήραγγα, που παράγει το μπερδεμένο αποτέλεσμα όπου το αρχείο καταγραφής δείχνει επιτυχημένη φάση 1 και καθόλου κίνηση.

Η ίδια η ανταλλαγή IKE μπορεί επίσης να μετακινηθεί στο UDP 4500 αφού ανιχνευθεί NAT, κάτι που εκπλήσσει όσους επέτρεψαν 500 και τίποτα άλλο. Επιτρέψτε και τις δύο θύρες και προς τις δύο κατευθύνσεις στη διαδρομή, και θυμηθείτε ότι ένα firewall με κατάσταση κρατά τη ροή μόνο όσο βλέπει κίνηση.

Το πρωτόκολλο 50 εξακολουθεί να μετράει σε διαδρομές χωρίς μετάφραση, και σε διαδρομές όπου ένα ενδιάμεσο κουτί έχει ρυθμιστεί να το επιτρέπει. Αν κάνετε διάγνωση με αποκλεισμό, απενεργοποιήστε την υπόθεση αντί να προσθέτετε κανόνες μαζικά: επιτρέψτε 500, 4500 και ESP, επιβεβαιώστε ότι η σήραγγα ανεβαίνει, και μετά αφαιρέστε ό,τι αποδείχθηκε περιττό. Ένας κανόνας που κανείς δεν μπορεί να εξηγήσει είναι ένας κανόνας που κανείς δεν θα αφαιρέσει όταν γίνει αιτία της επόμενης διακοπής. Γράψτε τη στένωση στο αρχείο αλλαγών μαζί με το στάδιο που διόρθωσε, ώστε ο επόμενος μηχανικός να ξεκινήσει από τα στοιχεία σας και όχι από τον ίδιο εμπειρικό κανόνα.

Στάδιο 3: η αντιστοίχιση λήγει και η σήραγγα πεθαίνει

Μια συσκευή που μεταφράζει κρατά κατάσταση για τις ροές που προωθεί, και αυτή η κατάσταση έχει διάρκεια ζωής. Μια σήραγγα L2TP/IPsec μεταφέρει λίγη κίνηση όταν κανείς δεν τη χρησιμοποιεί, οπότε μια αδρανής σήραγγα μπορεί να ζήσει περισσότερο από την αντιστοίχισή της και να σταματήσει να λαμβάνει κίνηση επιστροφής. Ο πελάτης παραμένει πεπεισμένος ότι είναι συνδεδεμένος, ο διακομιστής δεν βλέπει τίποτα, και το πρώτο σύμπτωμα είναι συνήθως λήξη χρόνου εφαρμογής και όχι σφάλμα VPN.

Η ανίχνευση νεκρού ομολόγου και τα keepalive NAT υπάρχουν γι’ αυτό, και τα δύο άκρα πρέπει να είναι πρόθυμα να τα στέλνουν. Αν ο διακομιστής σας είναι πίσω από μετάφραση, η απαίτηση στην πλευρά των Windows είναι μια τεκμηριωμένη ρύθμιση μητρώου που κάνει τον διακομιστή να υποθέτει ενθυλάκωση UDP για τα δικά του εξερχόμενα πακέτα· χωρίς αυτήν, ο αποκρινόμενος στέλνει ESP που η συσκευή μετάφρασης δεν μπορεί να αντιστοιχίσει πίσω. Είναι θέμα ρύθμισης διακομιστή, όχι πελάτη.

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

Η φιλοξενία πίσω από NAT παρόχου είναι άλλο πρόβλημα

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

Κανένα κουτάκι IPsec pass-through δεν το αλλάζει αυτό, και καμία ρύθμιση πελάτη δεν το αντισταθμίζει. Οι υποστηριζόμενες απαντήσεις είναι μια διεύθυνση που είναι πραγματικά προσβάσιμη, ένα φιλοξενούμενο τελικό σημείο, ή μια αρχιτεκτονική όπου κάθε συμμετέχων κάνει εξερχόμενη σύνδεση. Η προδιαγραφή ενθυλάκωσης UDP λύνει το πρόβλημα μετάφρασης για ροές που υπάρχουν· δεν δημιουργεί εισερχόμενη διαδρομή όπου ο πάροχος δεν προσφέρει μία.

Συγκρίνετε λοιπόν δίκτυα αντί να μαντεύετε. Πάρτε την ίδια συσκευή και προφίλ σε άλλο επιτρεπόμενο δίκτυο και δείτε ποιο στάδιο αποτυγχάνει εκεί. Αν λειτουργεί αλλού, η διαφορά είναι στη διαδρομή, και αυτό περιορίζει την αναζήτηση στα τρία στάδια παραπάνω αντί σε όλη τη διαμόρφωση.

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