Ακολούθησε το ερώτημα DNS βήμα βήμα για να βρεις την πραγματική πηγή
Μια διεύθυνση επιλυτή που επιβάλλεται δεν καθορίζει ποια πηγή βλέπει ο επιλυτής. Ακολούθησε τον πελάτη, τον προωθητή και τον διακομιστή που λαμβάνει, και γράψε τη διαδρομή.
Το να δώσεις σε έναν πελάτη μια διεύθυνση επιλυτή καθορίζει πού στέλνονται τα ερωτήματα, όχι ποια πηγή θα δει ο επιλυτής. Η δρομολόγηση, η προώθηση και η μετάφραση παίρνουν η καθεμία τη σειρά της ανάμεσα στα δύο άκρα. Ένα εγχειρίδιο για ερωτήματα πηγής ακολουθεί το ερώτημα βήμα βήμα και καταγράφει τι είδε πραγματικά κάθε παρατηρητής. Η σειρά μετράει, γιατί ένας ισχυρισμός που γίνεται πριν από την παρατήρηση είναι απλώς μια εικασία με καλύτερη μορφοποίηση.
Γράψε τη διάταξη πριν συλλέξεις στοιχεία
Τέσσερα σημεία μπορούν να σου πουν κάτι για μια πηγή DNS, και δεν λένε όλα το ίδιο. Ο πυρήνας του πελάτη ξέρει ποια πηγή θα χρησιμοποιούσε, ένας προωθητής ξέρει τι έστειλε προς τα πάνω, μια συσκευή που μεταφράζει ξέρει τι ξαναέγραψε, και ο επιλυτής που λαμβάνει ξέρει τι έφτασε. Γράψε ποια από αυτά μπορείς πραγματικά να φτάσεις πριν συλλέξεις οτιδήποτε.
| Observation point | What it can prove | What it cannot prove | How to read it |
|---|---|---|---|
| client kernel | which source address it would use for that resolver | anything a device in between rewrote | ip route get against the resolver address |
| forwarder | that it sent an upstream query, and from which source | what the client originally asked for | its own log and its cache state |
| translating device | that a source was rewritten, and to what | whether the query was legitimate | NAT policy and its counters |
| receiving resolver | the address that actually arrived | which client behind that address asked | a scoped capture on port 53 |
Γράψε και την προσδοκία σου, μαζί με τον επιλυτή που πιστεύεις ότι χρησιμοποιείται. Μια διαχωρισμένη διαδρομή μπορεί να στείλει ένα ερώτημα εντελώς αλλού, και μια κρυφή μνήμη μπορεί να απαντήσει χωρίς καμία ανταλλαγή προς τα πάνω, οπότε μια υπόθεση που κρατιέται μόνο στη μνήμη δεν θα επιβιώσει της πρώτης έκπληξης. Κράτησε τον δηλωμένο σχεδιασμό και την παρατηρούμενη διαδρομή σε ξεχωριστές στήλες του ίδιου σημειώματος· όταν τα δύο διαφωνούν, βρήκες το ερώτημα που αξίζει να κυνηγήσεις.
Έλεγξε ποια διεργασία έστειλε πραγματικά το ερώτημα
Ξεκίνα από τον πελάτη: κατέγραψε τη διεύθυνση του επιλυτή, το όνομα του ερωτήματος και την ώρα, και μετά επιβεβαίωσε ποια διεργασία το έστειλε. Η πρώτη γραμμή παρακάτω ονομάζει τη διεργασία που κρατά την υποδοχή UDP, και αυτός είναι ο έλεγχος που υπόσχεται αυτή η επικεφαλίδα. Αν αυτή η διεργασία είναι βοηθός προγράμματος περιήγησης ή περιβάλλον εκτέλεσης περιέκτη αντί για τον επιλυτή του συστήματος, το υπόλοιπο ίχνος περιγράφει μια διαδρομή που κανείς δεν ζήτησε.
ss -tunp 'dport = :53'
dig @10.20.30.53 host.corp.example +noall +answer
ip route get 10.20.30.53
Σε έναν υπολογιστή με πολλές διεπαφές, βρες ποια διεύθυνση πηγής επιλέγει ο πυρήνας για αυτόν τον προορισμό πριν κοιτάξεις οπουδήποτε αλλού. Είναι το τελευταίο σημείο όπου η διαδρομή είναι πλήρως υπό τον έλεγχό σου, και είναι η τιμή που θα συγκρίνεις με ό,τι αναφέρει ο επιλυτής. Μια απόκλιση είναι το σήμα ότι κάτι στο ενδιάμεσο ξαναέγραψε το πακέτο, ή ότι στάλθηκαν δύο διαφορετικά ερωτήματα.
Κράτησε τα ονόματα δοκιμών εσωτερικά, γιατί ένα εσωτερικό όνομα που υποβάλλεται σε δημόσιο επιλυτή δεν αποδεικνύει τίποτα για την εσωτερική διαδρομή και δημοσιεύει ένα όνομα που δεν χρειαζόταν να δημοσιεύσεις. Ένα πρόγραμμα περιήγησης με ασφαλές DNS ενεργό δεν θα εμφανιστεί καθόλου σε αυτή τη λίστα υποδοχών, και αυτή η απουσία είναι η ίδια η απάντηση.
Ο προωθητής κάνει ένα δεύτερο, ξεχωριστό ερώτημα
Ένας προωθητής μετατρέπει μια ανταλλαγή σε δύο. Το αίτημα προς τα κάτω φτάνει, και μετά ο προωθητής στέλνει το δικό του ερώτημα προς τα πάνω από μια διεύθυνση που επιλέγει. Η διαμόρφωσή του, όχι ο πελάτης, καθορίζει τι βλέπει ο επιλυτής προς τα πάνω.
Το εγχειρίδιο του dnsmasq αξίζει να διαβαστεί για αυτόν τον λόγο: τεκμηριώνει πώς ένας προωθητής επιλέγει διακομιστές προς τα πάνω και δεσμεύει την πλευρά ακρόασής του, και τίποτα σε αυτή τη διάταξη δεν μεταφέρει την πηγή του πελάτη προς τα πάνω. Ένα αρχείο καταγραφής επιλυτή που δείχνει διεύθυνση πύλης είναι επομένως φυσιολογικό και όχι απόδειξη σφάλματος. Η απουσία είναι εξίσου εύκολο να παρερμηνευτεί, γιατί ένα χτύπημα κρυφής μνήμης δεν παράγει κανένα ερώτημα προς τα πάνω και μοιάζει πανομοιότυπο με ένα ερώτημα που δεν έφτασε ποτέ. Διάβασε τη διαμόρφωση του προωθητή και την κατάσταση της κρυφής μνήμης του πριν βγάλεις οποιοδήποτε από τα δύο συμπεράσματα. Δύο ερωτήματα, δύο σημεία να κοιτάξεις.
Διάβασε την πηγή στον επιλυτή που λαμβάνει
Η μόνη παρατήρηση που λύνει το ζήτημα λαμβάνεται στην πλευρά του διακομιστή. Ό,τι συνάγεται από τη λίστα διεπαφών του πελάτη παραμένει υπόθεση μέχρι ο επιλυτής να αναφέρει τι έφτασε πραγματικά.
tcpdump -ni any port 53 and host 10.20.30.53
Κατέγραψε στον ξενιστή του επιλυτή, κράτησε την καταγραφή σύντομη και περιορισμένη, και αποθήκευσέ την όπου το επιτρέπει η πολιτική. Αν η παρατηρούμενη πηγή είναι μεταφρασμένη διεύθυνση, το επόμενο ερώτημα είναι ποια συσκευή έκανε τη μετάφραση και αν η πολιτική της είναι η προβλεπόμενη. Μια καταγραφή απαντά τι έφτασε· δεν εξηγεί γιατί η πολιτική το επέτρεψε. Ονόμασε τον παρατηρητή και το βήμα στο σημείωμα, γιατί ένας ισχυρισμός απορρήτου για μια πύλη αφορά αυτό το βήμα και όχι ολόκληρη τη διαδρομή.
Γράψε το εύρημα ως διαδρομή, όχι ως διεύθυνση
Κατέγραψε τον πελάτη, τον επιλυτή, οποιονδήποτε προωθητή, την παρατηρούμενη πηγή σε κάθε βήμα και την πολιτική που το διέπει. Αυτό το αρχείο απαντά στις περισσότερες μελλοντικές ερωτήσεις χωρίς άλλη καταγραφή. Σχεδίασέ το ως αλυσίδα, γιατί μια λίστα διευθύνσεων κρύβει ποιο βήμα παρήγαγε ποια.
Επισύναψε την ημερομηνία, την έκδοση του πελάτη και την αναθεώρηση της διαμόρφωσης στο σχέδιο, ώστε ένας μεταγενέστερος αναγνώστης να μπορεί να πει αν ισχύει ακόμη. Διαχώρισε την πηγή μεταφοράς από όλα τα άλλα που επεξεργάζεται η υπηρεσία, γιατί το να βλέπεις μια διεύθυνση πύλης δεν λέει τίποτα για το τι άλλο διατηρείται. Ούτε η τοποθεσία ενός επιλυτή λέει τίποτα για το ποιος πελάτης ρώτησε. Το να κρατάς αυτούς τους ισχυρισμούς χωριστούς είναι αυτό που κάνει το συμπέρασμα υπερασπίσιμο σε έλεγχο.