Ενότητα 1 · 1.4
Το ταξίδι ενός ερωτήματος DNS
Ενότητα 1: Τι είναι το DNS; · Χρόνος ανάγνωσης: 8 λεπτά
Στόχος μαθήματος: Μετά από αυτό το μάθημα θα μπορείτε να εξηγήσετε βήμα προς βήμα πώς ένας resolver βρίσκει μια απάντηση, και πού στη διαδρομή οι απαντήσεις αποθηκεύονται στη μνήμη.
Βασικές έννοιες: resolver (αναδρομικός), rootserver, TLD-server, εξουσιοδοτημένος (authoritative) nameserver, παραπομπή (ανάθεση/delegation), cache
Δύο είδη διακομιστών DNS
Στο μάθημα 1.1 είδατε ότι το DNS είναι κατανεμημένο: κανείς δεν γνωρίζει τα πάντα. Πώς βρίσκει λοιπόν ο browser σας τη διεύθυνση του www.example.com; Για αυτό συνεργάζονται δύο είδη διακομιστών:
- Οι εξουσιοδοτημένοι nameservers (στα αγγλικά authoritative) γνωρίζουν την απάντηση για το δικό τους κομμάτι. Οι nameservers του
example.comγνωρίζουν τις εγγραφές τουexample.com. Δεν αναζητούν τίποτα για λογαριασμό άλλων. - Οι resolvers (επίσης γνωστοί ως αναδρομικοί resolvers) αναζητούν την απάντηση για εσάς. Ρωτούν συνεχώς μέχρι να τη βρουν. Ο πάροχος internet σας διαθέτει έναν resolver, και υπάρχουν και δημόσιοι resolvers, όπως αυτοί της Quad9, της Cloudflare ή της Google.
Ο υπολογιστής σας δεν αναζητά σχεδόν τίποτα μόνος του. Διαθέτει έναν μικρό stub resolver που προωθεί το ερώτημα στον resolver του δικτύου σας και λαμβάνει πίσω την απάντηση.
Το ταξίδι, βήμα προς βήμα
Ας υποθέσουμε: ο resolver δεν έχει αποθηκεύσει ακόμα τίποτα και εσείς ζητάτε την εγγραφή A του www.example.com.
- Ο υπολογιστής σας ρωτά τον resolver: «Ποια είναι η εγγραφή A του www.example.com;»
- Ο resolver ρωτά έναν rootserver. Κάθε resolver έχει ενσωματωμένη μια λίστα με τις διευθύνσεις των rootservers. Ο rootserver δεν γνωρίζει τίποτα για το
example.com, αλλά γνωρίζει ποιος διαχειρίζεται το.com. Απαντά με μια παραπομπή: «Για αυτό πρέπει να απευθυνθείτε στους nameservers του com: a.gtld-servers.net, b.gtld-servers.net, και ούτω καθεξής.» - Ο resolver ρωτά έναν nameserver του .com. Αυτός επίσης δεν γνωρίζει τη διεύθυνση IP του
www.example.com, αλλά γνωρίζει ποιους nameservers έχει τοexample.com. Άλλη μια παραπομπή: «Ρωτήστε το ns1.hosting.example ή το ns2.hosting.example.» - Ο resolver ρωτά έναν nameserver του example.com. Αυτός είναι εξουσιοδοτημένος για αυτό το domain και δίνει την απάντηση: «Το www.example.com έχει εγγραφή A 192.0.2.10.»
- Ο resolver δίνει την απάντηση στον υπολογιστή σας. Ο browser σας συνδέεται με τη διεύθυνση 192.0.2.10.
Μια παραπομπή από ένα ανώτερο επίπεδο προς τους nameservers ενός κατώτερου επιπέδου ονομάζεται ανάθεση (delegation). Η root αναθέτει το .com στη Verisign, το .com αναθέτει το example.com στους nameservers που έχει δηλώσει ο κάτοχος του domain. Για ένα domain .nl η διαδικασία είναι ακριβώς ίδια, μόνο που η root παραπέμπει τότε στους nameservers του .nl (SIDN, για παράδειγμα ns1.dns.nl). Αυτό θα το δείτε και εσείς στην άσκηση στο τέλος αυτού του μαθήματος. Γι' αυτό είναι τόσο σημαντικό οι nameservers να είναι σωστά καταχωρημένοι στο μητρώο (μάθημα 2.1).
Το cache: όχι κάθε φορά ολόκληρο το ταξίδι
Αν κάθε resolver ξεκινούσε από την αρχή στη root σε κάθε ερώτημα, η root θα λάμβανε ένα αδιανόητο πλήθος ερωτημάτων. Αυτό δεν συμβαίνει, επειδή ο resolver θυμάται τις απαντήσεις για κάποιο διάστημα. Αυτή η μνήμη ονομάζεται cache.
Πόσο καιρό μπορεί να διατηρηθεί μια απάντηση στη μνήμη αναγράφεται στην ίδια την απάντηση: το TTL (time to live), σε δευτερόλεπτα. Ένα TTL 3600 σημαίνει: αυτή η απάντηση μπορεί να διατηρηθεί στη μνήμη για μία ώρα. Και οι παραπομπές αποθηκεύονται επίσης. Ένας resolver που μόλις έμαθε ποιους nameservers έχει το .com δεν χρειάζεται να το ξαναρωτήσει την επόμενη φορά από τη root.
Αν κάποιος άλλος στον ίδιο πάροχο ρωτήσει ένα λεπτό αργότερα για το www.example.com, ο resolver απαντά αμέσως από το cache του. Κανένα ταξίδι, καμία αναμονή.
Οι cache βρίσκονται σε περισσότερα σημεία:
- στον resolver του παρόχου σας ή στον δημόσιο resolver που χρησιμοποιείτε·
- στο λειτουργικό σύστημά σας (Windows, macOS, το κινητό σας τηλέφωνο)·
- στον browser σας·
- μερικές φορές στο router σας.
Αυτό είναι γρήγορο και αποδοτικό, αλλά έχει μια συνέπεια που θα συναντήσετε συχνά αργότερα: αν αλλάξετε μια εγγραφή, οι caches συνεχίζουν να δίνουν την παλιά απάντηση μέχρι να περάσει το TTL τους. Γι' αυτό κάποιος βλέπει μια αλλαγή ενώ κάποιος άλλος ακόμα όχι. Η ενότητα 6 εξηγεί αυτό το θέμα εκτενώς.
Οι rootservers
Υπάρχουν 13 ονόματα για τους rootservers: από a.root-servers.net έως m.root-servers.net. Τους διαχειρίζονται δώδεκα διαφορετικοί οργανισμοί. Πίσω από κάθε όνομα βρίσκονται παγκοσμίως πολλοί διακομιστές, σε εκατοντάδες σημεία, που μοιράζονται την ίδια διεύθυνση (αυτό ονομάζεται anycast). Ο resolver σας καταλήγει αυτόματα σε έναν κοντινό. Έτσι λειτουργούν και οι TLD-nameservers, όπως αυτοί του .com και του .nl. Έτσι, το DNS είναι γρήγορο και συνεχίζει να λειτουργεί ακόμα κι αν κάπου υπάρξει βλάβη σε κάποιον διακομιστή.
Πού μπορεί να πάει κάτι στραβά
Αν γνωρίζετε το ταξίδι, μπορείτε να εντοπίσετε καλύτερα τα προβλήματα:
- Η ανάθεση δεν είναι σωστή. Στο μητρώο αναγράφονται nameservers που δεν γνωρίζουν (πλέον) το domain. Ο resolver δεν μπορεί τότε να προχωρήσει στο βήμα 4. Η απάντηση είναι ένα σφάλμα ή δεν έρχεται καθόλου απάντηση.
- Ο εξουσιοδοτημένος διακομιστής δίνει διαφορετική απάντηση από αυτήν που περιμένατε. Έχετε αλλάξει την εγγραφή σε διαφορετικό σημείο από εκεί όπου βρίσκονται οι nameservers (μάθημα 2.1).
- Το cache έχει ακόμα την παλιά απάντηση. Τότε δεν υπάρχει καμία βλάβη. Πρέπει να περιμένετε να περάσει το TTL, ή να αδειάσετε το δικό σας cache.
- Το DNSSEC δεν είναι σωστό. Ένας resolver επικύρωσης ελέγχει τις ψηφιακές υπογραφές στη διαδρομή. Αν η αλυσίδα δεν είναι σωστή, αρνείται την απάντηση (μάθημα 8.1).
Με το εργαλείο dig +trace μπορείτε να επαναλάβετε μόνοι σας το ταξίδι, από τη root μέχρι τον εξουσιοδοτημένο διακομιστή. Αυτό θα το μάθετε στο μάθημα 8.2. Το ίδιο μπορούν να κάνουν και κάποια online εργαλεία.
Σύνοψη
- Οι εξουσιοδοτημένοι nameservers γνωρίζουν την απάντηση για το δικό τους domain· οι resolvers αναζητούν την απάντηση για εσάς.
- Ένας resolver ξεκινά από τη root, λαμβάνει μια παραπομπή προς το TLD, στη συνέχεια προς τους nameservers του domain, και εκεί λαμβάνει την απάντηση.
- Μια τέτοια παραπομπή ονομάζεται ανάθεση (delegation).
- Οι απαντήσεις αποθηκεύονται στη μνήμη σε caches, για όσο διάστημα ορίζει το TTL· γι' αυτό οι αλλαγές δεν είναι ορατές παντού αμέσως.
- Υπάρχουν 13 ονόματα rootserver, αλλά χάρη στο anycast βρίσκονται πίσω από αυτά πολλοί διακομιστές παγκοσμίως.
Κουίζ
Άσκηση
Άσκηση Z1.4: Ακολουθήστε το ταξίδι. Ακολουθήστε το ταξίδι για το www.sidn.nl, με dig +trace www.sidn.nl ή ένα online εργαλείο που εμφανίζει ένα trace. Συμπληρώστε: (1) έναν nameserver του nl. που συναντάτε στη διαδρομή, (2) έναν εξουσιοδοτημένο nameserver του sidn.nl.
Περαιτέρω ανάγνωση
Αυτά τα άρθρα περιγράφουν την κατάσταση στο WebOké. Σε άλλους παρόχους η λειτουργία είναι παρόμοια.
