Ενότητα 8 · 8.2
DNS opvragen met dig en nslookup
Ενότητα 8: Ασφάλεια και επίλυση προβλημάτων · Χρόνος ανάγνωσης: 10 λεπτά
Στόχος μαθήματος: Μετά από αυτό το μάθημα θα μπορείτε να αναζητάτε εγγραφές με dig και nslookup, να ρωτάτε έναν συγκεκριμένο nameserver και να διαβάζετε την έξοδο.
Βασικές έννοιες: dig, nslookup, Resolve-DnsName, +short, @server, +trace, τμήματα ANSWER και AUTHORITY, κατάσταση NOERROR, NXDOMAIN, SERVFAIL, dig -x
Γιατί να το ελέγξετε οι ίδιοι;
Ένα πίνακας ελέγχου δείχνει ό,τι έχετε συμπληρώσει εσείς. Αυτό που βλέπει ο υπόλοιπος κόσμος μπορεί να είναι διαφορετικό: ίσως το DNS το διαχειρίζεται άλλος φορέας, ίσως υπάρχει ακόμη μια παλιά απάντηση σε μια cache. Με ένα πρόγραμμα αναζήτησης θέτετε την ίδια ερώτηση που θα έθετε ένας browser ή ένας mailserver, και βλέπετε την πραγματική απάντηση.
Υπάρχουν τρία συνηθισμένα προγράμματα:
| Πρόγραμμα | Where | Comment |
|---|---|---|
dig | macOS, Linux (στα Windows μέσω WSL ή εγκαθίσταται ξεχωριστά) | Το πιο ολοκληρωμένο, τυπική επιλογή για διαχειριστές |
nslookup | Windows, macOS, Linux | Διαθέσιμο παντού, πιο συνοπτική έξοδος |
Resolve-DnsName | Windows PowerShell | Βολικό σε Windows χωρίς επιπλέον λογισμικό |
Δεν έχετε κοντά σας παράθυρο εντολών; Τότε μπορείτε να κάνετε ακριβώς το ίδιο με ένα online εργαλείο dig (μάθημα 8.3).
Η πρώτη σας ερώτηση με dig
Ανοίξτε το Terminal (macOS/Linux) και πληκτρολογήστε:
$ dig example.com AΗ έξοδος, σε συντομευμένη μορφή, μοιάζει ως εξής:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41872
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 2847 IN A 192.0.2.10
;; Query time: 12 msec
;; SERVER: 192.168.1.1#53(192.168.1.1) (UDP)Τι πρέπει να προσέξετε:
- status: η σημαντικότερη λέξη. Δείτε τον παρακάτω πίνακα.
- flags: το
adσημαίνει ότι ο resolver έχει ελέγξει την απάντηση με DNSSEC (μάθημα 8.1). - ANSWER SECTION: οι ίδιες οι εγγραφές. Οι στήλες είναι οι ίδιες όπως σε μια ζώνη: όνομα, TTL, κλάση, τύπος, τιμή.
- TTL (εδώ 2847): πόσα δευτερόλεπτα θα παραμείνει ακόμη αυτή η απάντηση στην cache του resolver. Αν στη ζώνη είχε οριστεί 3600, τότε η απάντηση είναι ήδη 753 δευτερόλεπτα παλιά. Αν το ξαναζητήσετε, θα δείτε τον αριθμό να μειώνεται.
- SERVER: ποιον resolver ρωτήσατε. Στο σπίτι, αυτό είναι συχνά ο router σας.
Οι τρεις καταστάσεις που πρέπει να γνωρίζετε
| Κατάσταση | Σημασία | Τι να κάνετε |
|---|---|---|
NOERROR με απάντηση | Όλα εντάξει, αυτή είναι η απάντηση | Η τιμή δεν είναι σωστή; Τότε υπάρχει λανθασμένη εγγραφή, ή βλέπετε μια παλιά cache |
NOERROR χωρίς απάντηση (ANSWER: 0) | Το όνομα υπάρχει, αλλά δεν έχει εγγραφή αυτού του τύπου | Συχνά: ζητάτε λάθος τύπο (για παράδειγμα A σε ένα όνομα που έχει μόνο CNAME ή μόνο MX) |
NXDOMAIN | Αυτό το όνομα δεν υπάρχει καθόλου | Τυπογραφικό λάθος, ξεχασμένη εγγραφή, ή διπλό domain όπως mail.example.com.example.com |
SERVFAIL | Ο resolver δεν μπόρεσε να λάβει αξιόπιστη απάντηση | Μη προσβάσιμοι nameservers, ή σπασμένη αλυσίδα DNSSEC (δοκιμάστε +cd) |
Χρήσιμες παραλλαγές
Μόνο η απάντηση με +short:
$ dig +short MX example.com
10 mail.example.com.
20 mail2.example.com.Να ρωτήσετε έναν άλλο resolver ή απευθείας έναν nameserver με @. Αυτό είναι το σημαντικότερο κόλπο όταν υπάρχουν προβλήματα. Αν ρωτήσετε τον ίδιο τον εξουσιοδοτημένο nameserver, παίρνετε πάντα τη φρέσκια απάντηση, χωρίς cache:
$ dig +short NS example.com
ns1.hosting.example.
ns2.hosting.example.
$ dig +short A www.example.com @ns1.hosting.example
192.0.2.20
$ dig +short A www.example.com @9.9.9.9
192.0.2.10Εδώ βλέπετε με μια ματιά τι συμβαίνει: ο nameserver δίνει ήδη τη νέα διεύθυνση (.20), ενώ ο δημόσιος resolver έχει ακόμη την παλιά στην cache (.10). Δεν χρειάζεται λοιπόν να κάνετε τίποτα, παρά μόνο να περιμένετε να περάσει το TTL (ενότητα 6).
Άλλοι τύποι: βάλτε τον τύπο μετά το όνομα.
$ dig +short TXT example.com
"v=spf1 a mx include:_spf.hosting.example ~all"
"google-site-verification=AbC123..."
$ dig +short TXT _dmarc.example.com
"v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com"
$ dig +short CNAME shop.example.com
shops.platform.example.Παρακολούθηση ολόκληρης της διαδρομής με +trace. Το dig κάνει τότε μόνο του ό,τι κάνει ένας resolver: πρώτα το root, μετά το TLD, μετά τον εξουσιοδοτημένο server (μάθημα 1.4):
$ dig +trace example.com A
. 518400 IN NS a.root-servers.net.
;; Received 239 bytes from 192.168.1.1#53
com. 172800 IN NS a.gtld-servers.net.
;; Received 708 bytes from 198.41.0.4#53(a.root-servers.net)
example.com. 172800 IN NS ns1.hosting.example.
;; Received 412 bytes from 192.5.6.30#53(a.gtld-servers.net)
example.com. 3600 IN A 192.0.2.10
;; Received 57 bytes from 198.51.100.53#53(ns1.hosting.example)Με +trace βλέπετε ποιους nameservers δίνει πράγματι το μητρώο (registry). Αυτό είναι χρήσιμο όταν αμφιβάλλετε αν μια αλλαγή nameserver έχει ήδη εφαρμοστεί.
Να δείτε το DNSSEC με +dnssec: λαμβάνετε επιπλέον τις υπογραφές RRSIG. Με +cd απενεργοποιείτε τον έλεγχο, για να δείτε αν ένα SERVFAIL οφείλεται στο DNSSEC.
Reverse DNS με -x (μάθημα 4.6):
$ dig +short -x 192.0.2.25
mail.example.com.Το ίδιο με nslookup
Το nslookup λειτουργεί σε κάθε υπολογιστή. Οι σημαντικότερες μορφές:
C:\> nslookup example.com
Server: router.lan
Address: 192.168.1.1
Non-authoritative answer:
Name: example.com
Address: 192.0.2.10
C:\> nslookup -type=mx example.com
example.com MX preference = 10, mail exchanger = mail.example.com
C:\> nslookup -type=txt _dmarc.example.com 9.9.9.9Μια δεύτερη διεύθυνση μετά το όνομα (εδώ 9.9.9.9) είναι ο server που ρωτάτε, ακριβώς όπως το @ στο dig. Η φράση "Non-authoritative answer" σημαίνει απλώς ότι η απάντηση προέρχεται από έναν resolver και όχι από τον εξουσιοδοτημένο nameserver: αυτό είναι φυσιολογικό. Αν το όνομα δεν υπάρχει, το nslookup εμφανίζει Non-existent domain, που είναι το ίδιο με NXDOMAIN.
Windows PowerShell: Resolve-DnsName
PS> Resolve-DnsName example.com -Type MX
PS> Resolve-DnsName _dmarc.example.com -Type TXT -Server 9.9.9.9
PS> Resolve-DnsName example.com -Type A -DnsOnlyΆδειασμα της δικής σας cache
Βλέπει ένα online εργαλείο ήδη τη νέα απάντηση, αλλά ο υπολογιστής σας ακόμη όχι; Τότε η παλιά απάντηση βρίσκεται στην cache του δικού σας υπολογιστή ή browser.
- Windows:
ipconfig /flushdnsστο Opdrachtprompt. - macOS:
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponderστο Terminal. - Linux με systemd-resolved:
resolvectl flush-caches. - Browser: ένα παράθυρο ιδιωτικής περιήγησης, ή το κινητό σας μέσω 4G/5G με το wifi απενεργοποιημένο.
Την cache του πάροχού σας ή του router δεν μπορείτε να την αδειάσετε εσείς οι ίδιοι· εκεί περιμένετε να περάσει το TTL.
Στην πράξη: έτσι φαίνεται σε έναν πίνακα ελέγχου
Στους περισσότερους πίνακες ελέγχου δεν μπορείτε να εκτελέσετε dig. Χρησιμοποιήστε λοιπόν το dig παράλληλα με τον πίνακα ελέγχου σας: πρώτα ελέγξτε στον πίνακα τι έχετε συμπληρώσει, μετά με dig @<ο δικός σας nameserver> ελέγξτε αν ο nameserver δίνει πράγματι αυτό, και στη συνέχεια με dig @9.9.9.9 ελέγξτε αν το βλέπει ήδη ο έξω κόσμος. Το Το WebOké μου διαθέτει μια διάγνωση DNS που συγκρίνει τους nameservers μεταξύ τους· άλλοι φορείς έχουν παρόμοια κουμπιά "ελέγχου DNS".
Σύνοψη
- Το
dig <όνομα> <τύπος>θέτει την ίδια ερώτηση που θα έθετε ένας browser ή ένας mailserver· διαβάστε πρώτα την κατάσταση (status). - Το NOERROR με απάντηση είναι καλό, το NOERROR χωρίς απάντηση σημαίνει "το όνομα υπάρχει, ο τύπος όχι", το NXDOMAIN σημαίνει "το όνομα δεν υπάρχει", το SERVFAIL σημαίνει "καμία αξιόπιστη απάντηση".
- Με το
@serverρωτάτε έναν συγκεκριμένο resolver ή απευθείας τον εξουσιοδοτημένο nameserver· έτσι βλέπετε τη διαφορά ανάμεσα σε ένα σφάλμα και σε μια cache. - Τα
+short,+trace,+dnssec,+cdκαι-xείναι οι παραλλαγές που θα χρειαστείτε πιο συχνά. - Τα nslookup και Resolve-DnsName κάνουν το ίδιο στα Windows.
Κουίζ
Άσκηση
Άσκηση Z8.2: dig και nslookup. Με dig, nslookup ή Resolve-DnsName (ή ένα online εργαλείο dig) αναζητήστε τρία πράγματα:
- την κατάσταση ενός ονόματος που δεν υπάρχει:
bestaat-niet-dnscursus.sidn.nl· - τις εγγραφές MX του
wikipedia.org, απευθείας από έναν από τους nameservers του wikipedia.org (αναζητήστε τον πρώτα)· - το TTL που επιστρέφει αυτή τη στιγμή ένας δημόσιος resolver για την εγγραφή A του
sidn.nl(ζητήστε το δύο φορές, με ένα λεπτό διαφορά, και σημειώστε και τους δύο αριθμούς).
Συμπληρώστε τις απαντήσεις.
Περαιτέρω ανάγνωση
Αυτά τα άρθρα περιγράφουν τα βήματα στο WebOké· οι εντολές λειτουργούν παντού με τον ίδιο τρόπο.
