Το προφίλ μας στο Google Plus
2

Πώς δουλεύουν τα δίκτυα: Εισαγωγή στο Domain Name System

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

Σε μια πρώτη προσέγγιση, το Domain Name System ή απλά DNS είναι το δικτυακό σύστημα που κάνει δυνατή τη μετάφραση ονομάτων sites και υπηρεσιών σε διευθύνσεις IP (βλ. εδώ αλλά κι εδώ). Για εμάς, τους ανθρώπους, είναι πολύ πιο εύκολο να θυμόμαστε διευθύνσεις όπως deltahacker.gr ή parabing.com, παρά τετράδες από νούμερα όπως 188.226.190.206 ή 162.243.87.13. Από την άλλη, για τους υπολογιστές νόημα έχουν μόνο τα νούμερα κι όχι τα ονόματα. Το DNS γεφυρώνει αυτό το “χάσμα κατανόησης”, αν θέλετε. Μπορούμε να το φανταζόμαστε ως το address book του Internet. Εμείς ξέρουμε και θυμόμαστε το όνομα μια επαφής, αλλά δεν θυμόμαστε το τηλεφωνικό της νούμερο. Προκειμένου να καλέσουμε την επαφή χρειαζόμαστε το αντίστοιχο νούμερο, οπότε δίνουμε στο address book το όνομα της επαφής κι έτσι βρίσκουμε το νούμερό της.

Η προηγούμενη περιγραφή είναι αρκετή ώστε κάποιος να έχει μια πρώτη ιδέα για την αποστολή του DNS. Υπάρχουν βέβαια αρκετές λεπτομέρειες κι αν θέλουμε να μάθουμε τι ακριβώς συμβαίνει παρασκηνιακά, π.χ., προκειμένου να στήσουμε τον δικό μας DNS server, οφείλουμε να εμβαθύνουμε. Για να μη χαθούμε, είναι απαραίτητο να ξεκαθαρίσουμε τι σημαίνουν όροι όπως domain name, top level-domain, subdomain, host, name server, zone file κ.ά.

Τα βασικά κι απαραίτητα
Το domain name είναι το όνομα ενός μηχανήματος ή κάποιας υπηρεσίας στο Internet. Για παράδειγμα, το colder.xyz είναι ένα domain name, όπως επίσης και το defiant.gr. Το colder.xyz τυχαίνει να αντιστοιχεί σ’ ένα πειραματικό blog που τρέχουμε σε κάποιον server μας στο cloud (VPS), ενώ το defiant.gr είναι το όνομα ενός άλλου server με Ubuntu, ο οποίος μεταξύ άλλων τρέχει το OpenVPN. Άλλο παράδειγμα: Το deltahacker.gr είναι το domain name που αντιστοιχεί σ’ έναν διαφορετικό server, καθώς και στο site του περιοδικού deltaHacker. Παρατηρήστε ότι άλλοτε μιλάμε γενικά για κάποιο φυσικό ή εικονικό μηχάνημα, ενώ άλλοτε μιλάμε ειδικά για κάποια υπηρεσία (π.χ., web server, OpenVPN server) που προσφέρεται από ένα μηχάνημα. Σε κάθε περίπτωση, το DNS είναι το σύστημα που μας επιτρέπει να θυμόμαστε μόνο το όνομα μιας υπηρεσίας ή ενός μηχανήματος κι όχι την αντίστοιχη αριθμητική διεύθυνση IP. Προκειμένου να επικοινωνήσει ένας υπολογιστής με κάποιον άλλον δικτυακά, χρειάζεται να γνωρίζει το IP του. Χάρη στο DNS, εμείς δεν χρειάζεται καν να σκεφτόμαστε γι’ αυτό.

Όπως θα δούμε σε λίγο, ένα domain name είναι πιθανό να εμπεριέχει περισσότερες από μία τελείες, οι οποίες είναι σαν να οριοθετούν υποπεριοχές μιας ευρύτερης περιοχής. Ξεκινώντας από τα δεξιά και παρατηρώντας τις τελείες προς τα αριστερά, είναι σαν να προχωράμε από τη γενικότερη περιοχή στην ειδικότερη περιοχή (υποπεριοχή). Το δεξιότερο μέρος (περιοχή) ενός domain name, αυτό δηλαδή που βρίσκεται στα δεξιά της δεξιότερης τελείας, ονομάζεται top-level domain (TLD). Μένοντας στα προηγούμενα παραδείγματα domain names, το TLD του colder.xyz είναι το “xyz”, ενώ το TLD των defiant.gr και deltahacker.gr είναι το “gr”. Εξαιρετικά δημοφιλή top-level domains είναι τα “com”, “net” και “org”. Το “xyz” δεν είναι τόσο δημοφιλές, θα συμφωνήσετε όμως ότι διαθέτει μη-ευκαταφρόνητο coolness factor.

Από τα λίγα που είπαμε ως τώρα γίνεται προφανές ότι το σύστημα DNS είναι ιεραρχικό. Έχουμε, δηλαδή, domains μέσα σε domains (…μέσα σε domains) κ.ο.κ. Στην πράξη βέβαια αυτή η ιεράρχηση δεν συνεχίζεται για πολύ, αλλά η γενική ιδέα είναι ότι έχουμε περιοχές μέσα σε περιοχές ή αλλιώς έχουμε υποπεριοχές περιοχών. Παράδειγμα: Τα parabing.com και google.com είναι και τα δύο subdomains του TLD ονόματι “com”, γι’ αυτό και τα parabing και google χαρακτηρίζονται κι ως second-level domains (SLDs). Τα subdomains ενός TLD ή αλλιώς τα SLDs ονομάζονται απλά “domain names” ή ακόμα πιο απλά “domains”. Ομοίως, ένα domain είναι πιθανό να έχει ένα ή περισσότερα subdomains “από κάτω του”. Το parabing.com, για παράδειγμα, θα μπορούσε να έχει δύο subdomains: το members.parabing.com και το guests.parabing.com. Μπορούμε να φανταστούμε ακόμη πιο ειδικά subdomains: το api.members.parabing.com, στο οποίο θα είχαν πρόσβαση μέλη του parabing.com με δικαίωμα να χρησιμοποιούν προγραμματιστικά υπηρεσίες του site, καθώς και το demo.guests.parabing.com, από το οποίο οι επισκέπτες έχουν την ευκαιρία να δοκιμάζουν μερικές από τις προσφερόμενες υπηρεσίες του site.

Ένα subdomain που ορίζει κάποιον server ή κάποια υπηρεσία και δεν αποτελεί απλά ένα νέο “επίπεδο” κάτω από ένα γενικότερο domain, ονομάζεται host. Στο προηγούμενο παράδειγμα, τα api.members.parabing.com και demo.guests.parabing.com θα μπορούσαν να είναι hosts, με τα members.parabing.com και guests.parabing.com να είναι “απλά subdomains” του parabing.com, στα οποία δεν αντιστοιχούν διευθύνσεις IP. Σκεφτείτε το και διαφορετικά: Στα hosts είναι δυνατόν να συνδεόμαστε μέσω του κατάλληλου client, κάτι που δεν συμβαίνει κατ’ ανάγκη και με τα domains και τα subdomains. Αναρωτιέστε μήπως γιατί γράψαμε “κατ’ ανάγκη”; Η πλειονότητα των κατόχων domain name που ταυτόχρονα έχουν κι ένα web site, το διαθέτουν απευθείας μέσω του domain. Για παράδειγμα, οι επισκέπτες του δικτυακού μας τόπου αρκεί να πληκτρολογούν στη μπάρα διευθύνσεων του web browser το ίδιο το domain name, δηλαδή το deltahacker.gr. Όμως οι αγαπητοί κάτοχοι ενός domain που ταυτόχρονα έχουν και site, σχεδόν πάντα ορίζουν κι ένα host με όνομα “www”. Έτσι κι εμείς, ως υπάκουοι κάτοχοι domain και web site που μάλιστα συμμορφωνόμαστε με τας υποδείξεις, έχουμε ορίσει έναν host με όνομα www.deltahacker.gr. Τα deltahacker.gr και www.deltahacker.gr αντιστοιχούν στο ίδιο IP, επομένως είτε δώσετε τη μία διεύθυνση στον web browser είτε την άλλη, στο ίδιο site θα προσγειωθείτε. Αν κατά τον ορισμό hosts διακατεχόμασταν από μια κάπως επαναστατική διάθεση ή απλά είχαμε όρεξη για trolling, τότε θα μπορούσαμε να μην ορίσουμε κατευθείαν τον host “www”, αλλά πρώτα το subdomain ονόματι thisway2.deltahacker.gr και μετά, κάτω απ’ αυτό, τον host με όνομα www.thisway2.deltahacker.gr, ο οποίος θα είχε IP ίδιο μ’ εκείνο που αντιστοιχεί στο deltahacker.gr.

Ένα πλήρες domain name, δηλαδή ένα όνομα το οποίο στ’ αριστερά έχει το πιο ειδικό subdomain και στα δεξιά το top-level domain, ονομάζεται fully qualified domain name ή απλά FQDN. Σύμφωνα με τα πρότυπα, κάθε FQDN πρέπει να καταλήγει σε μια τελεία (στα δεξιά του TLD). Για παράδειγμα, το “box.colder.xyz.” είναι ένα FQDN. Σε αρκετές περιπτώσεις, το λογισμικό που ζητά την πληκτρολόγηση FQDN δεν απαιτεί τη συμπερίληψη της δεξιότερης τελείας.

Πρώτη γνωριμία με τους name servers
Το παγκόσμιο σύστημα του DNS δεν θα ήταν και πολύ χρήσιμο χωρίς τους name servers: Πρόκειται για μηχανήματα που άλλη δουλειά δεν κάνουν από το να μεταφράζουν domain names σε διευθύσεις IP. Ανά πάσα στιγμή στο Διαδίκτυο υπάρχουν τόσα πολλά αιτήματα για τέτοιου είδους μεταφράσεις, ώστε κανείς name server, όσο ισχυρός κι αν ήταν, δεν θα μπορούσε να τα εξυπηρετεί όλα. Ακριβώς γι’ αυτό, όταν ένας name server δεν γνωρίζει κάτι για μια αντιστοίχιση της μορφής domain name <---> διεύθυνση IP, ζητά βοήθεια από κάποιον άλλον name server. Θα πούμε σε λίγο πώς επιλέγει ποιος πρέπει να είναι αυτός ο “άλλος”, στον οποίο πρέπει ν’ απευθυνθεί. Είναι επίσης δυνατό για κάποιον name server να μην είναι υπεύθυνος για όλα τα subdomains ενός domain της ευθύνης του, αλλά για ένα υποσύνολο αυτών να έχει αναθέσει την ευθύνη σε άλλους name servers (delegates).

Ένας name server ενδέχεται να ‘ναι έτσι ρυθμισμένος ώστε ν’ απαντά μόνο σε ερωτήματα για domains της ευθύνης του. Σε μια τέτοια περίπτωση ονομάζεται authoritative-only. Υπάρχουν και πιο διαλλακτικοί name servers, οι οποίοι όταν δεν γνωρίζουν μιαν απάντηση υποδεικνύουν στους πελάτες άλλους servers που πιθανώς ξέρουν. Ίσως επίσης ν’ απαντούν κι αμέσως, συμβουλευόμενοι μια τοπική cache με αντιστοιχίσεις που έχουν ήδη μάθει.

Παρεμπιπτόντως, αυτές οι αντιστοιχίες (mappings) μεταξύ domain names και IP addresses βρίσκονται σε αρχεία απλού κειμένου τα οποία ονομάζονται zone files. Γενικά, τα zone files εμπεριέχουν τους διαθέσιμους πόρους (resources) ενός συγκεκριμένου domain — ή έστω πληροφορίες για το πού πρέπει ένας πελάτης ν’ αναζητά τέτοιες πληροφορίες. Αναλυτικότερα, στα zone files έχουμε εγγραφές (records) κι αυτές ενδέχεται να είναι αντιστοιχίες μεταξύ domain names και διευθύνσεων IP, να υποδεικνύουν τους name servers για το domain, να δίνουν τους mail servers του domain κ.ο.κ.

Πώς λειτουργεί το σύστημα DNS, από ψηλά αλλά αναλυτικά
Μετά από όλα όσα συζητήσαμε είμαστε πλέον σε θέση να καταλάβουμε πώς δουλεύει το σύστημα DNS. Όπως ήδη αναφέραμε –και βεβαίως διεφάνη–, η δομή του είναι ιεραρχική. Στην κορυφή αυτής της ιεραρχίας έχουμε τους λεγόμενους root servers. Πρόκειται για μηχανήματα που ελέγχονται από διάφορους οργανισμούς, οι οποίοι τελούν υπό την αιγίδα της μη-κερδοσκοπικής ICANN (Internet Corporation for Assigned Names and Numbers). Μη φανταστείτε ότι οι root servers είναι πολλοί: μόλις 13 υπάρχουν σ’ όλον τον πλανήτη! Επειδή βέβαια ο φόρτος εργασίας ανά πάσα στιγμή είναι τεράστιος, για κάθε έναν από τους 13 αυτούς servers υπάρχει κι ένα πλήθος mirrors. Όλοι οι mirrors ενός root server έχουν την ίδια αριθμητική διεύθυνση IP. Κάθε φορά που φτάνει ένα αίτημα σε κάποιον root server, αυτομάτως ανακατευθύνεται στον πλησιέστερο mirror.

Οι 13 στο πλήθος root name servers καθορίζονται από τα γράμματα a, b, ..., m κι έχουν domain names της μορφής γράμμα.root-servers.org. Στο http://root-servers.org υπάρχει αλληλεπιδραστικός χάρτης με τις γεωγραφικές θέσεις των root name servers.

Οι 13 στο πλήθος root name servers καθορίζονται από τα γράμματα a, b, …, m κι έχουν domain names της μορφής γράμμα.root-servers.org. Στο http://root-servers.org υπάρχει αλληλεπιδραστικός χάρτης με τις γεωγραφικές θέσεις των root name servers.

Η αποστολή των root servers είναι να δίνουν πληροφορίες για τα top-level domains. Αναλυτικότερα, όταν ένα ερώτημα δεν μπορεί να απαντηθεί από name servers “πιο κάτω” στην ιεραρχία του DNS, σύντομα φτάνει σε κάποιον root server. Ας υποθέσουμε ότι ζητείται το IP του box.colder.xyz. Κανείς δεν ξέρει κάτι γι’ αυτό, οπότε αναγκαστικά ερωτάται κάποιος root server. Εκεί ψηλά που βρίσκεται δεν θα μπορούσε ν’ απασχολείται με ασήμαντες λεπτομέρειες, όπως, π.χ., είναι η τήρηση zone file για το colder.xyz. Είναι όμως σε θέση να γνωρίζει ποιος name server “από κάτω του” είναι υπεύθυνος για το “xyz” top-level domain. Απαντά λοιπόν σ’ εκείνον που ρώτησε, λέγοντάς του κάτι σαν “κοίτα, δεν έχω ιδέα για colder και shmolder, ξέρω όμως ότι ο τάδε name server είναι υπεύθυνος για το xyz — πάνε ρώτα ‘κείνον και μη με ζαλίζεις”.

Η απάντηση για τον υπεύθυνο του “xyz” δεν είναι καθόλου άχρηστη — κάθε άλλο μάλιστα. Γενικά, οι TLD servers είναι υπεύθυνοι για τα top-level domains και τώρα ο ερωτών γνωρίζει το IP του server για το “xyz”, οπότε του ζητά τη διεύθυνση του box.colder.xyz. Οι TLD servers μπορεί να βρίσκονται κάτω από τους root servers, κι αυτοί όμως είναι αρκετά ψηλά στην ιεραρχία. Από μια τέτοια θέση, στα zone files τους δεν έχουν συμπαντικά ασήμαντες πληροφορίες, όπως, π.χ., είναι το IP του box.colder.xyz. Γνωρίζουν όμως τους name servers που είναι υπεύθυνοι για τα domains κάτω από το TLD της ευθύνης τους. Συνεχίζοντας με το παράδειγμά μας, ο TLD server του “xyz” ξέρει τον name server που είναι υπεύθυνος για το colder.xyz, έτσι υπομονετικά εξηγεί στον πελάτη ότι πρέπει να τσακιστεί και να ρωτήσει τον server με το τάδε IP.

Ο πελάτης είναι πλέον πολύ κοντά σ’ αυτό που πραγματικά ψάχνει: έχει τη διεύθυνση IP του domain-level name server, ο οποίος στο zone file του έχει όλες τις πληροφορίες για το colder.xyz. Τον ρωτά, λοιπόν, για το box.colder.xyz, εκείνος ψάχνεται λίγο και μετά από κλάσματα του δευτερολέπτου που μοιάζουν με αιωνιότητα διαπιστώνει ότι πράγματι έχει record για το ζητούμενο subdomain. Με ιδιαίτερη προθυμία απαντά στον πελάτη, γνωστοποιώντας του το IP του box.colder.xyz (που είναι το 46.101.173.140 και, παρεμπιπτόντως, έχει χρέη mail server για το colder.xyz — διαβάστε και τη σχετική σειρά άρθων).

Η ιεραρχία του DNS όπως φαίνεται μέσα από την ανάλυση του ru.wikipedia.org, της ρωσικής εκδοχής της Wikipedia. (Πηγή: https://commons.wikimedia.org/wiki/File:DNS-names-ru.svg).

Η ιεραρχία του DNS όπως φαίνεται μέσα από την ανάλυση του ru.wikipedia.org, της ρωσικής εκδοχής της Wikipedia. (Πηγή: https://commons.wikimedia.org/wiki/File:DNS-names-ru.svg).

Το DNS, όπως το βλέπουν οι πελάτες
Στο παράδειγμα που μόλις παρουσιάσαμε, αλλά και σε κάθε περίπτωση που ζητείται η αριθμητική διεύθυνση IP κάποιου domain, το πρόγραμμα-πελάτης δεν ρωτά απευθείας κάποιον name server. Για λόγους οικονομίας, κοιτάζει πρώτα μήπως μπορέσει και βρει αυτό που θέλει τοπικά — και για την ακρίβεια στο αρχείο ονόματι hosts του λειτουργικού. Το συγκεκριμένο αρχείο είναι απλού κειμένου και στα Unixοειδή συστήματα βρίσκεται στον κατάλογο /etc, ενώ στα Windows κάποιοι σκέφτηκαν ότι μια πρέπουσα θέση είναι ο φάκελος C:\Windows\System32\Drivers\etc. Σε κάθε περίπτωση, στο αρχείο hosts υπάρχουν αντιστοιχίσεις ονομάτων και διευθύνσεων IP που αφορούν στο localhost, αλλά μπορούμε να προσθέσουμε και τις δικές μας. Μάλιστα δεν χρειάζεται καν να βάζουμε υπαρκτά domains. Αν, π.χ., κάποιος το επιθυμεί, κάλλιστα ορίζει ότι το όνομα eyjafjallajokull αντιστοιχεί στη διεύθυνση 192.168.2.254. Γενικά έχουμε μεγάλη ελευθερία με το αρχείο hosts και σε καμία περίπτωση δεν πρέπει να το μπερδεύουμε με τα zone files των name servers. (Θα πούμε περισσότερα γι’ αυτά στο δεύτερο άρθρο της μίνι σειράς μας.) Όταν ο πελάτης δεν βρει αυτό που ψάχνει στο αρχείο hosts, κάτι που είναι πολύ πιθανό, τότε στρέφεται σε κάποιον resolving name server. Δουλειά ενός τέτοιου server είναι να δέχεται ερωτήματα και να τα αποστέλλει σε άλλους name servers. Για την ακρίβεια, οι resolving name servers γνωρίζουν τις διευθύνσεις IP των root servers, ενώ ό,τι μαθαίνουν το διατηρούν για κάποιο χρόνο στην cache που διαθέτουν. Όταν λοιπόν κάποιος πελάτης τούς απευθύνει ένα ερώτημα, πριν ενοχλήσουν τους root servers κοιτάζουν πρώτα στην cache, αφού δεν αποκλείεται να βρουν εκεί την απάντηση. Οι name servers που παρέχουν οι ISPs στους πελάτες είναι resolving, αλλά δεν είμαστε υποχρεωμένοι να τους χρησιμοποιούμε. Αρκετοί, π.χ., προτιμούν τους name servers της Google (8.8.8.8 και 8.8.4.4), οι οποίοι είναι επίσης resolving κι ο καθένας έχει το ελεύθερο να χρησιμοποεί. Κάτι που έχει συμβεί στο παρελθόν –και θα συμβεί ξανά στο μέλλον–, είναι να παρατηρούμε αδυναμία επίσκεψης οποιουδήποτε site, τη στιγμή που η σύνδεσή μας στο Internet δείχνει (και είναι) ενεργή. Σε τέτοιες περιπτώσεις, αντί για τις αυτόματες ρυθμίσεις αξίζει να επεμβαίνουμε και να δοκιμάζουμε τους name servers της Google ή κάποιας άλλης εταιρείας (κατά νου έχουμε την OpenDNS). Καθόλου δεν αποκλείεται να διαπιστώνουμε ότι το πρόβλημα εξαφανίζεται: Δεν υπήρχε πρόβλημα με τη σύνδεσή μας, αλλά με τους resolving name servers του ISP. Διαβάστε στο δεύτερο άρθρο της σειράς μας πολλά περισσότερα για τα διαφορετικά είδη name servers.

Χειροκίνητος καθορισμός των (resolving) name servers που χρησιμοποιεί ένα σύστημα με Windows 10. Στο παράδειγμα καθορίζουμε τους name servers της OpenDNS (208.67.222.222 και 208.67.220.220). Σε περιπτώσεις που η σύνδεσή μας στο Internet φαίνεται να είναι ενεργή ωστόσο δεν μπορούμε να επισκεφτούμε κανένα site, ίσως το φταίξιμο να εντοπίζεται στους name servers του ISP. Δεν χάνουμε τίποτε λοιπόν να ορίζουμε άλλους, όπως, π.χ., εκείνους της OpenDNS ή της Google (8.8.8.8, 8.8.4.4).

Χειροκίνητος καθορισμός των (resolving) name servers που χρησιμοποιεί ένα σύστημα με Windows 10. Στο παράδειγμα καθορίζουμε τους name servers της OpenDNS (208.67.222.222 και 208.67.220.220). Σε περιπτώσεις που η σύνδεσή μας στο Internet φαίνεται να είναι ενεργή ωστόσο δεν μπορούμε να επισκεφτούμε κανένα site, ίσως το φταίξιμο να εντοπίζεται στους name servers του ISP. Δεν χάνουμε τίποτε λοιπόν να ορίζουμε άλλους, όπως, π.χ., εκείνους της OpenDNS ή της Google (8.8.8.8, 8.8.4.4).

2 Responses to “Πώς δουλεύουν τα δίκτυα: Εισαγωγή στο Domain Name System”

  1. djmouzz | 21/09/2015 at 22:46

    Παραδόξως αυτή τη στιγμή το http://www.deltahacker.gr δεν γίνεται resolved (και Server not Found στο Browser) ενώ το deltahacker.gr είναι μια χαρά 188.226.190.206

    • subZraw | 21/09/2015 at 22:55

      Εχμ, όχι και τόσο “παραδόξως”, γιατί τις προάλλες έπαιζα με το DNS panel του provider :/ Προσέθεσα μόλις το κατάλληλο A-record και σε λίγες ώρες οι αλλαγές θα έχουν διαδοθεί στο DNS. Ευχαριστώ για την επισήμανση!

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων