Δοκιμή ανάκτησης διακομιστή VPN μετά από επανεκκίνηση: τι να ελέγξετε πρώτα
Κάντε επανεκκίνηση χωρίς να είναι κανείς συνδεδεμένος και μετά συνδεθείτε από έξω. Ελέγξτε τη μονάδα, τη διεπαφή, τις διαδρομές και τους κανόνες τείχους προστασίας που πρέπει να επιστρέψουν μόνοι τους.
Κάντε επανεκκίνηση του διακομιστή χωρίς να είναι κανείς συνδεδεμένος και μετά συνδεθείτε από ένα δίκτυο που δεν ελέγχετε. Αυτή η μία δοκιμή απαντά αν η ανάκτηση είναι πραγματική, γιατί ένα τούνελ που λειτουργεί μόνο αφού κάποιος εκτελέσει μια εντολή με το χέρι δεν είναι ανάκτηση, είναι επισκευή. Οι περισσότεροι έλεγχοι σταματούν πολύ νωρίς: ο δαίμονας δείχνει ενεργός, η διεπαφή εμφανίζεται, και η σελίδα ακόμη δεν φορτώνει. Το κενό είναι σχεδόν πάντα στη διατήρηση των κομματιών γύρω από το τούνελ, όχι στην ίδια την εντολή του τούνελ.
Τέσσερις ιδιοκτήτες, τέσσερις διαφορετικές δοκιμές
Πριν την επανεκκίνηση, ονομάστε τι υποτίθεται ότι θα επαναφέρει το τούνελ. Η δοκιμή που εκτελείτε και η διόρθωση που εφαρμόζετε εξαρτώνται και οι δύο από αυτή την απάντηση, και υπάρχουν τέσσερις συνήθεις ιδιοκτήτες: μια μονάδα systemd για τον δαίμονα VPN, μια μονάδα παρουσίας wg-quick για μια διεπαφή WireGuard, ένα runtime κοντέινερ ή ένα προφίλ διαχειριστή δικτύου. Αν δεν μπορείτε να ονομάσετε τον ιδιοκτήτη, σταματήστε και βρείτε τον, γιατί μια δοκιμή επανεκκίνησης χωρίς αναμενόμενη διαδρομή εκκίνησης σας λέει μόνο ότι κάτι συνέβη.
Κάθε ιδιοκτήτης κρατά τη διαμόρφωσή του σε διαφορετικό σημείο. Ένας διακομιστής OpenVPN που διαχειρίζεται το systemd διαβάζει τη διαμόρφωσή του κατά την εκκίνηση, οπότε ό,τι υπάρχει στο αρχείο κατά την εκκίνηση είναι αυτό που εκτελείται. Μια διεπαφή wg-quick αντλεί τις διευθύνσεις, τις διαδρομές και το DNS από το ίδιο αρχείο, που σημαίνει ότι μια διεπαφή που ανυψώθηκε με το χέρι από ένα κέλυφος και δεν ενεργοποιήθηκε ποτέ ως μονάδα δεν θα επιστρέψει. Ένα κοντέινερ επαναφέρει το σημείο εισόδου του αλλά όχι τις αλλαγές του τείχους προστασίας του κεντρικού υπολογιστή, εκτός αν αυτές ζουν έξω από το κοντέινερ.
Πρώτα η γραμμή βάσης, αλλιώς το αποτέλεσμα δεν σημαίνει τίποτα
Καταγράψτε την κατάσταση λειτουργίας όσο λειτουργεί: διευθύνσεις στο τούνελ, διαδρομές για το υποδίκτυο πελατών, κανόνες NAT ή προώθησης, το socket ακρόασης και το sysctl προώθησης. ip addr show wg0, ip route, nft list ruleset ή iptables-save, ss -lunp και sysctl net.ipv4.ip_forward αρκούν στους περισσότερους κεντρικούς υπολογιστές.
Καταγράψτε πώς είναι διαμορφωμένη η υπηρεσία για εκκίνηση, όχι μόνο ότι εκτελείται. systemctl is-enabled wg-quick@wg0 και systemctl is-active wg-quick@wg0 απαντούν σε διαφορετικά ερωτήματα, και η ενεργοποιημένη κατάσταση είναι αυτή που μετράει κατά την εκκίνηση, όπως περιγράφεται στο systemctl(1). Για το OpenVPN, ελέγξτε ποιο πρότυπο χρησιμοποιεί ο κεντρικός υπολογιστής, αφού τα openvpn@server και openvpn-server@server είναι διαφορετικές μονάδες με διαφορετικές προεπιλογές.
Εκτελέστε την επανεκκίνηση και διαβάστε την πρώτη αποτυχία
Κάντε επανεκκίνηση σκόπιμα, μέσα σε ένα παράθυρο που επιλέξατε, με ανοιχτή κονσόλα ή διαδρομή εκτός ζώνης. Παρακολουθήστε τη σειρά των γεγονότων αντί για την τελική κατάσταση: κεντρικός υπολογιστής προσβάσιμος, μονάδα ενεργοποιημένη, διεπαφή παρούσα, διαδρομές εγκατεστημένες, κανόνες τείχους προστασίας παρόντες, ακροατής δεσμευμένος, πελάτης αποδεκτός. Το πρώτο βήμα που δεν συμβαίνει είναι το εύρημα· ό,τι ακολουθεί είναι θόρυβος.
Ένας δαίμονας μπορεί να είναι ενεργός ενώ το τούνελ είναι άχρηστο, και αυτό είναι το πιο συνηθισμένο ψευδές πέρασμα. Η εκκίνηση μπορεί να ολοκληρωθεί πριν το δίκτυο είναι σε απευθείας σύνδεση αν η μονάδα περιμένει μόνο το network.target αντί για το network-online.target. Τα αναφερόμενα αρχεία όπως πιστοποιητικά, κλειδιά ή ένα CRL μπορεί να είναι μη αναγνώσιμα εκείνη τη στιγμή επειδή μια προσάρτηση ή μια διαδρομή μυστικών δεν είναι έτοιμη ακόμη. Κανένα από τα δύο προβλήματα δεν εμφανίζεται στο systemctl status μέχρι να διαβάσετε το ημερολόγιο της μονάδας.
Δοκιμάστε από έξω από τον κεντρικό υπολογιστή. Ένας πελάτης στο ίδιο LAN μπορεί να πετύχει μέσω μιας διαδρομής που κανένας απομακρυσμένος πελάτης δεν θα χρησιμοποιούσε ποτέ, και μια συνεδρία SSH στο μηχάνημα δεν αποδεικνύει τίποτα για το τούνελ. Συνδεθείτε, επιλύστε ένα εσωτερικό όνομα, φτάστε στον ιδιωτικό πόρο και μετά συνδεθείτε ξανά μία φορά για να επιβεβαιώσετε ότι η κατάσταση ανάκλησης και τα κλειδιά εξακολουθούν να ισχύουν.
Οι τρεις συνθήκες που καθορίζουν τη διόρθωσή σας
Αν το τούνελ επιστρέψει αλλά οι πελάτες δεν φτάνουν πουθενά, η αποτυχία είναι στη δρομολόγηση ή στη διατήρηση του NAT. Αν οι πελάτες δεν μπορούν καν να ολοκληρώσουν μια χειραψία, η αποτυχία είναι στη διεπαφή ή στο υλικό πιστοποίησης. Αν η υπηρεσία δεν ξεκινά ποτέ, η αποτυχία είναι στο αρχείο μονάδας ή στις εξαρτήσεις του. Αυτοί οι τρεις κλάδοι οδηγούν σε διαφορετικές διορθώσεις, γι' αυτό μια τυφλή επανεκκίνηση χωρίς γραμμή βάσης κοστίζει περισσότερο χρόνο από όσο εξοικονομεί.
Κάντε τη διόρθωση εκεί όπου η ρύθμιση ανήκει. Βάλτε την προώθηση σε ένα drop-in του sysctl, βάλτε τους κανόνες NAT στο σύνολο κανόνων που φορτώνεται κατά την εκκίνηση, ενεργοποιήστε τη μονάδα αντί να την ξεκινήσετε, και κρατήστε τα μυστικά σε μια διαδρομή που υπάρχει πριν ξεκινήσει η μονάδα. Η προσθήκη ύπνου στη μονάδα κρύβει μια εξάρτηση αντί να τη δηλώνει.
Καταγράψτε το αποτέλεσμα στο runbook
Γράψτε τι επέστρεψε μόνο του, τι έπρεπε να ξεκινήσετε και πόσο κράτησε το κενό. Συμπεριλάβετε τις ακριβείς εντολές που χρησιμοποιήσατε για επαλήθευση, ώστε το επόμενο άτομο να επαναλάβει τη δοκιμή αντί να εφεύρει μία. Αν κάποιο βήμα χρειάστηκε χειροκίνητη εντολή, αυτή η εντολή ανήκει στη διαμόρφωση, όχι στο runbook ως μόνιμο βήμα.
Στη συνέχεια προγραμματίστε την επόμενη δοκιμή για μετά την επόμενη αλλαγή στη στοίβα δικτύου του κεντρικού υπολογιστή, όχι για μια ημερομηνία ημερολογίου έξι μήνες μετά. Ο τρόπος αποτυχίας από τον οποίο προστατεύεστε είναι μια προσωρινή εντολή που έμοιαζε μόνιμη, και αυτές εμφανίζονται ακριβώς όταν κάποιος επεξεργάζεται κανόνες τείχους προστασίας ή μετακινεί μια υπηρεσία σε νέα μονάδα.