Το NXDOMAIN πάνω από VPN δεν σημαίνει διακοπή της σήραγγας
Μια αρνητική απάντηση σημαίνει ότι απάντησε ένας resolver, όχι ότι σταμάτησαν τα πακέτα. Διαβάστε τον κώδικα, τον resolver και την αποθηκευμένη απάντηση πριν ξαναχτίσετε οτιδήποτε.
Είναι δελεαστικό να διαβάσει κανείς μια αποτυχημένη αναζήτηση ως απόδειξη ότι η σήραγγα κατέρρευσε, ειδικά όταν το όνομα λειτουργούσε δέκα λεπτά νωρίτερα. Η απάντηση λέει κάτι άλλο. NXDOMAIN είναι μια ολοκληρωμένη συναλλαγή DNS κατά την οποία ένας resolver δήλωσε ότι το όνομα που ερωτήθηκε δεν υπάρχει· μια σπασμένη σήραγγα συνήθως παράγει σιωπή, λήξη χρόνου ή απόπειρα επίλυσης προς τον λάθος διακομιστή. Η εκδοχή του επιχειρήματος χωρίς wireshark είναι ένα ερώτημα, ένας αποκρινόμενος και ένας κωδικός απάντησης, και αυτή η τριάδα αξίζει να καταγραφεί πριν από οποιαδήποτε αλλαγή ρυθμίσεων.
Τι αποδεικνύει πραγματικά η απάντηση
Το DNS διαχωρίζει αποτελέσματα που οι πελάτες συχνά συνενώνουν σε μία αποτυχία. Ένα όνομα που δεν υπάρχει παράγει αρνητική απάντηση με τον κωδικό NXDOMAIN, ενώ ένα όνομα που υπάρχει αλλά δεν έχει εγγραφή του ζητούμενου τύπου παράγει επιτυχημένη απάντηση με κενή ενότητα απαντήσεων. Και τα δύο μοιάζουν με κάτι άχρηστο για μια εφαρμογή, και μόνο το ένα σημαίνει ότι το όνομα είναι λάθος.
Αυτή η διαφορά καθορίζει πού ανήκει η διόρθωση. Μια εγγραφή AAAA που λείπει σε έναν κεντρικό υπολογιστή που έχει εγγραφή A δεν είναι κεντρικός υπολογιστής που λείπει, και η επανέκδοση πιστοποιητικού ή η ανακατασκευή σήραγγας για να την κυνηγήσει κανείς σπαταλά το μοναδικό στοιχείο που ήταν διαθέσιμο. Η διάκριση καθορίζει επίσης τη μορφή της συνέχειας: ένα πρόβλημα ονοματοδοσίας διορθώνεται στη ζώνη, και ένα πρόβλημα τύπου διορθώνεται ζητώντας τη σωστή εγγραφή ή αποδεχόμενοι ότι η οικογένεια διευθύνσεων απλώς απουσιάζει.
Ο μύθος: ένα απόν ιδιωτικό όνομα σημαίνει ότι η σήραγγα απέτυχε
Ο μύθος επιβιώνει επειδή τα δύο γεγονότα φτάνουν τόσο συχνά μαζί. Ένας πελάτης συνδέεται στο VPN, το λειτουργικό σύστημα κρατά έναν resolver που εμπιστευόταν ήδη, και το εσωτερικό όνομα που χρειάζεται τώρα ζητείται από έναν διακομιστή που δεν έχει ακούσει ποτέ για την ιδιωτική ζώνη. Αυτός ο διακομιστής απαντά ειλικρινά και αρνητικά. Η σήραγγα μεταφέρει το πακέτο· η απάντηση αφορά απλώς έναν χώρο ονομάτων που ο αποκρινόμενος δεν εξυπηρετεί.
Οι ρυθμίσεις split-horizon το κάνουν ρουτίνα: το ίδιο όνομα ζώνης υπάρχει δημόσια και εσωτερικά με διαφορετικό περιεχόμενο, και μόνο ο εσωτερικός resolver γνωρίζει τις ιδιωτικές εγγραφές. Το να λάβει κανείς μια αρνητική απάντηση που φαίνεται αυθεντική είναι επομένως απόδειξη για το ποιος resolver απάντησε, όχι απόδειξη για την κατάσταση της διεπαφής.
Δύο λεπτομέρειες ρυθμίσεων καθορίζουν το αποτέλεσμα. Η σήραγγα πρέπει να προωθεί ή να επιλέγει τον εσωτερικό resolver, και ο πελάτης πρέπει να εφαρμόζει αυτή την επιλογή στο όνομα που αναζητείται. Ένας κανόνας ανά τομέα που ονομάζει ένα επίθημα ελαφρώς διαφορετικό από την εγγραφή που πληκτρολογήσατε θα στείλει το ερώτημα στη δημόσια διαδρομή, και η απάντηση θα είναι σωστή και άχρηστη.
Ρωτήστε τον σωστό resolver με το σωστό όνομα
Καταγράψτε τον αποκρινόμενο πριν καταγράψετε την ετυμηγορία. Μια αναζήτηση που δεν δείχνει ποιος διακομιστής απάντησε δεν μπορεί να διακρίνει πρόβλημα πολιτικής από πρόβλημα χώρου ονομάτων, και τα δύο έχουν άσχετες διορθώσεις.
resolvectl query vpn.internal.example
resolvectl status | grep -A3 'DNS Servers'
dig +search app.intranet.example A
dig @10.8.0.1 app.intranet.example A
Οι δύο πρώτες γραμμές δείχνουν τι αποφάσισε ο τοπικός resolver και ποιον θα ρωτούσε. Η αναζήτηση +search αναπαράγει αυτό που κάνει μια εφαρμογή όταν προσθέτει επίθημα αναζήτησης, το οποίο συχνά είναι το πραγματικό ερώτημα και όχι αυτό που πληκτρολογήθηκε σε ένα διαγνωστικό εργαλείο. Η τελευταία γραμμή ρωτά απευθείας τον εσωτερικό διακομιστή, παρακάμπτοντας την πολιτική του πελάτη· αν αυτό πετύχει ενώ η απλή αναζήτηση αποτυγχάνει, η ζώνη είναι εντάξει και η δρομολόγηση των ερωτημάτων δεν είναι.
Η αρνητική προσωρινή αποθήκευση εξηγεί την καθυστέρηση μετά τη διόρθωση
Οι αρνητικές απαντήσεις αποθηκεύονται προσωρινά εκ σχεδιασμού, και το RFC 2308 περιγράφει πώς η διάρκεια ζωής της αρνητικής προσωρινής μνήμης προκύπτει από την εγγραφή αρχής της ζώνης. Η διόρθωση μιας εγγραφής ή ενός κανόνα resolver επομένως δεν εγγυάται άμεση αλλαγή στον πελάτη, και η επανάληψη μιας αναζήτησης που εξακολουθεί να επιστρέφει την αποθηκευμένη απάντηση δεν αποδεικνύει τίποτα νέο. Μόνο ένας διαφορετικός αποκρινόμενος, ένα διαφορετικό όνομα ή μια αδειασμένη προσωρινή μνήμη παράγει νέα στοιχεία.
Αδειάστε την τοπική προσωρινή μνήμη και μετά επαναλάβετε το ίδιο ερώτημα στον ίδιο αποκρινόμενο. Σε συστήματα που χρησιμοποιούν την τοπική υπηρεσία resolver αυτό είναι μία εντολή· σε άλλα είναι επανεκκίνηση υπηρεσίας ή εργαλείο πλατφόρμας, και το συγκεκριμένο εργαλείο έχει λιγότερη σημασία από την επανάληψη μιας πανομοιότυπης δοκιμής μετά.
Χωρίστε το όνομα από τη διαδρομή
Μόλις το όνομα επιλυθεί στην αναμενόμενη ιδιωτική διεύθυνση, το DNS τελείωσε ως θέμα και η διαδρομή της εφαρμογής γίνεται το επόμενο ερώτημα. Ένας κεντρικός υπολογιστής που απαντά σε αναζητήσεις αλλά αρνείται μια σύνδεση έχει άλλο πρόβλημα, και το να συνεχίζει κανείς να ρυθμίζει resolvers μετά από μια σωστή απάντηση είναι ο τρόπος με τον οποίο ένα περιστατικό αποκτά τρεις άσχετες αλλαγές. Συγκρίνετε τη διεύθυνση που επιλύθηκε με εκείνη στην οποία η υπηρεσία ακούει πραγματικά πριν υποθέσετε ότι συμφωνούν.
Κρατήστε το αρχείο: το ερώτημα, τον αποκρινόμενο, τον κωδικό και τη διεύθυνση που επιλύθηκε. Αυτή η καταγραφή είναι επίσης αυτό που κάνει μια μεταγενέστερη αναφορά επαληθεύσιμη, και είναι η διαφορά ανάμεσα σε μια διάγνωση και σε μια ιστορία για μια σήραγγα που φαινόταν αργή.