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

Εκτελέστε τα βήματα με τη σειρά, γιατί το πρώτο αποφασίζει αν η υπόλοιπη σελίδα σας αφορά καθόλου. Αν προσπεράσετε, θα περάσετε ένα βράδυ ρυθμίζοντας ένα χρονόμετρο για μια βλάβη που δεν έχει καμία σχέση με αυτό.

Ξεχωρίστε ένα μαλακό reset από μια επανεκκίνηση

Η γραμμή καταγραφής είναι όλη η διάγνωση. Μια επαναδιαπραγμάτευση γράφει ένα μαλακό reset και μετά μια νέα ανταλλαγή κλειδιών μέσα στην ίδια σήραγγα: η διεπαφή κρατά τη διεύθυνσή της, οι διαδρομές δεν προστίθενται ξανά και οι εγκατεστημένες συνεδρίες TCP συνήθως επιβιώνουν με μια παύση. Μια πραγματική επανεκκίνηση κόβει τη συνεδρία, ξαναχτίζει τη διεπαφή, μπορεί να δώσει άλλη διεύθυνση πελάτη και σκοτώνει κάθε μακρόβια σύνδεση. Και τα δύο συμβάντα είναι συνηθισμένα· μόνο ένα εξηγεί μια κομμένη κλήση.

journalctl -u openvpn-client@office -b --no-pager | grep -nE 'soft reset|Connection reset|reneg|TLS Error'
openvpn --version | head -n 1

Η γραμμή έκδοσης έχει σημασία γιατί η διατύπωση στο αρχείο καταγραφής αλλάζει μεταξύ εκδόσεων, και ένα μήνυμα που θυμάστε από την 2.3 μπορεί να διατυπώνεται διαφορετικά στην 2.6. Διαβάστε το δικό σας αρχείο καταγραφής και όχι ένα απόσπασμα φόρουμ κάποιου άλλου. Παραθέστε την ακριβή γραμμή όταν ζητάτε βοήθεια, γιατί μια παράφραση χάνει τη λεπτομέρεια που αναγνωρίζει το συμβάν. Αν η διεύθυνση της διεπαφής μένει αμετάβλητη κατά το συμβάν και η λίστα συνεδριών επιβιώνει, βλέπετε ανανέωση και τα υπόλοιπα τμήματα ισχύουν.

Διαβάστε το ενεργό χρονόμετρο, όχι το αρχείο σας

reneg-sec είναι ο αριθμός δευτερολέπτων μεταξύ των επαναδιαπραγματεύσεων του καναλιού δεδομένων και η προεπιλογή του είναι 3600. Κάθε πλευρά κουβαλά τη δική της τιμή, και η μικρότερη από τις δύο είναι αυτή που πράγματι πυροδοτεί την ανανέωση. Αυτός ο ένας κανόνας εξηγεί τις περισσότερες αναφορές: ένα προφίλ πελάτη που ορίζει μεγάλο αριθμό εξακολουθεί να επανέρχεται κάθε ώρα όσο ο διακομιστής κρατά την προεπιλογή.

grep -Rn --include='*.conf' -E 'reneg-sec|reneg-bytes' /etc/openvpn
# server side, including included files
grep -Rn -E '^reneg-sec' /etc/openvpn/server/

Διαβάστε και την ενεργή διαμόρφωση του διακομιστή, μαζί με ό,τι σπρώχνει, πριν βγάλετε συμπέρασμα από το αρχείο του πελάτη. Μετά ανεβάστε τη λεπτομέρεια και παρακολουθήστε ένα διάστημα από την αρχή ως το τέλος: το επίπεδο 3 δείχνει ήδη τις γραμμές επαναδιαπραγμάτευσης, και οι χρονικές σημάνσεις λένε αν το συμβάν επαναλαμβάνεται κάθε 3600 δευτερόλεπτα ή ακολουθεί τη δραστηριότητα.

Αλλάξτε το εκεί όπου πράγματι σπρώχνεται

Το φάρμακο που κυκλοφορεί είναι μία γραμμή στο προφίλ του πελάτη, και είναι το λάθος σημείο περίπου τις μισές φορές. Επειδή κερδίζει η χαμηλότερη τιμή της πλευράς, ένας πελάτης που θέτει το χρονόμετρο στο μηδέν μπορεί ακόμη να επαναδιαπραγματευτεί από διακομιστή που δεν άλλαξε.

# on both ends, or on the side that owns the pushed configuration
reneg-sec 0

Όπου τα προφίλ παράγονται κεντρικά, επεξεργαστείτε το πρότυπο και όχι το αναπτυγμένο αντίγραφο, αλλιώς η επόμενη εκτέλεση προμήθειας θα επαναφέρει την τιμή που μόλις αφαιρέσατε. Επαληθεύστε παρακολουθώντας δύο διαστήματα, όχι ένα: μία ήσυχη ώρα είναι συμβατή και με χρονόμετρο ρυθμισμένο στα 7200.

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

Τι χάνετε απενεργοποιώντας την επαναδιαπραγμάτευση

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

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

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

Όταν το διάστημα δείχνει αλλού

Δύο γείτονες στη διαμόρφωση παράγουν παρόμοια συμπτώματα και διαφορετικές διορθώσεις. Το ping-restart επανεκκινεί τη σήραγγα όταν δεν φτάνει τίποτα για ένα ρυθμισμένο διάστημα, ενώ το ping-exit κατεβάζει τον πελάτη εντελώς. Μια διακοπή αδράνειας χωρίς καμία επαναδιαπραγμάτευση πουθενά στο αρχείο καταγραφής ανήκει σε αυτά ή σε μια συσκευή NAT που έληξε την αντιστοίχιση UDP με το δικό της πρόγραμμα.

Τα οικιακά ρούτερ, τα hotspots κινητής και το NAT φορέα παρόχου λήγουν τις αδρανείς συνεδρίες UDP χωρίς να ειδοποιήσουν κανέναν. Αυτή η αποτυχία ακολουθεί την αδράνεια και όχι το ρολόι, και αυτό είναι το σημάδι: μια συνεδρία που πέφτει μετά από δέκα ήσυχα λεπτά και επιβιώνει μια ώρα σταθερής κίνησης δεν επαναδιαπραγματεύεται.

Γράψτε τρία πράγματα πριν αλλάξετε ένα τέταρτο: το διάστημα που μετρήσατε, την ενεργή τιμή που βρήκατε και την εντολή που την έδειξε. Αν το διάστημα κινείται όταν κινείται το χρονόμετρο, ο μηχανισμός αναγνωρίστηκε και η διόρθωση είναι απόφαση για την ανταλλαγή παραπάνω. Αν δεν κινείται, βάλτε πίσω τη ρύθμιση και συνεχίστε να κοιτάτε keepalives, κατάσταση NAT και απώλεια πακέτων.

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