Το pfSense ως διακομιστής και πελάτης VPN: δύο διαδρομές, ένας δρομολογητής
Μια εισερχόμενη υπηρεσία και ένα εξερχόμενο τούνελ εξόδου μπορούν να μοιράζονται μία συσκευή. Τρεις προϋποθέσεις κρίνουν αν οι διαδρομές, η μετάφραση και οι αστοχίες τους μένουν χωριστές.
Μία συσκευή μπορεί να κοιτά προς δύο κατευθύνσεις ταυτόχρονα: οι περιοδεύοντες χρήστες συνδέονται προς τα μέσα, και το ίδιο κουτί συνδέεται προς τα έξω σε έναν πάροχο εξόδου ώστε η επιλεγμένη κίνηση να βγαίνει από άλλο δίκτυο. Η ενεργοποίηση και των δύο υπηρεσιών παίρνει λεπτά· το να συνυπάρξουν απαιτεί σχεδιασμό, γιατί ο δεύτερος ρόλος ξαναγράφει τον πίνακα δρομολόγησης από τον οποίο εξαρτάται ο πρώτος. Τρεις προϋποθέσεις κρίνουν αν η διάταξη δουλεύει, δηλαδή αν η εισερχόμενη υπηρεσία κρατά τη δική της διαδρομή επιστροφής, αν το εξερχόμενο τούνελ φτάνει ακόμη στον ομόλογό του, και αν η κίνηση που θέλατε να προωθήσετε επιλέγεται για την έξοδο. Κάντε ένα λάθος και παίρνετε δύο τούνελ που και τα δύο αναφέρουν σύνδεση ενώ τίποτα χρήσιμο δεν περνά ανάμεσά τους. Οι έλεγχοι παρακάτω τεκμηριώνουν κάθε προϋπόθεση με τη σειρά που εμφανίζονται συνήθως οι αστοχίες.
Ονομάστε τους δύο ρόλους πριν αγγίξετε οποιαδήποτε ρύθμιση
Γράψτε τέσσερα γεγονότα για κάθε παρουσία: τον απομακρυσμένο ομόλογό της, το υλικό ταυτοποίησης, τη δεξαμενή διευθύνσεων που μοιράζει και τα δίκτυα πίσω της. Οι δύο παρουσίες είναι ξεχωριστά αντικείμενα στη συσκευή και πρέπει να μείνουν ξεχωριστές και στις σημειώσεις σας. Σχεδόν κάθε μπερδεμένο σύμπτωμα αργότερα προέρχεται από την ανάμειξη των τιμών τους, και δύο παρουσίες που μοιράζονται ένα σύνολο σημειώσεων είναι ο τρόπος με τον οποίο η λάθος δεξαμενή καταλήγει στο λάθος πεδίο.
Η εισερχόμενη υπηρεσία χρειάζεται ένα δίκτυο τούνελ που δεν επικαλύπτεται με τις διευθύνσεις του εξερχόμενου τούνελ ούτε με οποιοδήποτε ιδιωτικό δίκτυο που δρομολογεί η συσκευή. Η επικάλυψη είναι το μόνο λάθος που παράγει συμπτώματα και στους δύο ρόλους ταυτόχρονα, και είναι πολύ φθηνότερο να το πιάσεις στο χαρτί. Συγκρίνετε και τις δύο δεξαμενές και κάθε δρομολογούμενο ιδιωτικό δίκτυο σε ένα μέρος πριν ρυθμίσετε οποιαδήποτε από τις υπηρεσίες.
Το κοινό υλικό δεν σημαίνει κοινά διαπιστευτήρια, και ένα πιστοποιητικό πελάτη από τη δεξαμενή απομακρυσμένης πρόσβασης δεν θα έπρεπε να είναι χρησιμοποιήσιμο απέναντι στον πάροχο εξόδου. Το ξεχωριστό υλικό κάνει επίσης την ανάκληση τοπική απόφαση αντί για γεγονός σε όλο τον στόλο.
Κρατήστε τις απαντήσεις του διακομιστή στη διαδρομή WAN
Οι απαντήσεις που παράγει η ίδια η συσκευή είναι το πρώτο θύμα μιας απρόσεκτης προεπιλεγμένης διαδρομής. Όταν φτάνει το ενθυλακωμένο πακέτο ενός περιοδεύοντος χρήστη, η απάντηση είναι τοπικά προερχόμενη κίνηση και πρέπει να φύγει από τη διεπαφή από την οποία ήρθε αυτός ο χρήστης. Αν ο εξερχόμενος πελάτης έχει εγκαταστήσει μια προεπιλεγμένη διαδρομή που την αιχμαλωτίζει, η απάντηση μπαίνει στο λάθος τούνελ και η συνεδρία κολλάει ενώ η υπηρεσία εξακολουθεί να φαίνεται υγιής.
Δεν υπάρχει ένα μόνο κουτάκι ελέγχου που να το λύνει, γιατί η απόφαση αφορά το ποια κίνηση επιτρέπεται να αιχμαλωτίζει ο εξερχόμενος πελάτης. Είτε δεν τραβάτε καθόλου διαδρομές και κατευθύνετε μόνο ό,τι επιλέγετε, είτε τραβάτε διαδρομές και προσθέτετε τις εξαιρέσεις που κρατούν σε λειτουργία τις δικές της υπηρεσίες της συσκευής. Γράψτε την επιλογή δίπλα στην παρουσία, αλλιώς ο επόμενος θα υποθέσει την άλλη.
netstat -rn | head -20
pfctl -sr | grep -i vpn
ifconfig | grep -A3 ovpn
Διαβάστε τον πίνακα δρομολόγησης με τη μεγαλύτερη αντιστοίχιση και όχι με τη σειρά που ρυθμίσατε οτιδήποτε. Το ερώτημα είναι ποια εγγραφή κερδίζει για τη διεύθυνση του ομολόγου εξόδου και ποια εγγραφή κερδίζει για την απάντηση της εισερχόμενης υπηρεσίας, και αυτές οι δύο απαντήσεις μπορεί να διαφέρουν.
Μην αφήσετε το τούνελ εξόδου να φάει το δικό του τελικό σημείο
Ο εξερχόμενος πελάτης πρέπει να φτάσει τη δημόσια διεύθυνση του ομολόγου του για να στήσει καθόλου το τούνελ. Αν αυτή η διεύθυνση δρομολογείται η ίδια μέσα στο τούνελ, ο πελάτης κυνηγά την ουρά του: η μεταφορά δεν σηκώνεται ποτέ, ή σηκώνεται και πέφτει τη στιγμή που εγκαθίσταται η διαδρομή. Το αρχείο καταγραφής μοιάζει με λήξη χρόνου ταυτοποίησης και όχι με βλάβη δρομολόγησης, γι’ αυτό η διαδρομή αξίζει τον πρώτο έλεγχο.
Ελέγξτε τη διαδρομή πριν από τα διαπιστευτήρια και ξανά αφού σηκωθεί το τούνελ, γιατί μια εγγραφή μπορεί να είναι σωστή στην εκκίνηση και λάθος ένα λεπτό αργότερα. Η διεύθυνση του ομολόγου πρέπει να δείχνει στην κανονική διαδρομή WAN, ποτέ στη συσκευή τούνελ. Μόλις σταθεροποιηθεί η μεταφορά, το ενδιαφέρον ερώτημα μετακινείται στην προωθούμενη κίνηση, που είναι η επόμενη απόφαση.
netstat -rn | grep -F '198.51.100.10'
traceroute -n 198.51.100.10
Διαλέξτε ποιοι χρήστες παίρνουν την έξοδο
Η πολιτική προέλευσης ανήκει στην είσοδο όπου η κίνηση μπαίνει στη συσκευή, οπότε διαλέξτε τη δεξαμενή απομακρυσμένης πρόσβασης ή στενότερες ταυτότητες μέσα της. Διατηρήστε τους ιδιωτικούς προορισμούς και τις εξαιρέσεις διαχείρισης που δεν πρέπει ποτέ να στέλνονται στην έξοδο, και βάλτε αυτούς τους κανόνες πριν από τον ευρύ. Η διαδρομή εξόδου χρειάζεται τότε τη δική της μετάφραση ή μια δρομολογούμενη διάταξη επιστροφής, που για τα περισσότερα σχέδια σημαίνει εξερχόμενο NAT στη διεπαφή εξόδου να καλύπτει τη δεξαμενή. Η μετάφραση δεν διαλέγει έξοδο· ξαναγράφει μόνο ό,τι έχει ήδη φύγει, άρα ένας κανόνας NAT σε άσχετο WAN δεν αλλάζει τίποτα στην επιλογή.
Επιβεβαιώστε ότι το απομακρυσμένο άκρο επιτρέπει προωθούμενη κίνηση από αυτό το σχέδιο, γιατί μερικοί πάροχοι το κάνουν και μερικοί όχι. Η διαφορά φαίνεται ως τούνελ που συνδέεται και δεν μεταφέρει τίποτα, που διαβάζεται εύκολα ως τοπική βλάβη. Δοκιμάστε τις τρεις ροές χωριστά, γιατί αποτυγχάνουν ανεξάρτητα και δύο από τις τρεις είναι μισοτελειωμένο σχέδιο.
openvpn --config user07.ovpn
curl -sS https://ifconfig.me
curl --interface 10.10.10.1 -sS https://intranet.corp.example/health
Η πρώτη εντολή είναι η εξωτερική σύνδεση του περιοδεύοντος χρήστη, και δουλεύει όταν ο πελάτης αναφέρει ότι η ακολουθία αρχικοποίησης ολοκληρώθηκε. Η δεύτερη, από εκείνο το συνδεδεμένο φορητό, θα έπρεπε να αναφέρει τη διεύθυνση του παρόχου εξόδου και όχι τη δική σας διεύθυνση WAN. Η τρίτη εκτελείται στη συσκευή δεμένη σε διεύθυνση της δεξαμενής, και ελέγχει την πολιτική προέλευσης για προωθούμενη κίνηση χωρίς να εμπλέκει καθόλου απομακρυσμένο χρήστη. Αν απαντήσει από το WAN αντί γι’ αυτό, η πολιτική δεν ταίριαξε, και καμία ποσότητα επεξεργασίας NAT δεν διορθώνει πρόβλημα επιλογής.
Αποφασίστε τι συμβαίνει όταν αποτυγχάνει η έξοδος
Γράψτε τη συμπεριφορά αποτυχίας πριν συμβεί: όταν πέσει το εξερχόμενο τούνελ, οι χρήστες γυρίζουν στο κανονικό WAN ή μπλοκάρονται μέχρι να επιστρέψει η έξοδος; Και οι δύο απαντήσεις είναι υπερασπίσιμες, και η συσκευή δεν θα διαλέξει για σας. Μια αφαιρεμένη διαδρομή ή μια πολιτική που δείχνει σε νεκρή πύλη δεν παράγει αυτόματα αποτέλεσμα πλήρους αποκλεισμού. Αν θέλετε αποκλεισμό, η πολιτική πρέπει να το λέει ρητά, και πρέπει να δοκιμαστεί αφαιρώντας την έξοδο και όχι συλλογιζόμενοι γι’ αυτήν. Αν θέλετε επιστροφή, δημοσιεύστε το στους χρήστες, γιατί η κίνηση που παίρνει σιωπηλά την κανονική διαδρομή είναι ακριβώς η κίνηση που κάποιος πίστευε ότι καλύπτεται.
Απενεργοποιήστε την παρουσία πελάτη, δείτε τι μπορεί ακόμη να φτάσει ένας συνδεδεμένος χρήστης και μετά ξεκινήστε την ξανά. Ένα αίτημα που λήγει είναι το αποτέλεσμα πλήρους αποκλεισμού που ζητήσατε· ένα που απαντά με τη διεύθυνση WAN είναι η επιστροφή που δεν τεκμηριώσατε. Επαναλάβετε τον έλεγχο για IPv6 και για DNS, γιατί μια πολιτική γραμμένη για IPv4 δεν λέει τίποτα για κίνηση AAAA και ένας επιλυτής που σπρώχνεται από οποιοδήποτε τούνελ απαντά από όπου φεύγει πραγματικά το ερώτημα.
pfSsh.php playback svc stop openvpn client 2
curl --max-time 6 -sS https://ifconfig.me
pfSsh.php playback svc start openvpn client 2
Η συνταγή της Netgate για δρομολογούμενο OpenVPN δείχνει πώς ταιριάζουν πολιτική προέλευσης, ανάθεση διεπαφής και εξερχόμενη μετάφραση, και το εύρος της από τοποθεσία σε τοποθεσία είναι το μέρος που δεν πρέπει να αντιγραφεί ολόκληρο. Αυτό που δεν θα σας πει είναι ποια από τις τρεις προϋποθέσεις παραπάνω έχει ήδη σπάσει το δικό σας σχέδιο.