Το OpenVPN συνεχίζει να επαναλαμβάνει μετά από σφάλμα TLS: πώς να το σταματήσετε
Ένα σφάλμα TLS επαναλαμβάνεται από προεπιλογή, οπότε ο πελάτης κυκλώνει και το πρώτο σφάλμα χάνεται από την οθόνη. Το tls-exit τον κάνει να τερματίζει· ελέγξτε τι τον επανεκκινεί.
Ο πελάτης συνδέεται, αποτυγχάνει κατά τη διαπραγμάτευση TLS, περιμένει και δοκιμάζει ξανά τον ίδιο διακομιστή με το ίδιο αποτέλεσμα. Κάτω από έναν επόπτη που επανεκκινεί μια αποτυχημένη διεργασία, αυτές οι προσπάθειες γίνονται ατελείωτος βρόχος στο ημερολόγιο, και η πρώτη διαγνωστική γραμμή χάνεται από τα μάτια. Το OpenVPN διαθέτει μια επιλογή που μετατρέπει αυτή την αποτυχία διαπραγμάτευσης σε ορατή έξοδο αντί για άλλη μια επανάληψη. Είναι ρύθμιση διαγνωστικής και εποπτείας, όχι επισκευή, γι’ αυτό συνδυάστε την με μια πολιτική που αφήνει πραγματικά τη διεργασία να μείνει κάτω.
Ο κύκλος που κρύβει το πρώτο σφάλμα
Αυτό που βλέπετε είναι ένα επαναλαμβανόμενο μπλοκ και όχι μία αποτυχία: μια προσπάθεια σύνδεσης, ένα σφάλμα TLS, μια παύση και έπειτα η ίδια ακολουθία. Κάθε επανάληψη σπρώχνει την αρχική γραμμή πιο ψηλά στο ημερολόγιο. Αν η μονάδα επανεκκινεί σε αποτυχία, ο κύκλος μπορεί να συνεχιστεί για ώρες χωρίς να διαβάσει κανείς την αιτία. Το σύμπτωμα είναι ο βρόχος, αν και το υποκείμενο σφάλμα είναι ένα μόνο πρόβλημα διαπραγμάτευσης.
Οι διαδραστικές συνεδρίες το ανέχονται επειδή μια παροδική αποτυχία μπορεί να καθαρίσει στην επόμενη προσπάθεια. Οι αυτοματοποιημένες συνδέσεις δεν μπορούν να επιτρέψουν στον εαυτό τους την ίδια αισιοδοξία: η διεργασία πρέπει να σταματήσει για να δει ένας άνθρωπος ή ένας επόπτης την κατάσταση.
Πριν αλλάξετε οτιδήποτε, καταγράψτε έναν πλήρη κύκλο. Σημειώστε την απομακρυσμένη διεύθυνση, το στάδιο TLS που αναφέρεται στο σφάλμα και αν η διεργασία τερματίζει καθόλου.
Ο μηχανισμός επαναλήψεων πίσω από τον βρόχο
Η επανάληψη είναι η προεπιλογή επειδή αρκετά άσχετα χρονικά όρια μοιράζονται τον ίδιο μηχανισμό. Το connect-retry ορίζει το κενό μεταξύ των προσπαθειών σύνδεσης, το connect-retry-max μπορεί να περιορίσει πόσο συχνά δοκιμάζεται κάθε απομακρυσμένη καταχώριση, και το resolv-retry ρυθμίζει τις επαναλαμβανόμενες αναζητήσεις ονομάτων. Μια αποτυχία διαπραγμάτευσης TLS φτάνει σε αυτόν τον μηχανισμό ως συμβάν μεταφοράς, οπότε ο πελάτης προγραμματίζει άλλη μια προσπάθεια αντί να αναφέρει. Η προεπιλογή βοηθά σε ασταθή ζεύξη και βλάπτει σε σφάλμα που δεν μπορεί να γιατρευτεί.
Η επιλογή --tls-exit αλλάζει μόνο την περίπτωση διαπραγμάτευσης. Το εγχειρίδιο την περιγράφει ως έξοδο σε αποτυχία διαπραγμάτευσης TLS, που είναι στενότερο από την έξοδο σε κάθε σφάλμα. Τα χρονικά όρια, οι αποτυχίες του resolver και οι απορρίψεις ταυτοποίησης κρατούν τη δική τους συμπεριφορά.
Κάνοντας τον πελάτη να τερματίζει σε αποτυχία TLS
Βάλτε το tls-exit στο προφίλ που φορτώνει πραγματικά ο πελάτης, ή περάστε το --tls-exit κατά την εκκίνηση, και τρέξτε το μία φορά στο προσκήνιο. Διαβάστε την κατάσταση εξόδου και την τελευταία γραμμή του αρχείου καταγραφής, γιατί η κατάσταση είναι αυτό στο οποίο αντιδρά ένας επόπτης. Μια έξοδος όχι μηδενική μετά από αποτυχία διαπραγμάτευσης είναι το επιδιωκόμενο αποτέλεσμα. Αν η διεργασία συνεχίζει να επαναλαμβάνει αντί να τελειώνει, η επιλογή δεν βρίσκεται στο προφίλ που φορτώνει πραγματικά ο πελάτης.
Ο επόπτης αποφασίζει αν αυτή η έξοδος είναι ορατή. Μια μονάδα systemd με Restart=always ή Restart=on-failure ξεκινά ξανά τον πελάτη, οπότε ο βρόχος συνεχίζεται και η επιλογή μοιάζει να μην κάνει τίποτα. Ελέγξτε την πολιτική πριν κατηγορήσετε τον πελάτη:
systemctl show -p Restart -p RestartSec openvpn-client@office
journalctl -u openvpn-client@office -n 40 --no-pager
Το Restart=no αφήνει τη διεργασία κάτω, και το Restart=on-failure εξακολουθεί να επανεκκινεί μετά από μη μηδενική κατάσταση. Αν θέλετε η αποτυχία να είναι ορατή αλλά η υπηρεσία να ανακάμπτει από άσχετες καταρρεύσεις, ορίστε το Restart=on-failure και χρησιμοποιήστε τα StartLimitBurst και StartLimitIntervalSec για να σταματήσετε την καταιγίδα επανεκκινήσεων. Έπειτα διαβάστε την κατάσταση της μονάδας για να επιβεβαιώσετε τον τελευταίο κωδικό εξόδου: το systemctl status τον αναφέρει, και το ημερολόγιο κρατά το πρώτο σφάλμα πάνω από τις επανεκκινήσεις.
Γράψτε την απόφαση στη μονάδα ή στις σημειώσεις του προφίλ. Ένα προφίλ που τερματίζει σε αποτυχία TLS μοιάζει ατύχημα για τον επόμενο άνθρωπο, εκτός αν ο λόγος είναι καταγεγραμμένος. Δηλώστε ποιες αποτυχίες πρέπει να σταματούν τη διεργασία και ποιες πρέπει να επαναλαμβάνονται.
Αποδείξτε το με ένα προσωρινό τελικό σημείο
Για να δείτε τη συμπεριφορά πριν την εμπιστευτείτε, αντιγράψτε το προφίλ και στρέψτε το αντίγραφο σε ένα τελικό σημείο που δέχεται σύνδεση TCP αλλά δεν μιλά ποτέ OpenVPN. Αρκεί ένας ακροατής που απαντά και μετά σωπαίνει. Με το tls-exit, ο πελάτης πρέπει να τελειώνει όταν αποτυγχάνει η χειραψία· χωρίς αυτό, το ίδιο προφίλ πρέπει να συνεχίσει να κυκλώνει. Χρησιμοποιήστε το αντίγραφο, ποτέ το προφίλ εργασίας.
Συγκρίνετε τις δύο εκτελέσεις με την κατάσταση εξόδου και την πρώτη γραμμή σφάλματος, όχι με το πόσο διήρκεσε καθεμία. Η κατάσταση σας λέει αν ενεργοποιήθηκε η επιλογή, και η πρώτη γραμμή σας λέει ποιο στάδιο απέτυχε.
Αφαιρέστε το προφίλ δοκιμής όταν τελειώσετε. Ένα αντίγραφο με σκόπιμα λάθος τελικό σημείο είναι παγίδα για όποιον αργότερα ξεκινήσει κάθε προφίλ στον κατάλογο.
Στάδια που αυτή η επιλογή δεν φτάνει ποτέ
Μια απόρριψη ταυτοποίησης είναι μεταγενέστερο στάδιο. Αν ο διακομιστής αξιολογήσει τον λογαριασμό και τον αρνηθεί, το TLS έχει ήδη διαπραγματευτεί, οπότε το tls-exit δεν ενεργοποιείται. Οι ρυθμίσεις επανάληψης ταυτοποίησης είναι το επόμενο σημείο αναζήτησης, και ο λόγος του διακομιστή μετρά περισσότερο από την τελευταία γραμμή του πελάτη. Ένας λάθος κωδικός και ένα πιστοποιητικό που λείπει μπορούν να παράγουν παρόμοια μηνύματα στην πλευρά του πελάτη.
Μια διαδρομή που λείπει, ένας λάθος resolver ή μια μη προσβάσιμη πύλη είναι επίσης εκτός της επιλογής, γιατί δεν είναι αποτυχίες διαπραγμάτευσης. Η σιωπηλή απώλεια πακέτων είναι η λιγότερο προφανής περίπτωση: ανάλογα με το πόσο προχώρησε η ανταλλαγή, ο πελάτης μπορεί να αναφέρει αποτυχία διαπραγμάτευσης ή απλώς να λήξει το χρονικό όριο.
Κρατήστε τη διάκριση στις σημειώσεις σας. Η ρύθμιση είναι για διαγνωστική και εποπτεία και όχι για επισκευή, οπότε δεν διορθώνει ασυμφωνία κρυπτογράφησης, πρόβλημα πιστοποιητικού ή λάθος θύρα. Επισκευάστε πρώτα την αιτία της αποτυχημένης διαπραγμάτευσης και μετά αποφασίστε αν η άμεση έξοδος ταιριάζει ακόμη στην ανάπτυξη.