Γιατί το υποδίκτυο πίσω από έναν πελάτη OpenVPN είναι μη προσβάσιμο;
Το OpenVPN δεν μπορεί να μαντέψει ποιος πελάτης κατέχει ένα απομακρυσμένο LAN. Μια εγγραφή iroute στο αρχείο του πελάτη, μια διαδρομή επιστροφής και η προώθηση κάνουν αυτό το υποδίκτυο προσβάσιμο.
Τα ping στη διεύθυνση σήραγγας του διακομιστή πετυχαίνουν, ο πίνακας δρομολόγησης του πελάτη φαίνεται σωστός και το LAN πίσω από αυτόν τον πελάτη παραμένει μη προσβάσιμο. Ο πίνακας δρομολόγησης του πελάτη φαίνεται σωστός, ο διακομιστής έχει διαδρομή προς τη σήραγγα και τα πακέτα εξακολουθούν να εξαφανίζονται. Είναι το κλασικό σύμπτωμα μιας σήραγγας layer-3 που δεν γνωρίζει ότι ένας από τους πελάτες της είναι και πύλη.
Μια διεπαφή tun δεν έχει επόμενο άλμα ανά πελάτη. Ο πυρήνας βλέπει μία διεπαφή με πολλούς ομότιμους, οπότε η απόφαση για το ποιος πελάτης θα λάβει ένα πακέτο για ένα απομακρυσμένο LAN πρέπει να ληφθεί μέσα στη διεργασία OpenVPN. Αυτή η απόφαση ρυθμίζεται με iroute και χωρίς αυτή το πακέτο δεν έχει πού να πάει.
Ο διακομιστής δρομολογεί ανά πελάτη, όχι ανά διεπαφή
Όταν ο διακομιστής πρέπει να στείλει πακέτο στη διεύθυνση σήραγγας ενός πελάτη, η απάντηση είναι σαφής: η διεύθυνση ανήκει στη συνεδρία αυτού του πελάτη. Όταν ο προορισμός είναι ολόκληρο υποδίκτυο πίσω από αυτόν τον πελάτη, η διεύθυνση δεν ανήκει σε κανέναν που γνωρίζει ο διακομιστής, και η διαδρομή του πυρήνα προς τη σήραγγα λέει μόνο "από αυτή τη διεπαφή", χωρίς να δηλώνει τον ομότιμο.
OpenVPN το λύνει με εσωτερικό πίνακα δρομολόγησης που αντιστοιχίζει ένα πρόθεμα προορισμού σε συγκεκριμένο πελάτη. Αυτός ο πίνακας χτίζεται από εγγραφές iroute, γι' αυτό μια απλή διαδρομή στον κεντρικό υπολογιστή του διακομιστή δεν αρκεί. Η διαδρομή του πυρήνα φέρνει το πακέτο στη διεπαφή σήραγγας· η εσωτερική αντιστοίχιση αποφασίζει ποια συνεδρία το λαμβάνει. Γι' αυτό και η διόρθωση δεν εμφανίζεται ποτέ στην έξοδο δρομολογίων του πυρήνα.
Αν λείπει η αντιστοίχιση, το πακέτο φτάνει στον διακομιστή, ταιριάζει με τη διαδρομή σήραγγας και απορρίπτεται επειδή κανένας πελάτης δεν διεκδικεί τον προορισμό. Τίποτα δεν καταγράφει καθαρό σφάλμα, γι' αυτό η αποτυχία μοιάζει με σιωπηλή μαύρη τρύπα και όχι με βρόχο δρομολόγησης.
Γράφοντας την εγγραφή iroute που ονομάζει τον πελάτη
Το iroute ζει σε αρχείο διαμόρφωσης ειδικό για τον πελάτη, όχι στην κύρια διαμόρφωση του διακομιστή. Στρέψτε τον διακομιστή σε έναν κατάλογο με την επιλογή client-config-dir, μετά δημιουργήστε αρχείο του οποίου το όνομα είναι το κοινό όνομα του πιστοποιητικού του πελάτη και βάλτε το πρόθεμα μέσα.
Για ένα υποκατάστημα του οποίου το LAN είναι 10.20.0.0/24 και το κοινό όνομα πιστοποιητικού είναι branch-router, το αρχείο σε αυτή τη διαδρομή περιέχει γραμμή όπως iroute 10.20.0.0 255.255.255.0. Η κύρια διαμόρφωση χρειάζεται μόνο την επιλογή καταλόγου· το πρόθεμα ζει στον πελάτη.
Το κοινό όνομα είναι το εύθραυστο μέρος. Πιστοποιητικό εκδοθέν με διαφορετικό subject, ή ανάπτυξη που ταυτοποιεί χρήστες με όνομα χρήστη ενώ το αρχείο ονομάζεται κατά το πιστοποιητικό, παράγει αρχείο που δεν διαβάζεται ποτέ. Ελέγξτε το όνομα που αναφέρει πραγματικά ο διακομιστής για τη συνεδρία και σκεφτείτε την επιλογή που κάνει έναν μη ταιριαστό πελάτη να αποτύχει αντί να συνδεθεί σιωπηλά χωρίς τις διαδρομές του. Η μετονομασία του αρχείου ώστε να ταιριάζει με το πιστοποιητικό είναι διόρθωση πέντε λεπτών που αποτρέπει ένα πολύ μεγάλο βράδυ.
Ένας πελάτης μπορεί να κατέχει πολλά προθέματα. Προσθέστε μία γραμμή iroute ανά δίκτυο και κρατήστε τη λίστα δίπλα στις υπόλοιπες ρυθμίσεις αυτού του πελάτη ώστε η αντιστοίχιση να παραμένει ελέγξιμη.
Χτίζοντας τη διαδρομή επιστροφής και προς τις δύο κατευθύνσεις
Το να φτάσουν τα πακέτα στο απομακρυσμένο LAN είναι η μισή δουλειά. Ο πελάτης πρέπει επίσης να στέλνει την κίνηση αυτού του LAN στη σήραγγα, κάτι που γίνεται συνήθως σπρώχνοντας μια διαδρομή στον πελάτη: μια γραμμή όπως push "route 10.8.0.0 255.255.255.0" λέει σε κάθε πελάτη πώς να φτάσει το δίκτυο στην πλευρά του διακομιστή. Για το υποκατάστημα, η αντίστοιχη διαδρομή δείχνει στη σήραγγα για ό,τι πρέπει να φτάσει στην πλευρά του διακομιστή.
Η κατεύθυνση επιστροφής χρειάζεται ιδιοκτήτη στην απέναντι πλευρά. Εκεί κάποιος πρέπει να ξέρει τον δρόμο της επιστροφής: μια στατική διαδρομή στον δρομολογητή του LAN που στέλνει το pool VPN στον διακομιστή, ή μετάφραση διευθύνσεων στον διακομιστή πριν η κίνηση μπει στο LAN. Η στατική διαδρομή κρατά τις αρχικές διευθύνσεις ορατές στα αρχεία καταγραφής και τους κανόνες πρόσβασης, αλλά απαιτεί τη συνεργασία του ιδιοκτήτη του LAN· η μετάφραση είναι αυτάρκης αλλά κρύβει ποιος συνδέθηκε πραγματικά.
Η προώθηση πρέπει να είναι ενεργή στον κεντρικό υπολογιστή του διακομιστή. Χωρίς αυτή ο πυρήνας δέχεται το πακέτο από τη σήραγγα και αρνείται να το περάσει στη διεπαφή LAN, κάτι που από την πλευρά του πελάτη φαίνεται ίδιο με μια iroute που λείπει.
Έλεγχος προσβασιμότητας με τους σωστούς ανιχνευτές
Δοκιμάστε κατά επίπεδα αντί να κάνετε ping στο απομακρυσμένο άκρο και να μαντεύετε. Από τον διακομιστή, ελέγξτε ότι υπάρχει η εσωτερική αντιστοίχιση για το πρόθεμα και ότι η διαδρομή του πυρήνα δείχνει στη σήραγγα. Από τον πελάτη, επιβεβαιώστε ότι η διαδρομή που σπρώχτηκε είναι εγκατεστημένη και ότι η προεπιλεγμένη διαδρομή του για τη διεύθυνση LAN είναι η σήραγγα.
Μετά παρατηρήστε τα πακέτα. Μια σύλληψη στη διεπαφή σήραγγας δείχνει αν ο διακομιστής μεταδίδει προς τον πελάτη, και μια σύλληψη στη διεπαφή LAN δείχνει αν προωθεί. Αν η πρώτη δείχνει πακέτα και η δεύτερη τίποτα, το πρόβλημα είναι η προώθηση ή ένα φίλτρο· αν καμία δεν δείχνει τίποτα, η αναζήτηση απέτυχε νωρίτερα.
Δύο διακομιστές ενωμένοι με σήραγγα επαναλαμβάνουν τον ίδιο κανόνα και στις δύο πλευρές: ο καθένας χρειάζεται iroute για το pool του άλλου, και ο καθένας χρειάζεται τη διαδρομή και την προώθηση που κάνουν τη διαδρομή συμμετρική. Δρομολόγηση και πολιτική είναι ξεχωριστά ζητήματα εδώ. Η δρομολόγηση αποφασίζει πού μπορεί να πάει ένα πακέτο, ενώ ένας κανόνας FORWARD αποφασίζει αν επιτρέπεται, οπότε ένας πελάτης με δύο γραμμές iroute φτάνει και στα δύο προθέματα εκτός αν ένα φίλτρο πει διαφορετικά.