Introductie

In deze sectie ga ik in op de toenemende vragen die ik krijg omtrent DNS. DNS lijkt heel lastig, maar is eigenlijk vrij simpel. Net als met alles, moet je alleen even weten hoe het zit.

Als je inmiddels al aardig weet wat DNS is en hoe het werkt, kun je ook los naar de verschillende type records kijken (druk op '[' om de balk links weg te halen of te laten zien).

Het begin

Ik trek over het algemeen de vergelijking met een telefoonboek. Bij de naam die je in je browser intikt, moet een telefoonnummer (IP-adres) gezocht worden om contact te zoeken met de server (lees: computer) die deze aan je kan doorgeven.

Als ik www.xs4all.nl als voorbeeld neem, en dit in m'n browser in zou tikken, zou hij eerst "xs4all" in de sectie "nl" (Nederland) opzoeken. En daarna aan XS4ALL vragen wat het nummer voor "www" is, waarbij XS4ALL z'n eigen DNS-servers gebruikt die als receptioniste fungeren.

Technisch gezien zit het iets ingewikkelder in elkaar, want het internet werkt met heel veel verschillende zogenaamde nameservers die je van deze kunnen voorzien. Het begint allemaal bij de wortel (in het Engels "root"). Een naam die je in je browser intikt, wordt over het algemeen aangevuld met een "." (om aan te geven dat dit de volledige naam is, zonder extra toevoegingen).

Als onderstaande nog te hoog gegrepen is voor je: geen nood, dit dient alleen als voorbeeld/hulpmiddel! Misschien is het dan handig om je eerst in de individuele record-types te verdiepen!

De "root"-nameservers (.)

Eigenlijk is "www.xs4all.nl" dus "www.xs4all.nl."! Dit zie je nooit in je browser, maar bij de DNS verzoeken is dit wel essentiƫel. DNS wordt in omgekeerde volgorde opgevraagd, en alles wordt gescheiden door de punten.

Als ik een verzoek zou doen voor "www.xs4all.nl.", dan zou hij eerst aan je computer of een nameserver vragen (het adres hiervan wordt meestal door je provider al automatisch aangeleverd via je modem) wat de "root" nameservers zijn.
Deze 13 nameservers zijn verantwoordelijk voor het aanwijzen waar alle delen van het internet draaien. Zonder deze 13 servers zou het internet het huidige internet niet zijn.

Als voorbeeld hier de uitdraai van een op een Linux-shell uitgevoerd commando om de "root"-nameservers te zien (onder Windows zijn er niet echt makkelijke tools):

danielm@codex:~$ dig +trace .
; <<>> DiG 9.7.3 <<>> +trace .
;; global options: +cmd
.                       518400  IN      NS      g.root-servers.net.
.                       518400  IN      NS      a.root-servers.net.
.                       518400  IN      NS      i.root-servers.net.
.                       518400  IN      NS      j.root-servers.net.
.                       518400  IN      NS      k.root-servers.net.
.                       518400  IN      NS      h.root-servers.net.
.                       518400  IN      NS      m.root-servers.net.
.                       518400  IN      NS      b.root-servers.net.
.                       518400  IN      NS      e.root-servers.net.
.                       518400  IN      NS      f.root-servers.net.
.                       518400  IN      NS      d.root-servers.net.
.                       518400  IN      NS      c.root-servers.net.
.                       518400  IN      NS      l.root-servers.net.
;; Received 492 bytes from ::1#53(::1) in 169 ms
.                       86400   IN      SOA     a.root-servers.net. nstld.verisign-grs.com. 2012071600 1800 900 604800 86400
;; Received 92 bytes from 2001:7fd::1#53(k.root-servers.net) in 1 ms
danielm@codex:~$

Als je je afvraagt hoe, zonder vooraf de IP-adressen te weten voor deze "root"-nameservers, hij toch deze informatie kent: Alle IP-adressen voor deze servers worden standaard meegeleverd met nameserver-software. Deze file wordt bijgehouden door een internationaal gemeenschap.

De "TLD"-nameservers (nl.)

Nu we weten aan wie we moeten vragen welke nameservers er zijn voor Nederland (.nl), wordt het tijd om deze informatie op te vragen. Je kunt dus een willekeurige "root"-server vragen waar deze gegevens staan.

Bijvoorbeeld zo:

danielm@codex:~$ dig nl. @a.root-servers.net
; <<>> DiG 9.7.3 <<>> nl. @a.root-servers.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41093
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 7, ADDITIONAL: 14
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;nl.                            IN      A
;; AUTHORITY SECTION:
nl.                     172800  IN      NS      ns3.dns.nl.
nl.                     172800  IN      NS      ns-nl.nic.fr.
nl.                     172800  IN      NS      ns1.dns.nl.
nl.                     172800  IN      NS      nl1.dnsnode.net.
nl.                     172800  IN      NS      sns-pb.isc.org.
nl.                     172800  IN      NS      ns2.dns.nl.
nl.                     172800  IN      NS      ns4.dns.nl.
;; ADDITIONAL SECTION:
nl1.dnsnode.net.        172800  IN      A       194.146.106.42
nl1.dnsnode.net.        172800  IN      AAAA    2001:67c:1010:10::53
ns1.dns.nl.             172800  IN      A       193.176.144.5
ns1.dns.nl.             172800  IN      AAAA    2a00:d78:0:102:193:176:144:5
ns2.dns.nl.             172800  IN      A       213.154.241.85
ns2.dns.nl.             172800  IN      AAAA    2001:7b8:606::85
ns3.dns.nl.             172800  IN      A       194.171.17.10
ns3.dns.nl.             172800  IN      AAAA    2001:610:0:800d::10
ns4.dns.nl.             172800  IN      A       95.142.99.212
ns4.dns.nl.             172800  IN      AAAA    2a00:1188:5::212
ns-nl.nic.fr.           172800  IN      A       192.93.0.4
ns-nl.nic.fr.           172800  IN      AAAA    2001:660:3005:1::1:2
sns-pb.isc.org.         172800  IN      A       192.5.4.1
sns-pb.isc.org.         172800  IN      AAAA    2001:500:2e::1
;; Query time: 8 msec
;; SERVER: 2001:503:ba3e::2:30#53(2001:503:ba3e::2:30)
;; WHEN: Mon Jul 16 13:12:46 2012
;; MSG SIZE  rcvd: 487
danielm@codex:~$

Hiermee hebben we nu een lijstje waarmee we verder kunnen.

De "zone"- of "domein"-nameservers (xs4all.nl.)

Nu we weten aan wie we moeten vragen waar xs4all.nl draait, moeten we aan een "root"-server vragen waar we de rest van onze gegevens om moeten vragen.

Dus:

danielm@codex:~$ dig xs4all.nl. @ns1.dns.nl.
; <<>> DiG 9.7.3 <<>> xs4all.nl. @ns1.dns.nl.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52207
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 4
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;xs4all.nl.                     IN      A
;; AUTHORITY SECTION:
xs4all.nl.              7200    IN      NS      ns2.xs4all.nl.
xs4all.nl.              7200    IN      NS      ns.xs4all.nl.
;; ADDITIONAL SECTION:
ns.xs4all.nl.           7200    IN      A       194.109.6.67
ns.xs4all.nl.           7200    IN      AAAA    2001:888:0:7::77
ns2.xs4all.nl.          7200    IN      A       194.109.9.100
ns2.xs4all.nl.          7200    IN      AAAA    2001:888:0:8::88
;; Query time: 9 msec
;; SERVER: 2a00:d78:0:102:193:176:144:5#53(2a00:d78:0:102:193:176:144:5)
;; WHEN: Mon Jul 16 13:11:44 2012
;; MSG SIZE  rcvd: 150
danielm@codex:~$

Datgene opvragen wat we nodig hebben (www.xs4all.nl.)

Het enige dat ons nu nog rest, is opvragen bij wie we moeten zijn voor www.xs4all.nl. Dit is vaak het laatste wat je browser opvraagt. Vergis je niet! Een DNS-server is geen webserver. Een website draait niet via DNS en kan hier ook geen invloed op uitoefenen. De communicatie met de webserver begint pas nadat alles omtrent de DNS uitgezocht is! Het werkt alleen als een telefoonboek of Gouden Gids, naam bij nummer en nummer bij naam. Verwijzingen naar delen van een website kunnen dus niet.

danielm@codex:~$ dig www.xs4all.nl @ns.xs4all.nl
; <<>> DiG 9.7.3 <<>> www.xs4all.nl @ns.xs4all.nl
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44196
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 4
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;www.xs4all.nl.                 IN      A
;; ANSWER SECTION:
www.xs4all.nl.          28800   IN      A       194.109.6.92
;; AUTHORITY SECTION:
xs4all.nl.              172800  IN      NS      ns2.xs4all.nl.
xs4all.nl.              172800  IN      NS      ns.xs4all.nl.
;; ADDITIONAL SECTION:
ns.xs4all.nl.           86400   IN      A       194.109.6.67
ns.xs4all.nl.           86400   IN      AAAA    2001:888:0:7::77
ns2.xs4all.nl.          172800  IN      A       194.109.9.100
ns2.xs4all.nl.          86400   IN      AAAA    2001:888:0:8::88
;; Query time: 1 msec
;; SERVER: 2001:888:0:7::77#53(2001:888:0:7::77)
;; WHEN: Mon Jul 16 13:18:17 2012
;; MSG SIZE  rcvd: 170
danielm@codex:~$

Bij de "ANSWER SECTION" zien we "www.xs4all.nl 28800 IN A 194.109.6.92" staan. Dit houdt in dat we een numeriek adres hebben gevonden (194.109.6.92) en onze browser daar nu mee zal gaan praten om de website op te vragen!