====== DNS cursus ======
===== Inleiding =====
Het **D**omain **N**ame **S**ystem (DNS) protocol is een standaard voor het opzoeken van de adressen die bij een domeinnaam horen.
Dit is enigzins vergelijkbaar met een telefoonboek, waarin op basis van de naam van een bedrijf of persoon het telefoonnummer opgezocht kan worden.
In DNS termologie wordt het "telefoonboek" een "zonefile" genoemd, en staan hier zogenaamde "DNS records" in.
Deze records bevatten informatie over de domeinnaam. Zo betekend het volgende record dat de webserver voor de website "wiki.je-eigen-domein.nl" het IP-adres 85.10.196.66 heeft:
wiki.je-eigen-domein.nl. IN A 85.10.196.66
Daarnaast staat er ook andere informatie in de zonefile, zoals bij welke server de e-mail voor het domein afgeleverd moet worden.
===== Nameservers =====
De servers die gebruikt worden voor het beheren en opzoeken van de informatie, worden nameservers genoemd.
DNS is een gedistribueert systeem. Dat wil zeggen dat niet alle gegevens van alle domeinen op een enkele nameserver te vinden zijn, maar dat elke nameserver slechts verantwoordelijk is voor een deel van de gegevens, en andere systemen geraadpleegt dienen te worden om een volledig antwoord te krijgen.
Op het moment dat een bezoeker de website "wiki.je-eigen-domein.nl" opvraagt, vinden er op de achtergrond de volgende oproepen plaats:
{{werking_dns.png|}}
* het besturingssysteem vraagt aan de nameserver van de access provider waarmee de bezoeker verbonden is met het Internet, wat het IP-adres van "wiki.je-eigen-domein.nl" is.
* de nameserver van de provider gaat vervolgens op zoek. Allereerst neemt deze daarvoor contact op met een [[http://www.root-servers.org/|root server]], en vraagt welke nameservers verantwoordelijk zijn voor het domein. De rootserver beschikt zelf niet over deze informatie, en zal daarom doorverwijzen naar de nameservers van [[http://www.sidn.nl/|SIDN]]. Dit is de organisatie die verantwoordelijk is voor de uitgifte van .nl domeinnamen.
* vervolgens wordt er contact opgenomen met een van de SIDN nameservers. Deze geven als antwoord dat "ns1.je-eigen-domein.nl", "ns2.je-eigen-domein.nl" en "ns3.je-eigen-domein.nl" verantwoordelijk zijn voor het domein "je-eigen-domein.nl".
* aan "ns1.je-eigen-domein.nl" wordt vervolgens gevraagd wat het IP-adres van "wiki.je-eigen-domein.nl" is. Deze antwoord "85.10.196.66"
===== Het wijzigen van de nameservers =====
Klanten van [[http://www.je-eigen-domein.nl/|je-eigen-domein.nl]] kunnen via de optie "nameservers wijzigen" in het beheerscherm de nameservers voor het domein wijzigen:
{{ns-change.png|}}
Hierbij dienen de namen van de nameservers opgegeven te worden.
Er dienen altijd minimaal twee servers opgegeven te worden, bij voorkeur beiden op een andere lokatie, zodat indien een van de servers een storing heeft, de informatie van het domein nog steeds opvraagbaar is.
Is dit niet het geval dan is niet alleen de website onbereikbaar, maar loopt u het risico dat e-mail die naar gebruikers van het domein verstuurd wordt, niet afgeleverd wordt en retour afzender gaat.
Hoewel mailservers het later nog een keer zouden moeten proberen op het moment dat de nameservers van een domein allemaal niet bereikbaar zijn, doen ze dit in de praktijk namenlijk niet altijd.
Indien de naam van de nameservers onderdeel van het domein uitmaakt (bijv. "domein.nl" gebruikt nameserver "ns1.domein.nl"), dan dient er een vinkje bij "glue records" gezet te worden en tevens de IP-adressen van de servers opgegeven te worden.
Op het moment dat de nameservers aangepast worden, wordt de wijziging automatisch doorgegeven aan de instantie die verantwoordelijk is voor dat type domein. Wel kan het enkele dagen duren voordat deze de wijziging verwerkt heeft.
===== Het wijzigen van de DNS gegevens =====
Het is mogelijk om van de nameservers van je-eigen-domein.nl gebruik te maken, zodat u zelf niet voor eigen nameservers op verschillende lokaties hoeft te zorgen.
Via de optie "DNS configureren" kunt u DNS records op deze servers aanmaken:
----
{{dns1.gif|DNS records aanmaken}}
----
===== DNS records =====
Onder het "DNS configureren" scherm ziet u een overzicht van alle DNS records m.b.t. het domein, alsmede de mogelijkheid om records toe te voegen of aan te passen:
{{zone-info.png|overzicht DNS records}}
Records kunnen op twee manieren geschreven worden:
Als subdomein:
www IN CNAME webfwd.je-eigen-domein.nl.
In dat geval wordt van "www" automatisch "www.456.eu" gemaakt.
Of als een volledige domeinnaam, ook wel **F**ull **Q**ualified **D**omain **N**ame (FQDN) genoemd:
www.456.eu. IN CNAME webfwd.je-eigen-domein.nl.
Let op: volledige domeinnamen moeten altijd op een punt eindigen!
Vergeet deze niet.
Doet u dat wel, en heeft u een record in de vorm van:
www.456.eu IN CNAME webfwd.je-eigen-domein.nl
Dan maakt het systeem ervan: "www.456.eu.456.eu." en "webfwd.je-eigen-domein.nl.456.eu."
Er zijn verschillende type records. Een overzicht van de meest gebruikte vindt u hieronder.
==== SOA record ====
je-eigen-domein.nl klanten: **het is normaal gesproken NIET nodig om de gegevens in dit record aan te passen.**
456.eu. 3600 IN SOA ns1.je-eigen-domein.nl. hostmaster.je-eigen-domein.nl.
2006040701 ; Serial
28800 ; Refresh
7200 ; Retry
604800 ; Expire
3600 ; Minimum TTL
Elke nameserver die verantwoordelijk (authoritative) is voor een domein heeft een **S**tart **O**f **A**uthority record.
Deze bevat de volgende informatie:
* MNAME veld ("ns1.je-eigen-domein.nl."): de naam van de primaire nameserver voor het domein.
* RNAME veld ("hostmaster.je-eigen-domein.nl."): het e-mail adres van de persoon die verantwoordelijk is voor de beheer van de zone (in dit geval hostmaster@je-eigen-domein.nl). Het apestaartje in het e-mail adres, dient vervangen te worden door een punt, en het adres dient op een punt te eindigen.
* SERIAL veld (2006040701): het serienummer van de zone informatie. Bij elke wijziging van een van de DNS gegevens dient dit nummer opgehoogt te worden. De webinterface doet dit automatisch.
* REFRESH / RETRY / EXPIRE velden: oorspronkelijk waren deze bedoeld voor de synchronizatie van de verschillende nameservers. Hierbij kon opgegeven worden hoe vaak de secondaire nameservers de gegevens van de primaire server moesten kopieeren (elke REFRESH aantal seconden). En na hoeveel tijd dit nog een keer geprobeert moest worden (RETRY) in het geval dit niet lukte. Lukte dit na lange tijd nog steeds niet (EXPIRE) dan werden de gegevens van de secondaire servers verwijderd.
Moderne nameserver software maakt echter gebruik van andere methoden om de gegevens tussen de verschillende nameservers up-to-date te houden, en negeert deze velden.
* MINIMUM TTL veld: tegenwoordig geeft het mimimum TTL veld in de SOA het aantal seconden aan dat een negatief antwoord gecached mag worden. Op het moment dat iemand een subdomein opvraagt dat (nog) niet bestaat, dan is dat een negatief antwoord.
==== A records ====
Met **A**dress records kan een subdomein aan een IP-adres gekoppeld worden.
Wilt u het "www" subdomein aan een server met het IP-adres 1.2.3.4 koppelen dan ziet het record er als volgt uit:
www IN A 1.2.3.4
Wilt u het domein zelf (dus domein.nl, en niet www.domein.nl) aan het domein koppelen, dan vult u de naam van het domein gevolgd door een punt in:
domein.nl. IN A 1.2.3.4
Een "bijzonder geval" is "localhost"
Om historische redenen dient elk domein een "localhost" record te hebben dat naar 127.0.0.1 wijst:
localhost IN A 127.0.0.1
==== CNAME records ====
Met een **C**anonical **NAME** record, kunt u een alias maken.
Stel dat domein.nl, www.domein.nl en ftp.domein.nl allemaal naar dezelfde server met IP-adres 1.2.3.4 moeten verwijzen dan kunt u schrijven:
domein.nl. IN A 1.2.3.4
www IN CNAME domein.nl.
ftp IN CNAME domein.nl.
Dit heeft het voordeel dat als de server ooit van IP-adres verandert, dit maar op 1 plaats aangepast hoeft te worden.
Er zitten een tweetal voorwaarden aan het gebruik van CNAME records:
* Een CNAME record mag alleen naar een hostname (A-record) verwijzen. Een CNAME record mag dus niet naar een andere CNAME verwijzen.
* Een CNAME record mag alleen voor SUBdomeinen (zoals "www.domein.nl" of "ftp.domein.nl") gebruikt worden. Voor het domein zelf ("domein.nl") mag dit niet, het volgende is dus NIET toegestaan:
domein.nl. IN CNAME hostname.domein.nl.
==== Wildcard records ====
Het is mogelijk alle subdomeinen zoals "www" en "ftp" apart te specificeren, maar als alle subdomeinen naar dezelfde server verwijzen is het ook mogelijk een wildcard record aan te maken:
* IN A 1.2.3.4
Dit zorgt ervoor dat alle SUBdomeinen aan de server met IP-adres 1.2.3.4 gekoppeld worden.
Indien het domein zelf ook gekoppeld moet worden kan het volgende opgegeven worden:
domein.nl. IN A 1.2.3.4
* IN CNAME domein.nl.
==== NS records ====
je-eigen-domein.nl klanten: **het is normaal gesproken NIET nodig om de gegevens in deze records aan te passen.**
domein.nl. IN NS ns1.je-eigen-domein.nl.
domein.nl. IN NS ns2.je-eigen-domein.nl.
domein.nl. IN NS ns3.je-eigen-domein.nl.
Voor elk nameserver die verantwoordelijk is voor het domein dient een **N**ame **S**erver record aangemaakt te worden.
==== MX records ====
Met **M**ail e**X**changer records kan ingesteld worden waar de e-mail voor het domein afgeleverd moet worden:
domein.nl. IN MX 0 mx1.je-eigen-domein.nl.
domein.nl. IN MX 100 mx2.je-eigen-domein.nl.
Het is mogelijk meerdere mailservers op te geven. Mailservers met een LAAG prioriteitsnummer dienen het EERST te worden geprobeert.
Alleen als het niet lukt om verbinding te krijgen met de mailserver met het laagste nummer, dienen de andere servers te worden gebruikt.
Is het prioriteitsnummer gelijk, dan worden de mailservers in willekeurige volgorde gebruikt.
===== Caching en TTL =====
Op het moment dat u DNS gegevens wijzigt kan het enige tijd duren voordat al de bezoekers van het domein de nieuwe gegevens gebruiken.
De gegevens worden namenlijk op meerdere plaatsen gecached. Dit kan door de nameserver van de provider van de bezoeker gebeuren, maar ook het besturingssysteem van de computer van de bezoeker, zijn webbrowser en zelfs sommige ADSL routers slaan de gegevens enige tijd op.
De tijd dat dat records mogen worden opgeslagen, is de zogenaamde **T**ime **T**o **L**ive. Deze waarde kunt u zelf instellen.
Heeft u bijvoorbeeld het record:
www 3600 IN A 1.2.3.4
Dan bedraagt de TTL 3600 seconden. De gegevens mogen dan 1 uur lang gecached worden.
Na 1 uur dient de nameserver opnieuw geraadpleegt te worden om te vragen of de gegevens nog steeds juist zijn.
Houd er echter rekening mee dat niet elk systeem zich aan de opgegeven waarde houdt.
Zo kan het voorkomen dat als u een IP-adres verandert, ook enkele dagen nadat de gegevens aangepast zijn, er nog steeds bezoekers zijn die bij het oude adres uitkomen.
Hier valt helaas weinig aan te doen.
Ook als een record wordt opgevraagd dat (nog) niet bestaat, omdat u bijvoorbeeld vergeten bent een subdomein aan te maken, wordt het negatieve antwoord gecached.
De tijd dat een negatief antwoord gecached mag worden kan in het SOA record ingesteld worden (minimum TTL).