Για έναν διακομιστή OpenVPN που δεν ξεκινά στην εκκίνηση προσφέρονται δύο λύσεις: να περιμένει κανείς τη διεύθυνση ή να αφήσει την υπηρεσία να επαναλαμβάνει έως ότου επιτύχει η δέσμευση. Και οι δύο αντιμετωπίζουν το ίδιο σύμπτωμα με διαφορετική συμπεριφορά αποτυχίας. Η αναμονή κωδικοποιεί μια συγκεκριμένη προϋπόθεση και αποτυγχάνει ηχηρά όταν αυτή λείπει· η επανάληψη κρύβει την προϋπόθεση και συνεχίζει να προσπαθεί. Ποια από τις δύο ανήκει στη μονάδα σας εξαρτάται από το αν η διεύθυνση είναι σχεδιασμένη εξάρτηση ή σύμπτωση χρονισμού.

Και οι δύο είναι καλύτερες από έναν σταθερό ύπνο, που ούτε περιμένει κάτι ούτε αναφέρει τι περίμενε.

Τι απαιτεί στην πραγματικότητα η επιλογή local

Το local ονομάζει τη διεύθυνση στην οποία ο δαίμονας δεσμεύει το socket του, και η δέσμευση σε μια διεύθυνση που δεν υπάρχει ακόμη αποτυγχάνει αμέσως με σφάλμα για τη ζητούμενη διεύθυνση. Όταν η επιλογή απουσιάζει, ο δαίμονας ακούει σε όλες τις διευθύνσεις, γι' αυτό το ίδιο προφίλ λειτουργεί σε μηχάνημα του οποίου η διεπαφή δεν έχει ανέβει: ακούει παντού αντί στη μία διεύθυνση που ονομάσατε. Αυτή η διαφορά είναι ολόκληρη η αποτυχία, και παραμένει αόρατη μέχρι μια επανεκκίνηση.

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

Αναμονή για τη διεύθυνση ή επανάληψη της δέσμευσης

Αναμονή σημαίνει ένα ExecStartPre που ερωτά μέχρι να εμφανιστεί η διεύθυνση, με φραγμένο αριθμό προσπαθειών και μη μηδενική έξοδο όταν ο χρόνος τελειώσει. Επανάληψη σημαίνει να αφήσετε την κύρια διεργασία να αποτύχει και να ζητήσετε από τον διαχειριστή υπηρεσιών να την ξεκινήσει ξανά, για παράδειγμα Restart=on-failure με RestartSec=5. Το πρώτο αναφέρει μια προϋπόθεση που λείπει ως αποτυχημένη μονάδα, ενώ το δεύτερο την αναφέρει ως σειρά επανεκκινήσεων που τελικά σταματά, κάτι πιο θορυβώδες στο ημερολόγιο αλλά που επιβιώνει μιας διεύθυνσης που φτάνει αργά για λόγους που δεν μπορείτε να προβλέψετε.

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

Γιατί το network-online.target δεν αρκεί

Το network-online.target υπόσχεται ό,τι εννοεί η ενεργή υλοποίηση δικτύου με το online, και τίποτα πέρα από αυτό. Με το systemd-networkd, το systemd-networkd-wait-online αποφασίζει πότε επιτυγχάνεται αυτός ο στόχος, και η προεπιλεγμένη αντίληψή του για το online μπορεί να ικανοποιηθεί πριν υπάρξει η συγκεκριμένη διεύθυνσή σας. Κάτω από το NetworkManager, η υπηρεσία wait-online εφαρμόζει τους δικούς της κανόνες. Η ταξινόμηση μετά τον στόχο είναι μια υγιής βάση, όχι εγγύηση ότι μία διεύθυνση, μια απάντηση DNS ή ένας απομακρυσμένος ομότιμος είναι έτοιμος.

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

Ελέγξτε τη δέσμευση μετά από ψυχρή εκκίνηση

Επαληθεύστε με πραγματική ψυχρή εκκίνηση και όχι με επανεκκίνηση υπηρεσίας, γιατί μια επανεκκίνηση κληρονομεί μια διεύθυνση που η ακολουθία εκκίνησης έπρεπε να δημιουργήσει. Μετά την εκκίνηση, το ss -lntp ή το ss -lunp δείχνει την τοπική διεύθυνση στην οποία κάθε ακροατής δεσμεύτηκε πραγματικά, και το journalctl -b -u openvpn-server@server δείχνει αν απέτυχε η πρώτη προσπάθεια. Συγκρίνετε τη δεσμευμένη διεύθυνση με εκείνη του προφίλ και μετά επαναλάβετε τη σύγκριση μετά από επανασύνδεση δικτύου.

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

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

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