Το OpenVPN πέφτει μετά από ανανέωση DHCP: κρατήστε τη διαδρομή του τελικού σημείου
Μια ανανέωση DHCP μπορεί να αφήσει το τελικό σημείο της σήραγγας σε μια παρωχημένη πύλη, και οι μισές προεπιλεγμένες διαδρομές καταπίνουν τη σήραγγα. Διορθώστε ποιος κατέχει αυτή τη διαδρομή, όχι τη μετρική.
Η σήραγγα συνδέεται, μετά μια ανανέωση μίσθωσης στον ζεύξιμο σύνδεσμο τη σκοτώνει, και το αρχείο καταγραφής κατηγορεί ένα χρονικό όριο αντί για μια διαδρομή. Τίποτα στη διαμόρφωση του VPN δεν άλλαξε, και αυτό είναι το στοιχείο: άλλαξε κάτι έξω από αυτήν. Ένα συμβάν DHCP ξανάγραψε τη διεύθυνση ή την πύλη, και η διαδρομή διακομιστή που κρατούσε το τελικό σημείο της σήραγγας προσβάσιμο τώρα δείχνει σε ένα επόμενο άλμα που δεν υπάρχει πια. Αυτό είναι πρόβλημα ιδιοκτησίας πριν γίνει πρόβλημα δρομολόγησης.
Ελέγξτε το σύμπτωμα απέναντι στις μισές προεπιλεγμένες διαδρομές
Με το redirect-gateway def1, το OpenVPN εγκαθιστά τις 0.0.0.0/1 και 128.0.0.0/1 αντί να αντικαταστήσει την προεπιλεγμένη διαδρομή. Μαζί οι δύο καλύπτουν όλο τον χώρο διευθύνσεων, και κερδίζουν τη 0.0.0.0/0 μόνο με το μήκος του προθέματος. Γι' αυτό κάθε προορισμός χωρίς πιο ειδική αντιστοίχιση μπαίνει στη σήραγγα.
Το τελικό σημείο χρειάζεται μια εξαίρεση. Το OpenVPN προσθέτει μια διαδρομή διακομιστή προς τη διεύθυνση του εξυπηρετητή μέσω της αρχικής πύλης πρόσβασης πριν μπουν οι μισές προεπιλεγμένες, ώστε τα ενθυλακωμένα πακέτα να μπορούν να βγουν. Όταν αυτή η εξαίρεση εξαφανιστεί, ή κρατήσει ένα επόμενο άλμα που δεν υπάρχει πια, τα δικά της εξωτερικά πακέτα της σήραγγας αντιστοιχίζονται με μια μισή προεπιλεγμένη και στέλνονται πίσω μέσα στη σήραγγα. Το αποτέλεσμα είναι μια σύνδεση που πεθαίνει στο επόμενο keepalive ή χειραψία, χωρίς τίποτα στο αρχείο καταγραφής που να μοιάζει με σφάλμα δρομολόγησης.
Επιβεβαιώστε το σχήμα του πίνακα πριν αγγίξετε οτιδήποτε άλλο. Το ip route show πρέπει να εμφανίζει και τα δύο μισά συν μια διαδρομή διακομιστή για τη διεύθυνση του εξυπηρετητή· όταν λείπει η διαδρομή διακομιστή, η υπόλοιπη έρευνα έχει προφανές σημείο εκκίνησης.
Γιατί κερδίζουν οι μισές προεπιλεγμένες χωρίς αλλαγή μετρικής
Μια χαμηλότερη μετρική δεν νικά ένα μακρύτερο πρόθεμα. Οι διαδρομές /1 κερδίζουν επειδή ο πυρήνας αντιστοιχίζει πρώτα την πιο ειδική διαδρομή, οπότε το ανέβασμα της μετρικής στην προεπιλεγμένη διαδρομή δεν αλλάζει τίποτα για το πού πηγαίνει η κίνηση προς τη σήραγγα. Το κυνήγι των μετρικών είναι η πιο συνηθισμένη λάθος στροφή σε αυτή τη διάγνωση.
Ελέγξτε την επιλογή με το ip route get 203.0.113.10, βάζοντας την πραγματική διεύθυνση του εξυπηρετητή. Η απάντηση ονομάζει τη διεπαφή και το επόμενο άλμα που θα χρησιμοποιούσε πραγματικά ο πυρήνας, κάτι πιο κατατοπιστικό από το να διαβάζεις έναν πίνακα και να συλλογίζεσαι πάνω του.
Εκτελέστε αυτή την εντολή πριν ξεκινήσει η σήραγγα, όσο είναι ενεργή και μετά το συμβάν μίσθωσης. Τρεις απαντήσεις από μία εντολή, και το σημείο απόκλισης γίνεται ορατό.
Πάρτε τρεις στιγμιότυπα, όχι ένα
Συλλέξτε τη διεύθυνση πρόσβασης, την πύλη πρόσβασης, τον προορισμό του τελικού σημείου, την επιλεγμένη διαδρομή και τυχόν κανόνες πολιτικής σε τρεις στιγμές: αφού διαμορφωθεί ο ζεύξιμος σύνδεσμος, αφού συνδεθεί το VPN και μετά το συμβάν μίσθωσης ή παρόχου. Κάθε στιγμιότυπο είναι μια χούφτα εντολών, και έχουν νόημα μόνο μαζί. Ένα μόνο στιγμιότυπο μετά την αποτυχία καταγράφει την κατάσταση και όχι τη μετάβαση. Γράψτε τις εντολές σε ένα μικρό σενάριο, ώστε κάθε στιγμιότυπο να λαμβάνεται με τον ίδιο τρόπο.
Κρατήστε τα στιγμιότυπα σε ένα αρχείο με χρονικές σφραγίδες, γιατί η ενδιαφέρουσα ερώτηση αργότερα είναι η σειρά. Το συμβάν DHCP ήρθε πριν ή αφού το OpenVPN ανανέωσε τη διαδρομή του; Η απάντηση αποφασίζει ποιος πρέπει να το διορθώσει. Μια χρονική σφραγίδα από λάθος ρολόι είναι χειρότερη από καμία, οπότε πάρτε την από τον κεντρικό υπολογιστή που κατέχει τον πίνακα δρομολόγησης.
Όταν το τελικό σημείο είναι διαμορφωμένο ως όνομα αντί για διεύθυνση, επιλύστε το και σε κάθε στιγμιότυπο. Μια αλλαγή DNS στον ζεύξιμο σύνδεσμο μπορεί να μετακινήσει το τελικό σημείο χωρίς να αγγίξει καμία διαδρομή.
Αποφασίστε ποιο στοιχείο ανανεώνει την εξαίρεση
Σε σύστημα dhcpcd, τα άγκιστρα εκτελούνται από τον κατάλογο αγκίστρων και από το άγκιστρο εξόδου, και η λειτουργία διαχειριστή διαφέρει σε εύρος από τη λειτουργία ανά διεπαφή. Ό,τι κι αν κάνει το άγκιστρο, πρέπει να είναι αδύναμο στην επανάληψη, γιατί οι ανανεώσεις μπορούν να φτάνουν σε ριπές.
Ο αξιόπιστος ιδιοκτήτης είναι η ολοκλήρωση που γνωρίζει ήδη και τις δύο πλευρές: ένας διαχειριστής δικτύου που διαχειρίζεται τη σύνδεση VPN, ή μια μονάδα που διατάσσεται μετά την ανάδυση του ζεύξιμου συνδέσμου. Μια στατική διαδρομή που προσθέτει ένα άγκιστρο λειτουργεί μέχρι την επόμενη αλλαγή πύλης και μετά αποτυγχάνει με τον ίδιο ακριβώς τρόπο. Αν όντως χρησιμοποιήσετε άγκιστρο, κάντε το να διαβάζει την τρέχουσα πύλη κατά τον χρόνο εκτέλεσης αντί να κωδικοποιεί σκληρά αυτή που είδατε σήμερα.
Καταγράψτε τον ιδιοκτήτη μέσα στη διαμόρφωση. Το επόμενο άτομο που θα αποσφαλματώσει μια επανασύνδεση πρέπει να ξέρει ότι ένα άγκιστρο, όχι το VPN, είναι υπεύθυνο για τη διαδρομή εξαίρεσης.
Δοκιμάστε τον κύκλο ζωής, όχι μόνο την επανασύνδεση
Επιβάλετε μια ανανέωση με το dhcpcd -n eth0 ή απελευθερώνοντας και ανανεώνοντας τη μίσθωση, και μετά ελέγξτε ξανά το ip route get για το τελικό σημείο. Κάντε το δύο φορές, γιατί το δεύτερο πέρασμα πιάνει άγκιστρα που προσθέτουν διπλές διαδρομές. Μετά επανεκκινήστε, γιατί η επιμονή είναι διαφορετική ιδιότητα από την ορθότητα.
Μια σήραγγα που επιβιώνει από μια ανανέωση και μια επανεκκίνηση έχει ιδιοκτήτη και λειτουργική εξαίρεση. Μια που επιβιώνει μόνο από χειροκίνητη επανεκκίνηση δεν έχει κανένα από τα δύο, και θα αποτύχει στο επόμενο συμβάν που δεν μπορείτε να προγραμματίσετε.