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

Επιβεβαιώστε ότι το resolvconf κατέχει την κατάσταση

Προσδιορίστε πρώτα τον ιδιοκτήτη, γιατί το ίδιο σύμπτωμα υπό το systemd-resolved απαιτεί διαφορετικές εντολές και διαφορετική επισκευή. Το πακέτο resolvconf κρατά μια βάση δεδομένων κάτω από το /run/resolvconf και κατευθύνει το /etc/resolv.conf στο αρχείο που χτίζει από εκείνη τη βάση. Δύο αναγνώσεις λύνουν το ερώτημα: ο στόχος του συμβολικού δεσμού και το αν το πακέτο είναι εγκατεστημένο και ενεργό. Στόχος κάτω από το /run/systemd/resolve σημαίνει τον άλλο σχεδιασμό, όπου τίποτα παρακάτω δεν ισχύει.

dpkg -l resolvconf | tail -1
ls -l /etc/resolv.conf
systemctl is-active resolvconf.service

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

Η βάση δεδομένων κρατά εισόδους, όχι την απάντηση

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

sudo resolvconf --list
sudo resolvconf -i

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

Αντιγράψτε το κλειδί από την έξοδο αντί να το ξαναχτίσετε. Μια εγγραφή δεν ονομάζεται tun0 απλώς επειδή ένα παλιό σενάριο χρησιμοποίησε αυτό το όνομα.

Αποδείξτε ότι η εγγραφή δεν έχει ιδιοκτήτη

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

Τα ονόματα διεργασιών είναι αδύναμα στοιχεία. Το OpenConnect καλεί το vpnc-script, οπότε ένας έλεγχος για διεργασία vpnc δεν λέει τίποτα για το ποια εγγραφή είναι τρέχουσα. Μια νέα σύνδεση μπορεί επίσης να επαναχρησιμοποιήσει όνομα διεπαφής που άφησε μια παλιά, κάτι που κάνει το κλειδί να φαίνεται παλαιότερο απ’ ό,τι είναι. Συγκρίνετε τη διεύθυνση του διακομιστή μέσα στην εγγραφή με τις διευθύνσεις των τούνελ που στέκονται ακόμη, και σταματήστε αν ταιριάζουν.

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

Ελέγξτε την αφαίρεση και την επανεγγραφή

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

sudo resolvconf -d "RECORD_KEY_FROM_THE_LIST"
sudo resolvconf --list
resolvectl query host.corp.example || getent hosts host.corp.example

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

Το resolvconf -u εκτελεί μόνο εκείνα τα σενάρια ενημέρωσης. Δεν προσδιορίζει ποτέ ούτε διαγράφει παλιά εγγραφή, και η ανακατασκευή από παλιές εισόδους αναπαράγει το ίδιο ανεπιθύμητο αρχείο.

Ένα σκοτωμένο άγκιστρο αποσύνδεσης αφήνει την εγγραφή πίσω

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

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

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

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