Versleutel je dns-verkeer met dns over tls

© PXimport

Versleutel je dns-verkeer met dns over tls

Geplaatst: 20 december 2019 - 08:45

Aangepast: 24 november 2022 - 13:46

Koen Vervloesem

Dns is een internetprotocol dat dagelijks in gebruik is, maar slechts zelden versleuteld wordt. Daardoor kan iemand die je netwerk afluistert eenvoudig zien welke websites je bezoekt. Gelukkig bestaan er ook mogelijkheden om je dns-verkeer te versleutelen en 'dns over tls' is daar het bekendste voorbeeld van.

Dns (‘domain name system’) wordt wel eens omschreven als ‘het telefoonboek van internet’: net zoals je in een telefoonboek kunt opzoeken welk telefoonnummer bij een naam hoort, zorgt dns dat je kunt opzoeken welk ip-adres bij een domeinnaam hoort. Maar anders dan het expliciete opzoeken in een telefoonboek, worden de dns-zoekopdrachten continu op de achtergrond door je besturingssysteem uitgevoerd terwijl je surft, e-mails verstuurt of aan het gamen bent.

Door die automatische werking op de achtergrond zijn we er ons doorgaans niet van bewust dat we zo afhankelijk zijn van dns en ook niet dat we via dns ongemerkt heel veel over ons prijsgeven. Immers, elke keer als een programma op je computer of ander apparaat een domeinnaam wil gebruiken, vraagt dat zonder enige versleuteling het daarbij horende ip-adres op aan een dns-server. Dat betekent dus dat al die aanvragen gewoon te zien zijn door iedereen die ergens op een netwerk tussen jou en de dns-server zit: op je thuisnetwerk (of dat open wifi-netwerk in de kroeg), op je kantoor, bij je isp …

Dat kun je ook eenvoudig zien met een packetsniffer zoals Wireshark. Die toont alle pakketjes die je computer in en uit gaan. Als je in Wireshark de displayfilter dns invoert, zie je alle dns-aanvragen van je computer en de antwoorden gewoon in platte tekst voorbijkomen. Iedereen op je netwerk kan dus zien naar welke websites je surft en welke diensten je gebruikt.

Dat je die websites via https bezoekt, maakt niet uit, want dat protocol versleutelt alleen de communicatie met de website, maar voordat die communicatie begint moet je browser eerst het ip-adres van die website opvragen en dat doet het via het onversleutelde dns. Dat is dus een groot privacyprobleem, en een reden temeer om niet zomaar elk netwerk te gebruiken.

Hoe werkt dns?

Dns is een complex protocol met een hiërarchische werking. Helemaal bovenaan staan de 13 dns-rootservers. Als je computer het ip-adres van www.pcmweb.nl opvraagt, gaat die aanvraag eerst naar een rootserver. Die kent het antwoord niet, maar verwijst je door naar de dns-server van het topleveldomein .nl. Je computer vraagt daaraan weer het ip-adres van www.pcmweb.nl, en die dns-server kent het antwoord ook niet, maar verwijst je wel door naar de dns-server van het domein pcmweb.nl.

Media has no description

© PXimport

Je computer vraagt nu daaraan weer het ip-adres van www.pcmweb.nl, en deze dns-server kent het antwoord wel: je krijgt het ip-adres van het domein terug. Daarna kan je computer de verbinding met www.pcmweb.nl opzetten, bijvoorbeeld om de website te bezoeken in je webbrowser. In de praktijk gebeuren al die aanvragen niet elke keer, omdat dns gebruikmaakt van caching.

Aangezien de koppelingen tussen domeinnamen en ip-adressen niet zo vaak veranderen, bewaren de servers en je lokale computer de antwoorden die ze zelf ontvangen hebben een tijdje zodat ze die sneller kunnen doorgeven. Bovendien stelt je computer niet rechtstreeks vragen aan de dns-rootservers, maar gaat het via je router naar een dns-server bij je internetprovider die dns-aanvragen doorstuurt.

Wat is dns over tls?

Het eerste belangrijke initiatief om dns-verkeer te versleutelen, is dns over tls, ook wel eens afgekort als DoT. Het protocol is in 2016 als IETF-standaard aangenomen (RFC 7858) en heeft in 2018 een update gekregen (RFC 8310). De naam zegt al hoe het protocol werkt: in plaats van dns-aanvragen rechtstreeks onversleuteld naar een dns-server te sturen, doe je dat via een verbinding die versleuteld én geauthenticeerd is met tls (Transport Layer Security). Dns over tls is dus voor dns wat https voor http is: het voegt een encryptielaag toe, waardoor niet alleen de communicatie versleuteld is, maar je via het tls-certificaat ook zeker weet dat je communiceert met de juiste server.

Terwijl standaard dns-verkeer over udp- of tcp-poort 53 verloopt, werkt dns over tls via tcp-poort 853. Er zijn twee profielen: strikt of opportunistisch. Bij het strikte profiel initieert de client een tcp-verbinding met de dns-server op poort 853 en zet daarop een tls-verbinding op. De dns-server geeft als onderdeel hiervan zijn certificaat terug en de client verifieert dit certificaat. Als het certificaat niet geldig is, verbreekt de client zijn verbinding en werkt dns niet. Als het certificaat wel geldig is, wordt de tls-verbinding opgezet en biedt het een versleuteld kanaal waarover de client dns-aanvragen kan sturen en de dns-server de antwoorden teruggeeft.

Media has no description

© PXimport

Omdat dns over tls nog redelijk nieuw is en de impact groot is bij problemen, gebruiken veel clients momenteel het opportunistische profiel. Dat werkt ruwweg hetzelfde als het strikte profiel, maar verifieert het certificaat van de dns-server niet en valt terug op communicatie met de dns-server via het klassieke dns-protocol op poort 53 als er bij het opzetten van de verbinding over tls iets misloopt. Het opportunistische profiel is dus een overgangsmaatregel die onvoldoende veiligheid biedt en zelfs een vals gevoel van veiligheid kan veroorzaken.

Een ander nadeel van DoT is dat het op een specifieke poort draait, die eenvoudig geblokkeerd kan worden. Wil je DoT op een publiek wifi-netwerk of in een hotel gebruiken, dan zul je waarschijnlijk merken dat alle verkeer op poort 853 geblokkeerd wordt. En dan zit er toch niets anders op dan onversleuteld dns te gebruiken …

Dns over tls gebruiken

Hoe gebruik je dns over tls? Allereerst dient je computer of mobiel apparaat dit te ondersteunen. In het ideale geval hoef je de ondersteuning niet programma per programma te voorzien, maar draai je op je computer een lokale dns-resolver die dns-aanvragen van je programma’s aanneemt en via dns over tls naar een dns-server doorstuurt. Nog beter is dat je een dns-resolver met DoT-ondersteuning op je router draait, zodat zonder enige verdere configuratie al je apparaten in je thuisnetwerk hun dns-aanvragen daaraan doen, die dan via dns over tls naar internet gaan.

Op een pagina van het DNS Privacy Project vind je een overzicht van de ondersteuning van DoT aan de clientkant. Voor de meeste besturingssystemen is het helaas nog vrij ingewikkeld om te configureren.

Dns over tls op Android

en welkome uitzondering is Android, dat sinds Android versie 9 (Pie) DoT ondersteunt. Standaard gebeurt dat in het opportunistische profiel: Android probeert de dns-server die je netwerk aan je apparaat doorgeeft via DoT over tcp-poort 853 te gebruiken. Lukt dat niet dan wordt teruggevallen op dns over udp-poort 53.

Media has no description

© PXimport

In het menu Settings / Network & internet / Advanced / Private DNS kun je overigens zelf een DoT-server instellen. Vul daar in het veld Private DNS provider hostname de hostname van een dns-server met DoT-ondersteuning in (een ip-adres werkt niet) en klik op Save. Hierna gebruikt je Android-apparaat voor alle dns-aanvragen deze server via DoT over tcp-poort 853, tenzij apps hun eigen dns-aanvragen doen in plaats van de Android-API daarvoor te gebruiken.

Dan heb je uiteraard ook nog een dns-server nodig die DoT ondersteunt. Gelukkig is er heel wat keuze. Het DNS Privacy Project heeft een pagina met publieke servers. Daarop vind je de eigenaar, de ip-adressen, hostname en links naar meer informatie die de eigenaar over zijn server gepubliceerd heeft. Op de lijst vind je onder andere DoT-servers van Google (dns.google, 8.8.8.8, 8.8.4.4), Cloudflare (cloudflare-dns.com, 1.1.1.1, 1.0.0.1) en Quad9 (dns.quad9.net, 9.9.9.9, 9.9.9.10).

Lees verder:Dns over https: Alles wat je wil weten

Deel dit artikel
Voeg toe aan favorieten