Laatst kreeg ik de vraag hoe je een subdomein kunt toevoegen aan een hosting server. Qua vhosts in apache lukte dit wel, maar het DNS stuk was toch wat lastig.

Aan de hand daarvan heb ik besloten om maar eens een stuk te schrijven over DNS, wat is dat nou eigenlijk, waar gebruik je het voor en hoe kun je het instellen.

DNS

De term DNS staat voor Domain Name Server. En is vergelijkbaar met je contactenlijst van je mobiele telefoon.

Elke systeem dat aan het internet is gekoppeld, of het nou een thuis computer is of een server waar websites op draaien, heeft een IP adres. Een IP adres ziet er uit als 4 groepjes cijfers gescheiden door een punt. Elke groepje heeft een waarde tussen 0 en 255. Een voorbeeld van een adres is 195.14.1.110.

Voor de wat meer deskundige onder ons hebben we nog onderscheid tussen publieke en niet-publieke adressen. De publieke adressen kunnen worden gebruikt op internet en de niet publieke adressen kunnen gebruikt worden in een lokaal netwerk. Deze niet publieke adressen zijn 10.0.0.0 – 10.255.255.255, 172.16.0.0 – 172.32.255.255 en 192.168.0.0 – 192.168.255.255.
Om het nog lastiger te maken gaan we over van IPv4 (een voorbeeld adres hiervan is 195.14.1.110) naar IPv6 (een voorbeeld hiervan is 2001:5c0:1509:2300:8c7b:3160:e50c:3f16). Op IPv6 zal ik nu verder niet in gaan.

Zoals je hierboven kunt zien is een ipadres (net zoals een telefoonnummer) lastig te onthouden. Om dit makkelijker te maken, is DNS bedacht. Met DNS is er een server (de DNS server) die weet welk domein is gekoppeld met welk ipadres. Het is bijvoorbeeld gemakkelijker om naar www.jasperaikema.nl te browsen, dan elke keer te moeten onthouden welk ipadres daar ook alweer bij hoorde.

Dit is de basis van DNS, maar hier houdt het nog lang niet op.

DNS records

De verwijzing van een domeinnaam naar een ipadres heet een record. In dit geval een A record. Bij het voorbeeld hierboven zou een A record zeggen: ‘De hostname www.jasperaikema.nl heeft het ipadres 195.14.1.110’.

Naast A records bestaan er nog meer records.

– MX record: Met een MX record geef je aan welke mailservers er beschikbaar zijn voor het domein
– NS record: Hiermee geef je aan welke DNS servers er voor het domein zijn
– CNAME record: Met een CNAME record kun je een soort van redirect maken naar een ander DNS naam. Dit kan een A record zijn maar ook een andere CNAME.
– AAAA record: Het AAAA record is gelijk aan een A record, maar dan voor IPv6 adressen.
– TXT record: Een TXT record kan gebruikt worden om extra velden toe te voegen. Dit is meer een notitie aan je domein. Met Google Analytics wordt er bijvoorbeeld gevraag om een TXT record aan te maken met een tekst erin welke Google geeft. Hiervoor weet Gooogle dat je de eigenaar van het domein bent.
– SOA record: Het SOA record is het configuratie record voor het domein. Hierin staat hoelang een DNS record in de cache mag blijven staan en meer van dat soort gegevens.

Maar hoe werkt ‘het’ nou eigenlijk

Waarschijnlijk is dit de meeste interessantste vraag, wat gebeurt er als je www.jasperaikema.nl intiept. Hoe weet je browser dan waar die moet wezen?

Een computer heeft met de configuratie van het netwerk 1 of meerdere DNS servers meegekregen. De browser neemt contact met 1 van deze DNS servers en zal de volgende vraag stellen.

1. Welk A record hoort er bij www.jasperaikema.nl

De DNS server zal dan in zijn eigen cache kijken of hij dat weet en of het record niet verlopen is. Mocht de DNS server dat weten en het record is niet verlopen, dan zal hij de gegevens terug sturen naar de browser en kan de pagina opgevraagd worden.

In dit voorbeeld zal ik er vanuit gaan dat de DNS server (en de andere DNS servers welke hierna nog volgen) dit allemaal niet in hun cache hebben staan en dus niet direct antwoord kunnen geven.

De DNS server zal de url opknippen in stukken, waarbij de url geknipt wordt op de punt. De DNS server begint aan de linkerkant en zal elke keer kijken of hij weet welke DNS server bij het resterende stuk hoor. In dit voorbeeld dus 3 keer.

– www.jasperaikema.nl
– jasperaikema.nl
– nl

Mocht het zo zijn na de drie stukken nog steeds niet bekend is welke DNS servers verantwoordelijk zijn voor voor een stuk van de url, zal er contact opgenomen worden met de DNS root servers. Dit zijn op dit moment 14 servers waarvan de IP adressen geconfigureerd staan in de DNS servers. Onder linux kun je de root servers opvragen dmv


#dig

; <<>> DiG 9.8.1-P1 <<>>
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35623 ;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13 ;; QUESTION SECTION: ;. IN NS ;; ANSWER SECTION: . 2881593 IN NS k.root-servers.net. . 2881593 IN NS d.root-servers.net. . 2881593 IN NS e.root-servers.net. . 2881593 IN NS c.root-servers.net. . 2881593 IN NS l.root-servers.net. . 2881593 IN NS i.root-servers.net. . 2881593 IN NS m.root-servers.net. . 2881593 IN NS a.root-servers.net. . 2881593 IN NS j.root-servers.net. . 2881593 IN NS f.root-servers.net. . 2881593 IN NS h.root-servers.net. . 2881593 IN NS b.root-servers.net. . 2881593 IN NS g.root-servers.net. ;; ADDITIONAL SECTION: k.root-servers.net. 56456 IN A 193.0.14.129 k.root-servers.net. 56599 IN AAAA 2001:7fd::1 d.root-servers.net. 56456 IN A 128.8.10.90 d.root-servers.net. 56456 IN AAAA 2001:500:2d::d e.root-servers.net. 56456 IN A 192.203.230.10 c.root-servers.net. 56456 IN A 192.33.4.12 l.root-servers.net. 56456 IN A 199.7.83.42 l.root-servers.net. 56456 IN AAAA 2001:500:3::42 i.root-servers.net. 56456 IN A 192.36.148.17 i.root-servers.net. 56456 IN AAAA 2001:7fe::53 m.root-servers.net. 56456 IN A 202.12.27.33 m.root-servers.net. 56456 IN AAAA 2001:dc3::35 a.root-servers.net. 56456 IN A 198.41.0.4 ;; Query time: 19 msec ;; SERVER: 192.168.176.101#53(192.168.176.101) ;; WHEN: Thu Aug 16 21:40:41 2012 ;; MSG SIZE rcvd: 509

De DNS server zal at random 1 van de root DNS server benaderen met de vraag welke hierboven stond.

2. Welk A record hoort er bij www.jasperaikema.nl

De DNS server zal het antwoord krijgen dat die server het niet weet, maar die wijst ook 1 of meerdere DNS servers aan die waarschijnlijk meer weten. Dit kun je ook handmatig doen dmv:


# dig A @k.root-servers.net. www.jasperaikema.nl

; <<>> DiG 9.8.1-P1 <<>> A @k.root-servers.net. www.jasperaikema.nl
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54987 ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 7, ADDITIONAL: 14 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;www.jasperaikema.nl. IN A ;; AUTHORITY SECTION: nl. 172800 IN NS nl1.dnsnode.net. nl. 172800 IN NS ns1.dns.nl. nl. 172800 IN NS ns2.dns.nl. nl. 172800 IN NS ns3.dns.nl. nl. 172800 IN NS ns4.dns.nl. nl. 172800 IN NS ns-nl.nic.fr. nl. 172800 IN NS sns-pb.isc.org. ;; ADDITIONAL SECTION: nl1.dnsnode.net. 172800 IN A 194.146.106.42 ns1.dns.nl. 172800 IN A 193.176.144.5 ns2.dns.nl. 172800 IN A 213.154.241.85 ns3.dns.nl. 172800 IN A 194.171.17.10 ns4.dns.nl. 172800 IN A 95.142.99.212 ns-nl.nic.fr. 172800 IN A 192.93.0.4 sns-pb.isc.org. 172800 IN A 192.5.4.1 nl1.dnsnode.net. 172800 IN AAAA 2001:67c:1010:10::53 ns1.dns.nl. 172800 IN AAAA 2a00:d78:0:102:193:176:144:5 ns2.dns.nl. 172800 IN AAAA 2001:7b8:606::85 ns3.dns.nl. 172800 IN AAAA 2001:610:0:800d::10 ns4.dns.nl. 172800 IN AAAA 2a00:1188:5::212 ns-nl.nic.fr. 172800 IN AAAA 2001:660:3005:1::1:2 sns-pb.isc.org. 172800 IN AAAA 2001:500:2e::1 ;; Query time: 19 msec ;; SERVER: 193.0.14.129#53(193.0.14.129) ;; WHEN: Thu Aug 16 21:46:32 2012 ;; MSG SIZE rcvd: 504

Je ziet dat er 7 DNS servers zijn welke verantwoordelijk zijn voor het .nl domein. Deze DNS server worden beheerd door het SIDN. Als een hostingprovider een domeinnaam voor aanvraagt, zal hij dit bij het SIDN doen.

Ook aan 1 van deze servers zal de vraag gesteld worden.

3. Welk A record hoort er bij www.jasperaikema.nl

Ook dit keer zal de DNS server het antwoord krijgen dat die server het niet weet, maar ook nu wijst de DNS server 1 of meerdere DNS servers aan die waarschijnlijk meer weten. Dit kun je ook handmatig doen dmv:


dig A @nl1.dnsnode.net. www.jasperaikema.nl

; <<>> DiG 9.8.1-P1 <<>> A @nl1.dnsnode.net. www.jasperaikema.nl
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63741 ;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 3, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;www.jasperaikema.nl. IN A ;; AUTHORITY SECTION: jasperaikema.nl. 7200 IN NS ns3.byshosting.nl. jasperaikema.nl. 7200 IN NS ns5.byshosting.eu. jasperaikema.nl. 7200 IN NS ns4.byshosting.com. ;; ADDITIONAL SECTION: ns3.byshosting.nl. 7200 IN A 195.14.1.31 ;; Query time: 15 msec ;; SERVER: 194.146.106.42#53(194.146.106.42) ;; WHEN: Thu Aug 16 21:51:31 2012 ;; MSG SIZE rcvd: 145

We komen al een stuk dichter bij ons einddoel. We krijgen antwoord van de servers van het SIDN dat de DNS servers van BysHosting (mijn hostingprovider) het antwoord waarschijnlijk wel weet. Dus ook hier komt dezelfde vraag weer:

4. Welk A record hoort er bij www.jasperaikema.nl


dig A @ns3.byshosting.nl. www.jasperaikema.nl

; <<>> DiG 9.8.1-P1 <<>> A @ns3.byshosting.nl. www.jasperaikema.nl
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27873 ;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;www.jasperaikema.nl. IN A ;; ANSWER SECTION: www.jasperaikema.nl. 86400 IN CNAME jasperaikema.nl. jasperaikema.nl. 86400 IN A 195.14.1.110 ;; Query time: 20 msec ;; SERVER: 195.14.1.31#53(195.14.1.31) ;; WHEN: Thu Aug 16 21:53:23 2012 ;; MSG SIZE rcvd: 67

En deze DNS servers wisten inderdaad het ipadres van de url. Je ziet dat er een CNAME terug wordt gegeven welke doorverwijst naar jasperaikema.nl. Daarnaast geeft de DNS server ook alvast het ipadres van jasperaikema.nl, zodat er niet nog een request hoeft te komen. Dit scheelt weer tijd.

De DNS server waaraan de browser het ipadres vroeg, weet nu het ipadres en zal deze terug geven aan de browser. Al deze stappen zullen in een paar miliseconden gebeuren. En hier merk je als gebruiker zo goed als niets van.