Linux concept: DNS
DNS is het deel van het internet waar iedereen de schuld aan geeft en dat vrijwel niemand beheert. Als een website uitvalt, als er geen mail meer aankomt, als een certificaat weigert te vernieuwen, zegt iemand "het zal wel DNS zijn", en vaker dan gezond is heeft die persoon gelijk. Dat komt niet doordat DNS kwetsbaar is. Het komt doordat een enkele domeinnaam meestal verdeeld is over drie verschillende bedrijven, ingesteld door vier verschillende mensen, en gecachet op duizend plekken die niemand beheert.
1. De basis
Het Domain Name System zet namen om in de informatie die een computer nodig heeft om een dienst te bereiken. Meestal is dat een IP-adres, maar DNS draagt ook waar je mail heen gaat, welke certificaatautoriteiten voor jou mogen uitgeven, en welke servers namens jou mogen verzenden.
Het wordt vaak het telefoonboek van het internet genoemd. Die vergelijking is geruststellend en net niet juist, want een telefoonboek is een document dat iemand drukt. DNS is een gedistribueerde database met gedelegeerd gezag: geen enkele machine bevat het geheel, geen enkele organisatie publiceert het, en elk deel wordt beantwoord door wie de verantwoordelijkheid voor dat deel gekregen heeft.
Die delegatie is het hele ontwerp. De root delegeert .nl aan het Nederlandse register. Het Nederlandse register delegeert petermartin.nl aan de naamservers die de eigenaar opgegeven heeft. Die naamservers antwoorden voor alles daaronder. Elk niveau weet net genoeg om naar het volgende te wijzen.
Het juiste mentale model: DNS is geen opzoektabel, het is een keten van doorverwijzingen. Niemand heeft het hele antwoord; iedereen weet wie je vervolgens moet vragen. Bijna elk verwarrend DNS-probleem is een gebroken schakel in die keten, of een gecachete kopie van een schakel die intussen veranderd is.
1.1 De vier rollen
Bij elke lookup zijn vier verschillende soorten software betrokken, en ze door elkaar halen is verreweg de meest voorkomende bron van verwarring. Ze zijn niet uitwisselbaar.
| Rol | Wat het doet | Voorbeeld |
|---|---|---|
| Stub-resolver | Het kleine clientje in je machine. Weet niets, vraagt een server, gelooft het antwoord. | systemd-resolved op 127.0.0.53 |
| Recursieve resolver | Doet het echte uitzoekwerk, van de root naar beneden, en cachet wat het leert. | Je provider, 1.1.1.1, 8.8.8.8 |
| Autoritatieve server | Bevat de echte records voor een zone en cachet nooit iets. De bron van waarheid. | chelsea.ns.cloudflare.com |
| Register | Beheert een topleveldomein en publiceert de delegatie die naar jouw naamservers wijst. | SIDN voor .nl, Verisign voor .com |
Het praktische gevolg: "de DNS klopt niet" is nooit een volledige zin. Een record kan tegelijkertijd juist zijn op de autoritatieve server, verouderd in een recursieve resolver en afwezig in de cache van je eigen machine, en alle drie gedragen zich zoals het hoort.
1.2 Wat een lookup werkelijk doet
Als je browser www.petermartin.nl nodig heeft en er nergens iets gecachet is, ziet de reis er zo uit:
your browser
↓ "where is www.petermartin.nl?"
stub resolver (127.0.0.53)
↓
recursive resolver (your ISP, or 1.1.1.1)
↓ asks a root server: "who handles .nl?"
↓ asks the .nl registry: "who handles petermartin.nl?"
↓ asks Cloudflare: "what is www.petermartin.nl?"
↓
back up the chain, cached at every step that allows it
Drie verzoeken aan drie verschillende organisaties, voor een naam. Dat klinkt traag, en de eerste lookup is dat ook. Elke stap daarna wordt uit de cache beantwoord tot de TTL afloopt, en daarom voelt het tweede bezoek aan een site meteen snel.
Het belangrijkste is wat er gecachet wordt en waar. De recursieve resolver cachet het antwoord en de doorverwijzingen, dus de volgende bezoeker die om een andere naam onder .nl vraagt slaat de root helemaal over. Dit is ook waarom een wijziging die je doorvoert voor sommige mensen onzichtbaar is en voor andere niet: hun resolvers cachetten op verschillende momenten.
1.3 Waar dit artikel over gaat
Dit artikel gaat over DNS als iets wat je ontwerpt en beheert: wie welk stuk in handen heeft, hoe je een zone indeelt, hoe mailauthenticatie in elkaar past, wat je aan weerbaarheid en DNSSEC doet, en welke beslissingen je later spijt gaan geven.
Het herhaalt bewust niet de techniek van DNS inspecteren vanaf de opdrachtregel. Voor records lezen, een delegatie volgen, een cache controleren en TTL-waarden kiezen, zie het bijbehorende artikel over het dig-commando, dat het gereedschap uitgebreid behandelt. Hier is de vraag niet "hoe zie ik het" maar "wat hoort het te zijn".
Naar boven2. Waar komt de naam vandaan?
DNS staat voor Domain Name System, en het woord dat de betekenis draagt is domain, domein.
DNS = Domain Name System
Een domein is een gebied van gezag. Het is dezelfde betekenis als in "het domein van een koning": een begrensd gebied waar een partij beslist. In DNS betekent een domein bezitten dat jij bepaalt waar elke naam erbinnen naar verwijst, en niemand boven je in de boom kan daar iets anders van maken. Ze kunnen alleen bepalen of ze naar je blijven wijzen.
Namen lees je van rechts naar links, van het meest algemene naar het meest specifieke, en elk stuk tussen de punten heet een label:
www . petermartin . nl .
| | | |
| | | └─ the root, written as an empty label
| | └─── top-level domain, run by a registry
| └─────────── the domain you registered
└─────────────────── a name inside your zone, your choice
Die punt aan het eind is geen versiering. Het is de wortel van de boom, en een naam die ermee geschreven wordt is volledig gekwalificeerd: hij betekent precies deze naam en niets anders. De meeste software laat je hem weglaten en voegt hem stilletjes toe, en daarom ziet hij er onbekend uit, zelfs voor mensen die al jaren met DNS werken.
Nog een term die het vastpinnen waard is, omdat hij overal losjes gebruikt wordt. Een zone is het deel van de boom waar een set naamservers daadwerkelijk voor antwoordt. Een domein is wat je geregistreerd hebt; een zone is wat een server bedient. Meestal zijn ze hetzelfde, en dat houdt op zodra je een subdomein aan iemand anders delegeert.
Naar boven3. Een korte geschiedenis
DNS is niet ontworpen als een grootse architectuur. Het is geschreven om een administratieve crisis op te lossen: een tekstbestand dat niet meer meeschaalde.
Voor DNS hield elke machine op het ARPANET een lokale kopie bij van een enkel bestand met de naam HOSTS.TXT, beheerd door het Network Information Center van het Stanford Research Institute. Elke nieuwe host betekende dat bestand aanpassen, en elke machine op het netwerk het opnieuw downloaden. Naarmate het netwerk groeide, groeide het bestand, groeiden de downloads, en groeide de vertraging tussen "er is een host" en "iedereen weet het".
In november 1983 publiceerde Paul Mockapetris de vervanging als twee documenten: RFC 882, "Domain Names Concepts and Facilities", dat het idee beschreef, en RFC 883, "Domain Names Implementation and Specification", dat vastlegde hoe het over de lijn werkte. Het inzicht was om niet langer een bestand te verspreiden, maar gezag.
| Jaar | Mijlpaal |
|---|---|
| Tot 1983 | Een HOSTS.TXT-bestand, met de hand bijgewerkt en naar elke machine gekopieerd |
| 1983 | Paul Mockapetris publiceert RFC 882 en RFC 883 en vervangt het bestand door een gedelegeerde boom |
| 1987 | RFC 1034 en RFC 1035 vervangen die, en bepalen DNS tot op vandaag |
| 1998 | ICANN wordt opgericht om namen en nummers te coordineren |
| 2010 | De rootzone wordt op 15 juli met DNSSEC ondertekend, waarmee de vertrouwensketen een beginpunt krijgt |
| 2016 | RFC 7858 legt DNS over TLS vast, en een grote aanval op een DNS-provider haalt een groot deel van het web onderuit |
| 2018 | RFC 8484 legt DNS over HTTPS vast, waarmee DNS de browser in verhuist |
| Vandaag | Ongeveer tweeduizend rootserver-instanties, twaalf beheerders, en een protocol dat er nog steeds uitziet als 1987 |
Twee dingen zijn het meenemen waard uit die tabel. De kernspecificatie is uit 1987 en is nooit vervangen, alleen uitgebreid. En elke uitbreiding sindsdien ging over de twee dingen waar het origineel geen rekening mee hield: bewijzen dat een antwoord echt is (DNSSEC), en de vraag privé houden (DoT en DoH). Het oorspronkelijke ontwerp ging uit van een klein netwerk waarin men elkaar vertrouwde, want in 1983 was dat ook zo.
Naar boven4. Wie beheert wat
Deze sectie bestaat omdat dit in de praktijk het meest voorkomende misverstand is, en het mensen dagen kost. Een domein dat aanvoelt als een ding dat je gekocht hebt, is in werkelijkheid drie losse afspraken met drie verschillende bedrijven, en weten waar je moet inloggen is het grootste deel van het werk.
4.1 Register, registrar, houder
Drie partijen, vergelijkbare namen, volstrekt verschillende taken:
| Partij | Wie ze zijn | Wat ze beheren |
|---|---|---|
| Register | De beheerder van een heel topleveldomein. Een per TLD. | De autoritatieve lijst van welke naamservers jouw domein bedienen |
| Registrar | Het bedrijf waar je koopt, geaccrediteerd om in het register te schrijven. | Je registratie, verlengingen, en de naamservers die namens jou doorgegeven worden |
| Houder | Jij. | Alles binnen de zone, zodra de delegatie naar jouw servers wijst |
Je praat nooit met het register. Je praat met een registrar, en de registrar praat namens jou met het register. Die tussenstap is waarom een wijziging van naamservers bij je registrar even kan duren voordat hij bij het register verschijnt, en waarom de kopie van het register degene is die de wereld volgt.
4.2 De driedeling, op een echt domein
Nu het deel dat mensen verrast. Het bedrijf waar je het domein gekocht hebt, het bedrijf dat DNS-vragen erover beantwoordt, en het bedrijf dat de website daadwerkelijk draait zijn vaak drie ongerelateerde ondernemingen. Hier is petermartin.nl, uit elkaar gehaald:
$ whois petermartin.nl | grep -A3 '^Registrar'
Registrar:
Registrar.eu
Hofplein 20
3032AC Rotterdam
$ dig +short petermartin.nl NS
finley.ns.cloudflare.com.
chelsea.ns.cloudflare.com.
$ dig +short petermartin.nl
23.88.98.40
$ whois 23.88.98.40 | grep -iE '^(netname|org-name|country):'
netname: CLOUD-NBG1
org-name: Hetzner Online GmbH
country: DE
Drie bedrijven, papierwerk uit drie landen, een domeinnaam:
| Laag | Wie | Wat er misgaat als het fout staat |
|---|---|---|
| Registratie | Registrar.eu, Rotterdam | Het domein verloopt, of de delegatie wijst naar de verkeerde naamservers |
| DNS-hosting | Cloudflare | Records zijn fout of ontbreken; de naam verwijst nergens heen |
| Webhosting | Hetzner, Duitsland | De naam wordt prima opgezocht en de site laadt alsnog niet |
Geen van deze is ongebruikelijk. Het is een volstrekt normale, goed opgezette situatie. Maar het verklaart waarom "mijn hostingbedrijf moet mijn DNS maar oplossen" zo vaak nergens toe leidt: het hostingbedrijf heeft er misschien niets mee te maken.
4.3 Waar moet deze wijziging gemaakt worden?
Bewaar deze tabel. Hij beantwoordt de vraag die mensen werkelijk ophoudt.
| Je wilt | Inloggen bij |
|---|---|
| De site naar een nieuwe server laten wijzen | De DNS-host (het A-record aanpassen) |
| Naar een andere DNS-provider verhuizen | De registrar (de naamservers wijzigen) |
| Wijzigen waar mail bezorgd wordt | De DNS-host (de MX-records aanpassen) |
| Het domein verlengen, of voorkomen dat het verloopt | De registrar |
| DNSSEC aanzetten | Allebei: de DNS-host ondertekent, de registrar publiceert het DS-record |
| Een site repareren die traag laadt of een certificaatfout geeft | Waarschijnlijk niemand uit deze tabel. Dat is de webhost |
De tweede en de vijfde rij zijn degene die mensen fout doen. Naamservers wijzigen is een actie bij de registrar, geen DNS-actie, en geen enkele recordwijziging bij welke provider dan ook doet het. DNSSEC aanzetten vereist dat beide kanten het eens zijn, en daarom is het de wijziging die het vaakst halverwege blijft steken.
Naar boven5. Een zone ontwerpen
Zodra de delegatie naar jouw naamservers wijst, is alles binnen de zone jouw beslissing. De meeste zones zijn klein, en de meeste ellende erin komt voort uit vier of vijf keuzes die zonder veel nadenken gemaakt zijn en pijnlijk terug te draaien zijn.
5.1 De apex, en waarom CNAME daar niet werkt
De apex (of "root" van je zone) is het kale domein, example.com zonder iets ervoor. Hij is bijzonder, en hij pakt iedereen precies een keer.
Je kunt geen CNAME op de apex zetten. De standaarden verbieden dat een CNAME naast welk ander record dan ook staat, en de apex draagt altijd SOA- en NS-records, want dat is wat er een zone van maakt. Een CNAME daar wordt dus niet alleen afgeraden; hij is niet te representeren.
Dat botst rechtstreeks met moderne hosting, waar providers je een naam geven in plaats van een adres, juist zodat ze het adres erachter kunnen wijzigen. De oplossingen, in volgorde van voorkeur:
| Optie | Hoe het werkt | Afweging |
|---|---|---|
ALIAS / ANAME / CNAME-flattening |
De DNS-provider zoekt het doel voor je op en publiceert het resultaat als een gewoon A-record |
Geen standaard, dus een functie van de provider. Werkt goed; bindt je wel aan die provider |
| De apex doorverwijzen | Laat de apex naar een kleine server wijzen die bezoekers naar www stuurt |
Schoon en overdraagbaar, maar er moet iets draaien dat de doorverwijzing doet |
Een gewoon A-record |
Het adres hard invullen | Eenvoudig, tot de provider het adres wijzigt zonder het te melden |
Biedt je provider flattening aan, gebruik het dan. Zo niet, dan is dat een echte reden om er een te overwegen die het wel doet.
5.2 Kies www of juist niet, en houd je eraan
Allebei werkt. Wat problemen geeft is ze als gelijken bedienen, want dan bestaat elke pagina op twee adressen, en moeten zoekmachines, cookies en certificaten allemaal te horen krijgen dat het hetzelfde is.
Kies er een als canoniek, publiceer allebei in DNS, en verwijs de een naar de ander door met een permanente redirect op de webserver. De DNS-kant is onopvallend:
example.com. 300 IN A 203.0.113.10
www.example.com. 300 IN CNAME example.com.
De CNAME is prima op www, want www is een gewone naam binnen de zone en niet de apex. Alleen de apex is beperkt.
5.3 Subdomeinen: records of delegatie?
Er zijn twee behoorlijk verschillende manieren om een subdomein te hebben, en de verkeerde kiezen levert later werk op.
- Records in je eigen zone.
shop.example.comis gewoon nog een naam die je naast al het andere beheert. Dit is bijna altijd wat je wilt. - Delegatie. Je publiceert
NS-records voorshop.example.comdie naar andermans naamservers wijzen, en geeft die hele tak uit handen. Vanaf dat moment kun je niets erbinnen zien of repareren.
Delegeer alleen wanneer een ander team of platform echt zijn eigen records op snelheid moet kunnen beheren, en dat betekent in de praktijk grote organisaties en sommige cloudplatformen. Voor een enkele site voegt delegatie een tweede plek toe waar dingen kapot kunnen en een tweede vertrouwensketen die intact moet blijven.
5.4 Wildcards antwoorden voor namen die je nooit aangemaakt hebt
Een wildcard-record past op alles wat geen eigen vermelding heeft:
*.example.com. 300 IN A 203.0.113.10
Het ziet er handig uit en het verandert stilletjes de betekenis van je zone. Elke typefout wordt nu opgezocht. Elk subdomein dat een aanvaller verzint wordt opgezocht. Monitoring die controleert "bestaat deze naam" zegt altijd ja. En een wildcard plus een toegeeflijke webserver is de klassieke opzet voor subdomain takeover, waarbij iemand zijn eigen inhoud serveert op een naam die van jou lijkt.
Gebruik een wildcard als je werkelijk onbeperkt veel namen bedient, zoals klantsubdomeinen op een platform. Zet anders de namen neer die je echt hebt. Het typen is niet het dure deel van een zone beheren.
5.5 Split horizon: dezelfde naam, twee antwoorden
Sommige organisaties antwoorden verschillend op dezelfde naam, afhankelijk van wie het vraagt: een privé-adres op het kantoornetwerk, een publiek adres van buitenaf. Dit heet split horizon, en het is een legitiem ontwerp.
Het is ook een valkuil voor wie het later moet uitzoeken, want twee mensen die te goeder trouw hetzelfde commando draaien krijgen verschillende antwoorden en concluderen allebei dat de ander in de war is. Draai je split horizon, documenteer het dan waar degene met dienst het vindt, en verwacht dat elk extern DNS-controlegereedschap iets anders zegt dan wat jij aan je bureau ziet.
5.6 TTL's kiezen
Elk record draagt een TTL, het aantal seconden dat een resolver het mag cachen, en die waarde is een echte ontwerpbeslissing en geen standaard om maar te accepteren. Hij bepaalt hoe snel je kunt bewegen, en hoe lang je blijft werken als je naamservers dat niet doen.
Kort samengevat: 300 seconden voor adressen, een dag voor NS-records, een uur voor mail- en tekstrecords, en verlaag alles een dag voor een geplande migratie. De onderbouwing, met metingen aan goed beheerde domeinen en de afweging in beide richtingen, staat in het dig-artikel, dat ook laat zien hoe je leest wat een zone werkelijk publiceert in plaats van wat een cache je vertelt.
6. Waar DNS nog meer voor gebruikt wordt
Een webserver vinden is de taak waar DNS bekend om staat, en het is niet meer de taak die het het meest doet. In de loop der jaren werd DNS de plek waar het internet zijn beleidsuitspraken bewaart: wie namens jou mag mailen, wie certificaten voor je mag uitgeven, en of een antwoord uberhaupt te vertrouwen is. Dit zijn de records die stilletjes falen en het meeste kosten.
6.1 Mailauthenticatie is een systeem, geen drie records
Niets in DNS verwart mensen zoals SPF, DKIM en DMARC, vooral omdat ze meestal een voor een uitgelegd worden. Het zijn drie delen van een enkele vraag: moet dit bericht geloofd worden?
| Record | Welke vraag het beantwoordt | Staat op |
|---|---|---|
MX |
Waar gaat mail naar dit domein heen? | Het domein zelf |
SPF (een TXT-record) |
Welke servers mogen als dit domein verzenden? | Het domein zelf |
DKIM (een TXT-record) |
Is dit bericht ondertekend met een sleutel die het domein gepubliceerd heeft? | selector._domainkey |
DMARC (een TXT-record) |
Wat moet een ontvanger doen als SPF en DKIM niet overeenkomen met het From-adres? | _dmarc |
PTR |
Geeft het verzendende IP toe dat het deze naam is? | De reverse zone, bij wie het IP bezit |
Lees die tabel van boven naar beneden en het ontwerp wordt zichtbaar. MX gaat over ontvangen; de rest gaat over verzenden. SPF autoriseert servers, DKIM autoriseert berichten, en DMARC is de instructie die van die controles een beslissing maakt en om rapportages vraagt.
De volgorde doet ertoe bij het uitrollen. Publiceer eerst SPF en DKIM en laat die draaien. Voeg daarna DMARC toe op p=none, wat niets verandert maar ontvangers vraagt je rapportages te sturen. Lees die rapportages een paar weken, vind de legitieme verzenders die je vergeten was (het facturatiesysteem, het nieuwsbriefplatform, het contactformulier op de oude site), en scherp pas daarna aan naar p=quarantine en p=reject.
Meteen naar p=reject gaan is de klassieke zelfveroorzaakte storing: het werkt perfect voor de mail waar je aan gedacht had en vernietigt stilletjes de mail waar je niet aan gedacht had.
Het PTR-record is het buitenbeentje en het enige dat mensen niet zelf kunnen repareren. Het staat in de reverse zone voor het IP-adres, en die hoort bij wie de adresruimte bezit, dus het wordt ingesteld door je hostingprovider en niet door jou. Verstuur je mail vanaf je eigen server, dan is een ontbrekend of algemeen PTR-record een veelvoorkomende reden voor bezorgproblemen die van jouw kant onverklaarbaar lijken.
6.2 DNS als eigendomsbewijs
Een hele categorie diensten vraagt je een DNS-record aan te maken om een reden die niets met namen opzoeken te maken heeft: bewijzen dat jij het domein beheert. Alleen de eigenaar kan een record in de zone publiceren, dus er een publiceren op verzoek is een bruikbaar bewijs.
_acme-challenge.example.com. 300 IN TXT "3aQ7v...token..."
example.com. 300 IN TXT "google-site-verification=..."
_dmarc.example.com. 300 IN TXT "v=DMARC1; p=none; rua=mailto:..."
De eerste is de DNS-01-challenge die Let's Encrypt en andere ACME-aanbieders gebruiken, en die is het begrijpen waard omdat hij iets doet wat de gebruikelijke HTTP-challenge niet kan: certificaten uitgeven voor een server die niet vanaf het internet bereikbaar is, en het is de enige manier om een wildcard-certificaat te krijgen. De prijs is dat je certificaatvernieuwing nu afhangt van een API bij je DNS-provider, en van of die API over tachtig dagen om drie uur 's nachts nog werkt.
Verificatierecords zijn ook waar zones rommel verzamelen. Elke dienst die je ooit uitgeprobeerd hebt liet een TXT-record achter. Los zijn ze onschadelijk en samen maken ze de zone onleesbaar, dus het is de moeite waard er jaarlijks doorheen te gaan en te verwijderen wat je niet meer gebruikt.
6.3 CAA: wie certificaten voor je mag uitgeven
Een CAA-record somt de certificaatautoriteiten op die voor jouw domein mogen uitgeven. Autoriteiten zijn verplicht het te controleren voor ze uitgeven, wat het een echte beheersmaatregel maakt en geen suggestie:
example.com. 3600 IN CAA 0 issue "letsencrypt.org"
example.com. 3600 IN CAA 0 issuewild "letsencrypt.org"
Het is een klein record met veel waarde: het beperkt de schade als iemand een andere autoriteit misleidt om voor jouw naam uit te geven. Het is ook een betrouwbare oorzaak van certificaatvernieuwingen die jaren later mislukken, wanneer een bedrijf van provider wisselt en niemand zich een record herinnert dat in een vorige baan ingesteld is. Mislukt een vernieuwing zonder zichtbare reden, kijk dan vroeg naar CAA.
6.4 DNSSEC: moet je ondertekenen?
DNSSEC ondertekent de records in een zone zodat een validerende resolver kan bewijzen dat een antwoord van jou kwam en onderweg niet gewijzigd is. De keten loopt van de root, die in 2010 ondertekend is, via het register naar jouw zone.
De eerlijke samenvatting van de afweging:
- Wat je wint. Antwoorden voor jouw domein kunnen onderweg niet vervalst worden of in de cache van een resolver gestopt worden. Het is ook een voorwaarde voor alles wat vertrouwen in DNS-records legt, zoals het publiceren van certificaatvingerafdrukken.
- Wat het kost. Handtekeningen verlopen. Gaat het ondertekenen stuk en merkt niemand het, dan wordt je domein niet trager, het verdwijnt voor elke validerende resolver tegelijk, en dat zijn er tegenwoordig de meeste. En de storing ziet er vanaf de autoritatieve server uit als een werkend domein, dus hij is verwarrend te onderzoeken.
- Wat de doorslag geeft. Of je DNS-provider de hele levenscyclus regelt, inclusief het wisselen van sleutels, en of het
DS-record naar je registrar duwen een knop is of een supportticket.
Met een provider die het van begin tot eind beheert: aanzetten. Zou ondertekenen een handmatige klus zijn die je een keer doet en nooit meer bekijkt, dan is het risico reëel en moet je er langer over nadenken. Een half afgemaakte DNSSEC-uitrol, waarbij de zone ondertekend is maar het DS-record bij de registrar nooit gepubliceerd werd, is de veelvoorkomende tussentoestand: het levert niets op en niemand merkt het, want alles blijft werken.
6.5 Versleuteld DNS, en wat het voor jou verandert
Klassiek DNS reist in platte tekst, dus iedereen op het pad kan lezen wat je opzoekt en het antwoord wijzigen. Twee standaarden losten dat op: DNS over TLS (RFC 7858, mei 2016) op poort 853, en DNS over HTTPS (RFC 8484, oktober 2018) op poort 443.
Allebei versleutelen ze het gesprek tussen een client en zijn resolver. Geen van beide versleutelt iets aan jouw autoritatieve servers, en geen van beide wijzigt ook maar een record dat je publiceert, dus als domeineigenaar valt er niets in te stellen.
Wat het wel verandert is het onderzoeken van problemen. Een browser met DoH aan kan de resolver omzeilen die het besturingssysteem ingesteld heeft, dus de machine en de browser kunnen het werkelijk oneens zijn over een naam. Laadt een site in de ene browser wel en in de andere niet op dezelfde laptop, dan is versleuteld DNS in de instellingen van de browser een serieuze verdachte, en het is de reden dat de mail- en webcontroles die mensen vanaf de opdrachtregel draaien soms niet weergeven wat de browser gedaan heeft.
Naar boven7. DNS op een Linux-machine
Alles tot nu toe ging over het domein dat je publiceert. Deze sectie gaat over de machine voor je neus, want de clientkant heeft zijn eigen regels en die zijn de reden dat twee mensen dezelfde lookup kunnen draaien en het oneens zijn.
7.1 Je resolv.conf is waarschijnlijk een symlink
De traditionele plek waar een Linux-machine zijn resolverinstellingen bewaart is /etc/resolv.conf. Generaties documentatie zeggen dat je dat bestand moet aanpassen. Op een modern systeem klopt dat advies meestal niet, en hier is het bewijs:
$ ls -l /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Apr 24 2024 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
$ cat /etc/resolv.conf
nameserver 127.0.0.53
options edns0 trust-ad
search .
Het bestand is een symlink naar een map die bij het opstarten opnieuw aangemaakt wordt. Alles wat je erin typt is de volgende herstart kwijt, of eerder. Verschillende programma's kunnen het genereren: systemd-resolved, NetworkManager, een DHCP-client, resolvconf, een VPN-client of een containerruntime.
Op de meeste netwerken komen de DNS-servers in dat bestand helemaal niet van een persoon: ze kwamen binnen in een DHCP-lease, samen met het adres en de gateway. Het bijbehorende artikel over DHCP behandelt waar die instellingen vandaan komen en waarom ze hier aanpassen niet blijvend is.
Die 127.0.0.53 is geen DNS-server op het internet. Het is de lokale stub, en de echte bovenliggende servers zitten erachter, per netwerkinterface. De eerlijke manier om ze te zien is het vragen aan degene die ze beheert:
$ resolvectl status | grep -A2 'Current DNS Server'
Current DNS Server: 192.168.1.1
DNS Servers: 192.168.1.1
$ resolvectl query petermartin.nl
petermartin.nl: 2a01:4f8:c0c:6848::1 -- link: wlp0s20f3
23.88.98.40 -- link: wlp0s20f3
-- Information acquired via protocol DNS in 5.2ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
De laatste regel is het twee keer lezen waard. Die meldt of het antwoord met DNSSEC gevalideerd is en of het versleuteld gereisd heeft, twee dingen waar mensen meestal naar raden. Hier is het antwoord op allebei "no", wat de normale toestand is op een laptop die met een thuisrouter praat.
Wil je de instellingen wijzigen, wijzig ze dan waar ze gemaakt worden: het verbindingsprofiel in NetworkManager, de DHCP-server, of /etc/systemd/resolved.conf. Het doel van de symlink aanpassen is een oplossing die het tot dinsdag volhoudt.
7.2 De volgorde waarin Linux werkelijk opzoekt
DNS is niet de enige manier waarop een Linux-machine een naam in een adres omzet, en het is niet per se de eerste. De volgorde staat in /etc/nsswitch.conf:
$ grep '^hosts:' /etc/nsswitch.conf
hosts: files mdns4_minimal [NOTFOUND=return] dns mymachines
Van links naar rechts gelezen kijkt die machine eerst in /etc/hosts, dan naar multicast-DNS voor .local-namen, en pas daarna naar echt DNS. Het [NOTFOUND=return] tussen haken betekent dat als mDNS een definitief "nee" geeft, het zoeken daar stopt in plaats van door te vallen.
Deze ene regel verklaart een hele categorie verwarring. Een naam in /etc/hosts wordt opgezocht voor je browser en je scripts terwijl DNS er niets van weet. Een .local-naam bereikt DNS misschien nooit. En een DNS-gereedschap op de opdrachtregel vraagt het rechtstreeks aan een naamserver en slaat deze lijst volledig over, dus het kan het eerlijk oneens zijn met elke toepassing op de machine.
De regel die daaruit volgt is eenvoudig. Wil je vragen "wat zegt DNS", gebruik dan een DNS-gereedschap. Wil je vragen "wat doet deze machine werkelijk", gebruik dan getent, dat de lijst hierboven afloopt precies zoals een toepassing dat zou doen:
$ getent hosts petermartin.nl
Het bijbehorende artikel over het dig-commando behandelt deze grens uitgebreider, inclusief waarom een naam overal kan werken en toch lijkt niet te bestaan.
7.3 Containers hebben hun eigen DNS, en het hangt van het netwerk af
Een container erft de resolverinstellingen van je machine niet, en het verschil bijt precies tijdens de sessie waarin je een verrassing het minst kunt gebruiken. Wat hij krijgt hangt af van welk Docker-netwerk hij is binnengegaan, en de twee gevallen gedragen zich volstrekt verschillend.
Op de standaard bridge krijgt de container de bovenliggende server van de host en verder niets:
$ docker run --rm alpine cat /etc/resolv.conf
nameserver 192.168.1.1
search .
$ docker run -d --name db2 alpine sleep 60
$ docker run --rm alpine getent hosts db2
# nothing: names do not resolve here
Op een zelfgemaakt netwerk zet Docker zijn eigen ingebouwde resolver ertussen en gaan containernamen werken:
$ docker network create dnstest
$ docker run --rm --network dnstest alpine cat /etc/resolv.conf
nameserver 127.0.0.11
search .
options edns0 trust-ad ndots:0
$ docker run -d --network dnstest --name db alpine sleep 60
$ docker run --rm --network dnstest alpine getent hosts db
172.19.0.2 db db
Dat adres, 127.0.0.11, is de ingebouwde DNS-server van Docker, en die zoekt de ene containernaam naar de andere op. Dit is waarom servicenamen in een Docker Compose-stack werken zonder dat iemand DNS ingesteld heeft: Compose maakt automatisch een eigen netwerk voor het project aan.
Twee praktische gevolgen. Ten eerste: kan een applicatie in een container zijn database niet bereiken, test het opzoeken dan binnen de container en niet op de host, want ze antwoorden vanaf verschillende resolvers. Ten tweede: onderzoek je een stack waar namen niet opgezocht worden, controleer dan op welk netwerk de containers werkelijk zitten voordat je naar iets anders kijkt.
$ docker exec -it mycontainer cat /etc/resolv.conf
$ docker exec -it mycontainer getent hosts database
Hetzelfde idee schaalt op. Kubernetes draait een cluster-DNS-dienst, meestal CoreDNS, en geeft elke service een naam als database.default.svc.cluster.local zodat applicaties elkaar kunnen vinden zonder vaste adressen. DNS is al een tijd niet meer alleen een internetgids; binnen moderne platformen is het de laag waarmee diensten elkaar vinden.
7.4 Word geen open resolver
Je kunt je eigen recursieve resolver op Linux draaien, en daar zijn goede redenen voor: lokale caching, je eigen DNSSEC-validatie, onafhankelijkheid van een derde partij, en logs die je zelf beheert. unbound is de gebruikelijke keuze, en BIND kan het ook.
Er is een manier om dit ernstig fout te doen, en die is het waard om ronduit te benoemen. Een recursieve resolver die iedereen op het internet antwoordt is een open resolver, en die wordt binnen dagen gevonden en misbruikt.
Het misbruik heet amplificatie. DNS loopt traditioneel over UDP, dat niet controleert wie een pakket verstuurd heeft, dus stuurt een aanvaller kleine vragen met het adres van het slachtoffer als vervalste afzender. Jouw server stuurt keurig veel grotere antwoorden naar dat slachtoffer. Een bescheiden verzoek wordt een stortvloed, de aanvaller kost het vrijwel niets, en het verkeer komt van jouw adres in plaats van het zijne.
Het voorkomen is niet ingewikkeld:
- Beperk recursie tot clients die je vertrouwt, oftewel je eigen netwerken. Deze ene instelling haalt het hele probleem weg.
- Houd de twee rollen gescheiden. Een server die je zones aan de wereld publiceert is autoritatief en heeft helemaal geen recursie nodig. Een server die voor je medewerkers opzoekt is recursief en hoort van buitenaf niet bereikbaar te zijn. Ze op een publiek adres combineren is meestal hoe dit per ongeluk gebeurt.
- Zet response rate limiting aan op alles wat wel aan het internet hangt.
Het algemene principe is het meenemen waard voorbij DNS: weet voordat je een DNS-server blootstelt of hij autoritatief bedoeld is, recursief, of allebei, want de juiste instelling verschilt per geval en de verkeerde afloop is dat iemand anders jouw bandbreedte gebruikt om een vreemde aan te vallen.
Naar boven8. Iets wat de meeste gebruikers niet weten
8.1 De 13 rootservers zijn geen 13 machines
Iedereen leert dat DNS dertien rootservers heeft, a tot en met m. Dat klopt, en het leidt tot twee verkeerde conclusies: dat dertien computers het internet overeind houden, en dat ze vooral in de Verenigde Staten staan. Allebei zijn ze decennia achterhaald, en je kunt ze vanaf je eigen terminal weerleggen.
Elke rootserver beantwoordt een speciale vraag die onthult welke fysieke instantie je werkelijk bereikt hebt. Vraag het alle dertien:
$ for L in a b c d e f g h i j k l m; do
printf '%-22s ' "$L.root-servers.net"
dig @$L.root-servers.net hostname.bind CH TXT +short
done
Gedraaid vanaf een machine in Nederland levert dat op:
| Server | Bereikte instantie | Waar | Tijd |
|---|---|---|---|
a.root-servers.net |
nnn1-ams5 |
Amsterdam | 5 ms |
b.root-servers.net |
b3-fra |
Frankfurt | 14 ms |
c.root-servers.net |
fra1a.c.root-servers.org |
Frankfurt | 11 ms |
d.root-servers.net |
amnl3.droot.maxgigapop.net |
Amsterdam | 4 ms |
e.root-servers.net |
p01.ams.eroot |
Amsterdam | 4 ms |
f.root-servers.net |
AMS.cf.f.root-servers.org |
Amsterdam | 5 ms |
i.root-servers.net |
s1.zrh |
Zurich | 16 ms |
k.root-servers.net |
ns1.ro-buh.k.ripe.net |
Boekarest | 35 ms |
m.root-servers.net |
M-CDG-4 |
Parijs | 11 ms |
Niet een ervan staat in de Verenigde Staten. Elke rootserver-identiteit antwoordde vanaf een Europese instantie, de meeste binnen 15 milliseconden. De dertien namen zijn geen dertien machines; het zijn dertien adressen, en elk adres wordt vanaf veel locaties tegelijk aangekondigd met anycast. Het netwerk stuurt je naar de dichtstbijzijnde kopie zonder dat jij of je resolver het merkt.
Op het moment van schrijven bestaat het rootserversysteem uit ongeveer tweeduizend instanties, beheerd door twaalf organisaties. Het getal dertien is een grens uit 1987 op hoeveel naamservers er in een enkel UDP-pakket passen, geen aantal computers.
8.2 Anycast is ook het antwoord voor je eigen domein
Dezelfde truc is wat elke competente DNS-provider je verkoopt, en het is de belangrijkste reden om er een te gebruiken in plaats van zelf bind op een VPS te draaien. Je twee NS-records lijken twee servers en zijn in werkelijkheid twee adressen die vanaf tientallen locaties aangekondigd worden, dus een bezoeker in Sydney en een bezoeker in Rotterdam krijgen allebei een antwoord van dichtbij, en een datacenter kwijtraken verandert niets.
Dat dekt hardware- en netwerkstoringen. Het dekt niet dat de provider zelf uitvalt, en dat is een reëel voorval: in oktober 2016 maakte een zeer grote aanval op een DNS-provider een lange lijst bekende sites onbereikbaar, niet omdat die sites plat lagen, maar omdat niemand ze kon opzoeken.
De verdediging is secundaire DNS: dezelfde zone bediend door twee onafhankelijke providers, gepubliceerd als twee sets NS-records, zodat resolvers eenvoudigweg gebruiken wie er antwoordt. Het is niet exotisch, maar het is meer werk dan de meeste domeinen nodig hebben. Een redelijke vuistregel:
- Een goede anycast-provider is voor bijna elke site het juiste. De storing waar je werkelijk rekening mee moet houden is je eigen fout, niet de uitval van je provider.
- Twee providers als het domein doorlopend geld verdient, of als een uur onbereikbaar zijn een serieus voorval is. Reken op de complexiteit: twee plekken om elk record te wijzigen, en DNSSEC over twee providers heen is echt lastig.
8.3 Je bezit je domein niet
Je huurt het, in vaste termijnen, en die huur is het faalpunt waar de meeste mensen nooit aan denken. Al het andere in dit artikel gaat ervan uit dat de delegatie nog bestaat.
Wat er werkelijk misgaat is weinig spannend: de kaart op het account verloopt, de verlengingsmelding gaat naar een collega die vertrokken is, het domein staat op een persoonlijk account van een zzp'er van drie bureaus geleden. Het herstel, zodra een domein verlopen en opgepikt is, loopt van duur tot onmogelijk.
Drie gewoonten halen het meeste van dat risico weg:
- Registrar lock aan, zodat een verhuizing niet stilletjes in gang gezet kan worden.
- Automatisch verlengen aan, met een betaalmethode die individuele medewerkers overleeft, en het e-mailadres van de houder op een rolafhankelijk adres in plaats van een persoon.
- Bewaking van de verloopdatum die niet de eigen e-mail van de registrar is. Klopt het account niet, dan gaan de herinneringen naar de verkeerde plek, en dat is nu juist het geval dat je wilt opvangen.
8.4 DNS deed load balancing voor er load balancers waren
Publiceer meerdere A-records voor een naam en clients verdelen zichzelf erover. Dit heet round robin, het is ouder dan elk load balancer-product op de markt, en het kost niets:
example.com. 300 IN A 203.0.113.10
example.com. 300 IN A 203.0.113.11
Het is ook op een specifieke manier zwak die het kennen waard is: DNS heeft geen idee of een server leeft. Haal een van die machines offline en DNS blijft het adres uitdelen aan een deel van je bezoekers tot jij de zone aanpast, en blijft dat daarna nog doen zolang de TTL loopt. Het verdeelt last; het regelt geen uitwijk.
Uitwijk vereist iets dat controleert. Dat is ofwel een DNS-provider met records die op gezondheid gecontroleerd worden, die de zone voor je aanpast als een doel niet meer antwoordt, ofwel een echte load balancer met een adres in DNS en de gezondheidscontrole erachter. Het tweede is bijna altijd het betere antwoord, omdat het in seconden reageert in plaats van in TTL's.
8.5 Weten waar DNS ophoudt
Een deel van vakmanschap is weten bij welke laag een probleem hoort. DNS beantwoordt precies een vraag: waar verwijst deze naam naar? Alles wat een bezoeker daarna ervaart hoort bij iets anders.
| Symptoom | Is het DNS? | Waar te kijken |
|---|---|---|
| Site onbereikbaar voor sommigen, prima voor anderen | Vaak wel | Caching of een delegatie die niet overeenkomt |
| Site laadt maar toont de oude server | Ja | Een gecachet record; de TTL uitzitten |
| Certificaatwaarschuwing in de browser | Nee | Het certificaat van de webserver, tenzij CAA de uitgifte blokkeerde |
| Site laadt traag | Vrijwel nooit | De applicatie, de database, het netwerkpad |
| Mail geweigerd als spam | Deels | SPF, DKIM, DMARC en PTR staan in DNS; reputatie niet |
| Ineens overal "server niet gevonden" | Ja | Verlopen domein, kapotte DNSSEC, of een delegatie die nergens meer heen wijst |
De vierde rij is degene die het eigen maken waard is. DNS wordt een keer geraadpleegd en daarna gecachet; het is vrijwel nooit de reden dat een werkende site traag aanvoelt. Duurt een pagina vier seconden, dan werd de naam in de eerste paar milliseconden opgezocht en was alles daarna andermans probleem.
Naar boven9. Best practices
- Ken je drie leveranciers voordat je ze nodig hebt. Schrijf op wie de registrar, de DNS-host en de webhost zijn, en wie voor elk de inloggegevens heeft. Midden in een storing is het verkeerde moment om te ontdekken dat het domein op het persoonlijke account van een oud-collega staat.
- Bescherm eerst de registratie. Registrar lock aan, automatisch verlengen aan, een betaalmethode die medewerkers overleeft, en een rolafhankelijk adres als contact van de houder. Al het andere in DNS gaat ervan uit dat het domein nog bestaat.
- Bewaak de verloopdatum ergens anders dan via de e-mail van de registrar. Kloppen de accountgegevens niet, dan gaan die herinneringen ook naar de verkeerde plek.
- Stel TTL's bewust in, en verlaag ze een dag voor een geplande verhuizing. 300 voor adressen, een dag voor
NS, een uur voor mail- en tekstrecords. - Houd de apex op een uitgevlakte
ALIASof een gewoonA-record, nooit eenCNAME, en kies ofwwwof het kale domein als canoniek in plaats van ze als gelijken te bedienen. - Zet de subdomeinen neer die je hebt in plaats van naar een wildcard te grijpen. Een wildcard antwoordt voor namen die je nooit aangemaakt hebt, inclusief de namen die iemand anders verzint.
- Rol mailauthenticatie in volgorde uit. Eerst SPF en DKIM, dan DMARC op
p=none, lees de rapportages een paar weken, en scherp pas daarna aan. Meteen naarp=rejectgaan vernietigt stilletjes de mail die je vergeten was. - Publiceer een
CAA-record met de autoriteit die je werkelijk gebruikt. Het is twee minuten werk en het beperkt wat een ten onrechte uitgegeven certificaat kan doen. - Zet DNSSEC aan als je provider de hele levenscyclus beheert, inclusief het wisselen van sleutels en het
DS-record naar de registrar duwen. Zou het een handmatige klus zijn die je een keer doet en nooit meer bekijkt, denk er dan langer over na. - Kies liever een goede anycast-provider dan twee middelmatige. Voeg secundaire DNS toe wanneer een uur onbereikbaar zijn echt duur is, niet omdat het professioneler klinkt.
- Gebruik round robin niet als uitwijk. DNS weet niet of een server leeft. Gebruik records met gezondheidscontrole of een load balancer.
- Ruim de zone een keer per jaar op. Verwijder de verificatie-
TXT-records van diensten die je niet meer gebruikt en deA-records van servers die niet meer bestaan. Oude records zijn hoe subdomain takeovers beginnen. - Pas
/etc/resolv.confniet aan. Op de meeste systemen is het een gegenereerde symlink. Wijzig de instelling waar hij gemaakt wordt, en gebruikresolvectl statusom te zien wat je machine werkelijk gebruikt. - Test container-DNS binnen de container. Een container antwoordt vanaf een andere resolver dan de host, en containernamen worden alleen op een zelfgemaakt netwerk opgezocht, niet op de standaard bridge.
- Stel nooit een recursieve resolver aan het internet bloot. Beperk recursie tot je eigen netwerken, en houd autoritatieve en recursieve rollen op aparte servers. Een open resolver wordt het aanvalsgereedschap van iemand anders.
- Controleer wijzigingen van buiten je eigen netwerk. Je resolver, je router en je browser cachen alle drie, en alle drie kunnen je iets laten zien wat de rest van de wereld niet ziet.
10. Veelgemaakte fouten
10.1 Misverstand tegenover werkelijkheid
| Misverstand | Werkelijkheid |
|---|---|
| "DNS-propagatie duurt 24 tot 48 uur." | Er propageert niets. Elke cache houdt zijn kopie tot de TTL die jij gepubliceerd hebt afloopt. Een TTL van 300 seconden betekent vijf minuten. |
| "Mijn hostingbedrijf beheert mijn DNS." | Vaak niet. De registrar, de DNS-host en de webhost zijn regelmatig drie verschillende bedrijven. |
| "Ik heb de naamservers bij mijn DNS-provider gewijzigd." | Naamservers wijzig je bij de registrar. De wereld volgt de delegatie in de bovenliggende zone, niet de records in die van jou. |
| "Er zijn 13 rootservers." | Er zijn 13 adressen, met anycast aangekondigd vanaf ongeveer tweeduizend instanties die door twaalf organisaties beheerd worden. |
"Twee A-records geven me uitwijk." |
Ze geven je lastverdeling. DNS controleert nooit of een server leeft, dus de helft van je bezoekers blijft bij de dode uitkomen. |
| "Ik bezit mijn domein." | Je huurt het. Mis een verlenging en de delegatie verdwijnt, samen met je mail. |
| "DNSSEC maakt mijn site veiliger." | Het bewijst dat antwoorden echt zijn. Het doet niets voor de webserver, de applicatie of het certificaat, en een kapotte handtekening haalt het domein van het internet. |
| "De site is traag, het zal DNS wel zijn." | DNS wordt een keer geraadpleegd en daarna gecachet. Een trage pagina is vrijwel altijd de applicatie of het netwerkpad. |
| "Een wildcard-record is een handige vangnetregel." | Het antwoordt voor elke typefout en elke naam die een aanvaller verzint, en het verbergt dat een subdomein nooit ingesteld is. |
10.2 Andere valkuilen om te vermijden
- Records aanpassen bij de oude provider na een verhuizing. Zodra de
NS-records ergens anders heen wijzen, wordt de oude zone genegeerd. Mensen zijn uren bezig met records die niets meer leest. - Naamservers en records op dezelfde dag wijzigen. Verhuis eerst de zone, controleer dat beide providers identiek antwoorden, en verleg pas daarna de delegatie. Anders heeft een mislukte omschakeling geen schone toestand om naar terug te keren.
- De twee
NS-lijsten uit elkaar laten lopen. De lijst van de registrar en de lijst in je zone horen overeen te komen. Resolvers volgen die van de registrar, dus een verschil is onzichtbaar op de plek waar jij kijkt. - Met DNSSEC ondertekenen en het
DS-record nooit publiceren. Alles blijft werken en je hebt niets gewonnen, en daarom kan deze halfafgemaakte toestand jaren blijven bestaan. - Op dag een
p=rejectin DMARC zetten. Begin opp=noneen lees de rapportages, of kom erachter welke systemen namens jou verzenden door hun mail te zien verdwijnen. - Een
A-record laten staan dat naar een vrijgegeven server wijst. Zodra iemand anders dat adres toegewezen krijgt, serveert jouw subdomein hun inhoud. - Aannemen dat de TTL die je instelt de TTL is die geldt. Een resolver heeft de vorige waarde meegekregen en houdt die de volle termijn aan. Je nieuwe korte TTL geldt pas nadat de oude afgelopen is.
- Je eigen browser geloven. DNS-caches in de browser, caches van het besturingssysteem en DoH-instellingen zitten allemaal tussen jou en de werkelijkheid. Controleer vanaf een ander netwerk voordat je iets concludeert.
- Het domein op een persoonlijk account registreren. Zzp'ers gaan verder, bureaus worden vervangen, en het domein overleeft allebei. Het hoort op een account dat de organisatie beheert.
11. Samenvatting
DNS ziet eruit als een opzoektabel en gedraagt zich als een organogram. Vrijwel alles wat mensen eraan verwart komt uit dat gat.
- DNS is een gedistribueerde database met gedelegeerd gezag. De root delegeert aan registers, registers delegeren aan jouw naamservers, en elk niveau weet alleen wie het vervolgens moet vragen.
- Er zijn vier soorten software bij betrokken en ze zijn niet uitwisselbaar: de stub-resolver op je machine, de recursieve resolver die het uitzoekwerk doet en cachet, de autoritatieve server die de waarheid bevat, en het register dat de delegatie publiceert.
- Een domein is drie afspraken met drie bedrijven: de registrar waar je het huurt, de DNS-host die vragen beantwoordt, en de webhost die de site draait. Weten waar je moet inloggen is het grootste deel van het werk.
- Naamservers wijzig je bij de registrar. Records wijzig je bij de DNS-host. Die twee door elkaar halen kost een dag.
- DNS verving in 1983 een enkel
HOSTS.TXT-bestand, en de specificatie waar alles nog steeds op draait is RFC 1034 en RFC 1035 uit 1987. Elke toevoeging sindsdien ging over bewijzen dat antwoorden echt zijn of over vragen privé houden. - De apex kan geen
CNAMEdragen. GebruikALIASof flattening als je provider het aanbiedt, of een gewoonA-record als dat niet zo is. - Kies
wwwof het kale domein als canoniek en verwijs de ander door. Ze als gelijken bedienen levert werk op in elke laag boven DNS. - Wildcards antwoorden voor namen die je nooit aangemaakt hebt. Zet neer wat je hebt.
- Mailauthenticatie is een systeem:
MXom te ontvangen, SPF voor toegestane servers, DKIM voor ondertekende berichten, DMARC voor de beslissing, enPTRbij je hostingprovider. Rol ze in die volgorde uit en begin DMARC opp=none. - DNS is ook waar het internet eigendomsbewijzen bewaart: ACME-
DNS-01-challenges, verificatierecords van diensten, enCAAom te benoemen welke autoriteiten voor je mogen uitgeven. - DNSSEC bewijst dat antwoorden echt zijn en faalt hard als het stukgaat. Zet het aan als je provider de hele levenscyclus beheert, inclusief het
DS-record bij de registrar. - De 13 rootservers zijn 13 adressen, geen 13 machines: ongeveer tweeduizend anycast-instanties, twaalf beheerders. Anycast is ook wat een goede DNS-provider je verkoopt.
- Round robin verdeelt last maar is geen uitwijk, want DNS controleert nooit of een server leeft.
- Je huurt je domein. Registrar lock, automatisch verlengen, een rolafhankelijk e-mailadres, en bewaking van de verloopdatum die niet van de herinneringen van de registrar afhangt.
- Op een Linux-machine wordt
/etc/resolv.confgegenereerd en bepaalt/etc/nsswitch.confde echte volgorde:filesvoordns, dusgetenten een DNS-gereedschap kunnen het eerlijk oneens zijn. - Containers zoeken op via hun eigen server. Op een zelfgemaakt Docker-netwerk is dat
127.0.0.11en werken containernamen; op de standaard bridge niet. - Een recursieve resolver die open staat naar het internet wordt misbruikt voor amplificatie. Beperk recursie, en houd autoritatieve en recursieve rollen gescheiden.
- Voor records lezen, een delegatie natrekken, een cache met de bron vergelijken en TTL-waarden kiezen behandelt het bijbehorende artikel over het dig-commando het gereedschap.
Dit is de checklist die het bewaren waard is als je een domein overneemt dat je niet zelf opgezet hebt:
WHO HOLDS IT
registrar who it is renewed with, and who has that login
DNS host which name servers the registrar publishes
web host who owns the IP the A record points at
IS IT SAFE
registrar lock on
auto-renew on, with a payment method nobody personally owns
registrant email a role address, not an individual
expiry alert somewhere other than the registrar's own email
IS IT SANE
apex A or ALIAS, never CNAME
www canonical one way, redirected the other
wildcards none, unless you genuinely serve unlimited names
stale records A records for dead servers, TXT for dead services
ON THIS MACHINE
resolvectl status which upstream servers are really in use
/etc/nsswitch.conf the order: files, mdns, dns
getent hosts NAME what an application sees, not what DNS says
IS IT TRUSTED
SPF, DKIM published and passing
DMARC at least p=none, with reports going somewhere read
CAA names the authority you actually use
DNSSEC signed AND the DS record published at the registrar
Een domein dat overal hetzelfde wordt opgezocht, zijn mail bezorgt, zijn certificaten vernieuwt en zijn eigen verlengingsdatum overleeft is geen geluk: het is een handvol beslissingen die bewust genomen en opgeschreven zijn. De meeste kosten op dat moment niets en zijn duur om achteraf alsnog te doen.
Heb je een domein geerfd dat niemand gedocumenteerd heeft, of verhuis je er een tussen providers en wil je de delegatie, de zone en de mailrecords laten controleren voor de omschakeling in plaats van tijdens, dan is dat een uur aandacht van iemand waard voordat het een storing wordt.
Naar boven

Peter is Joomla specialist en Linux admin voor snelle, veilige en schaalbare websites.












