OpenVPN iroute ή διαδρομή πυρήνα: ποια λείπει;
Ο διακομιστής έχει διαδρομή και η κίνηση σταματά παρ’ όλα αυτά. Η μία απόφαση διαδρομής ανήκει στον πυρήνα και η άλλη στον ομότιμο κόμβο· μάθετε ποια λείπει και τι να ελέγξετε.
Ένα πακέτο για το 10.77.20.0/24 παίρνει δύο ξεχωριστές αποφάσεις σε έναν διακομιστή OpenVPN: το λειτουργικό σύστημα πρέπει να το παραδώσει στη διεπαφή VPN, και το OpenVPN πρέπει να γνωρίζει ποιος συνδεδεμένος πελάτης κατέχει αυτό το πρόθεμα. Μια διαδρομή πυρήνα που λείπει το απορρίπτει πριν από το τούνελ, και μια διαδρομή ομοτίμου που λείπει το απορρίπτει μετά. Οι δύο αποτυχίες φαίνονται ίδιες από το απομακρυσμένο LAN, και η διάγνωση του ποια έχετε απαιτεί μία εντολή σε κάθε πλευρά.
Στην κλασική διαδρομή δεδομένων στον χώρο χρήστη, η διαδρομή πυρήνα φέρνει το πακέτο στη διεργασία του τούνελ και το iroute λέει σε αυτή τη διεργασία ποιος ομότιμος πρέπει να το λάβει. Κανένα δεν αντικαθιστά το άλλο, και μια διαμόρφωση που φέρει μόνο ένα από τα δύο θα φαίνεται λογική μέχρι το πρώτο ping.
Δύο αποφάσεις, όχι μία διαδρομή
Φανταστείτε μια ζεύξη από τοποθεσία σε τοποθεσία όπου το 10.77.20.0/24 βρίσκεται πίσω από έναν μόνο πελάτη. Η διαδρομή πυρήνα του διακομιστή, για παράδειγμα ip route add 10.77.20.0/24 dev tun0, στέλνει τα αντίστοιχα πακέτα στη συσκευή τούνελ. Στη συνέχεια το OpenVPN συμβουλεύεται τον δικό του εσωτερικό πίνακα, που χτίζεται από καταχωρίσεις iroute στον κατάλογο διαμόρφωσης του πελάτη, για να αποφασίσει ποια σύνδεση ομοτίμου θα τα λάβει. Χωρίς τη διαδρομή πυρήνα το πακέτο δεν φτάνει ποτέ στη διεργασία, και χωρίς τη διαδρομή ομοτίμου φτάνει στη διεργασία και δεν πηγαίνει πουθενά.
Αυτός ο διαχωρισμός ξεχνιέται εύκολα, επειδή μία μόνο γραμμή διαδρομής σε ένα προφίλ πελάτη μπορεί να φαίνεται ότι κάνει και τις δύο δουλειές. Δεν τις κάνει: η ώθηση μιας διαδρομής λέει στους πελάτες τι να στέλνουν μέσα από το τούνελ, ενώ το iroute λέει στον διακομιστή ποιος κατέχει ένα εύρος διευθύνσεων πίσω από έναν πελάτη. Ζουν σε διαφορετικά αρχεία, διαβάζονται από διαφορετικές πλευρές και αποτυγχάνουν σε αντίθετες κατευθύνσεις.
Πού ανήκει το iroute και τι λέει
Η καταχώριση πηγαίνει σε αρχείο ανά πελάτη με όνομα από το common_name του πελάτη, κάτω από το client-config-dir, ως iroute 10.77.20.0/24. Η αντιστοιχία του ονόματος αρχείου δεν είναι διακοσμητική: το OpenVPN αναζητά την πιστοποιημένη ταυτότητα και διαβάζει το αρχείο με ακριβώς αυτό το όνομα, οπότε ένα αρχείο με όνομα site-a ισχύει μόνο για πελάτη του οποίου το κοινό όνομα είναι site-a. Προσθέστε ccd-exclusive αν πελάτες χωρίς τέτοιο αρχείο πρέπει να απορρίπτονται ευθέως, που είναι η σωστή ρύθμιση όταν κάθε πελάτης είναι πύλη τοποθεσίας. Κρατήστε ένα αρχείο ανά πύλη και ονομάστε το κατά το θέμα πιστοποιητικού που εκδίδετε πραγματικά.
Δοκιμάστε την καταχώριση από τον διακομιστή πριν κατηγορήσετε το απομακρυσμένο LAN. Το αρχείο κατάστασης απαριθμεί τους συνδεδεμένους πελάτες με τα κοινά τους ονόματα, και ένας διακομιστής που τρέχει με --verb 4 καταγράφει την εγκατάσταση του iroute τη στιγμή που συνδέεται ο ομότιμος. Αν δεν εμφανιστεί τίποτα κατά τη σύνδεση, το αρχείο βρίσκεται σε λάθος κατάλογο ή ονομάζει λάθος ταυτότητα.
Η παγίδα: αρχείο παρόν, λάθος ταυτότητα
Ένα iroute που φαίνεται σωστό αλλά είναι προσαρτημένο σε λάθος ομότιμο σπαταλά περισσότερο χρόνο από ένα αρχείο που λείπει, επειδή όλα στον δίσκο φαίνονται σωστά. Η μετονομασία πιστοποιητικών, τα διπλά κοινά ονόματα και το username-as-common-name που αλλάζει την πραγματική ταυτότητα τα παράγουν όλα. Ελέγξτε ποια ταυτότητα πιστοποίησε ο διακομιστής αντί για ποια περιμένατε: η έξοδος κατάστασης είναι η αυθεντία, ενώ το όνομα αρχείου είναι μόνο κλειδί αναζήτησης.
Μια διαδρομή μπορεί να επιβιώσει του ιδιοκτήτη της. Οι στατικές διαδρομές και οι καταχωρίσεις iroute περιγράφουν ένα πρόθεμα, όχι εγγύηση διαθεσιμότητας, οπότε η κίνηση μπορεί να συνεχίσει να δρομολογείται προς έναν ομότιμο που είναι αυτή τη στιγμή αποσυνδεδεμένος.
Ολοκληρώστε τη διαδρομή πέρα από τον ομότιμο
Η κυριότητα του ομοτίμου είναι το μέσο της διαδρομής, όχι το τέλος. Ο πελάτης πρέπει να προωθεί πακέτα από το τούνελ στο LAN του, που σημαίνει ενεργή προώθηση IP σε εκείνον τον κεντρικό υπολογιστή και κανόνα τείχους προστασίας που επιτρέπει τη διάβαση. Οι κεντρικοί υπολογιστές στο απομακρυσμένο LAN χρειάζονται διαδρομή επιστροφής για τη διεύθυνση του τούνελ: είτε διαδρομή που δείχνει πίσω στην πύλη, είτε σκόπιμο σχεδιασμό NAT στην πλευρά του πελάτη. Επιβεβαιώστε τη ρύθμιση προώθησης στον πελάτη με sysctl net.ipv4.ip_forward αντί να υποθέτετε μια προεπιλογή της διανομής.
Αν άλλοι πελάτες VPN πρέπει να φτάσουν αυτό το υποδίκτυο, η διάταξη μεγαλώνει ξανά: ο διακομιστής χρειάζεται client-to-client, και αυτοί οι πελάτες πρέπει να δρομολογούν το πρόθεμα μέσα από το τούνελ. Τίποτα από αυτά δεν υπονοείται από τον πίνακα δρομολόγησης του ίδιου του διακομιστή.
Επαληθεύστε έναν προορισμό από πραγματική πηγή αντί από τον ίδιο τον διακομιστή. Ένα ping από άσχετο κεντρικό υπολογιστή του LAN σε κεντρικό υπολογιστή πίσω από τον πελάτη ασκεί τη διαδρομή επιστροφής, τον κανόνα προώθησης και την κυριότητα του ομοτίμου σε μία κίνηση, ενώ μια επιτυχής χειραψία αποδεικνύει μόνο ταυτότητα. Στη συνέχεια αποσυνδέστε τον ομότιμο που κατέχει και καταγράψτε τι κάνει η διαδρομή, γιατί αυτή η απάντηση είναι ο τρόπος αποτυχίας σας.