Als je over het internet aan het surfen bent denk je er misschien niet over na, maar onder de motorkap genereer je heel veel verkeer. Niet alleen de webpagina’s die je binnen haalt maar ook heel veel DNS-verkeer. Alle http-adressen en hostnamen moeten namelijk vertaald worden naar een IP-adres. Als dit vertalen heel langzaam gaat merk je dit meteen. Maar hoe weet je hoe snel, of langzaam, het bij jou gaat.

Auteur: Arjan ten Hoopen

Laten we eerst eens kijken hoe een webadres of hostnaam vertaald wordt naar een IP-adres. Je stuurt je browser naar het webadres www.linuxmag.nl. In /etc/nsswitch.conf staat hoe een hostnaam (een webadres is in principe een host met een naam) achterhaald kan worden. Het is de hosts entry die deze informatie geeft. Vaak is deze entry gedefinieerd als ‘files dns’. Hier staat eigenlijk; doorzoek /etc/hosts en als je het daar niet kunt vinden, ga dan via DNS achterhalen wat het IP-adres is. We kunnen wel aannemen dat er in jouw /etc/hosts niets staat vermeld over het webadres van je favoriete magazine. Dus wordt er doorgeschakeld naar DNS. Maar wie is mijn DNS-server(s)? In /etc/resolv.conf staat achter de key nameserver het IP-adres van de te gebruiken nameserver (merk op dat je meerdere nameservers kunt hebben). De eerste nameserver die vermeld staat wordt bevraagd. Stel nu dat die nameserver tot de conclusie komt dat zij het niet weet. Dat klinkt als een probleem, maar dat is het niet. Een nameserver heeft namelijk forwarders. Dit zijn andere nameservers die een nameserver kunnen helpen om een IP-adres te achterhalen. Dit gaat zo door tot aan de root-nameservers. De root-nameservers hebben geen forwarders. Als de root-nameservers het ook niet weten, is het een niet bestaand adres en hoort er geen IP-adres bij.

TTL

Alle nameservers cachen voor een bepaalde tijd (TTL: Time To Live) de hostnaam met het bijbehorende IP-adres (als je een goed geconfigureerde nameserver gebruikt cached deze ook de hostnamen die geen IP-adres hebben).

Je zult je nu misschien nog afvragen waarom je meerdere nameservers (in /etc/resolv.conf) wilt hebben. Als er geen contact gemaakt kan worden met de eerstgenoemde nameserver (primaire), dan wordt er contact gezocht met de tweede nameserver (secundaire). Op deze manier wordt (bijna) gegarandeerd dat je altijd contact kunt maken met een nameserver.

Je voelt nu mogelijk al wel aan dat het meest gunstige voor je omgeving een nameserver is die heel dichtbij staat en door heel veel systemen gebruikt wordt (en dus een zeer goed gevulde cache heeft). Maar de vraag is natuurlijk, hoe ver zit je systeem van dit ideaal plaatje af?

Dat gaan we achterhalen met DNSDiag. Mogelijk zit deze in een repository, maar je kunt het ook heel simpel downloaden vanaf GitHub (Zie Links).

Download

Plaats de ge-g-zipte tar file op je disk en pak haar uit. Je krijgt dan 3 binaries en 3 tekstbestanden. De tekstbestanden bevatten de adressen van publieke nameservers.

Voordat je verder gaat, is het verstandig om te kijken welke nameserver je gebruikt. Mocht je een nameserver gebruiken van Google (8.8.8.8 of 8.8.4.4) dan zit je mogelijk ver van het ideale plaatje af. De Google nameservers worden door velen gebruikt en hebben dus een goed gevulde cache, maar ze staan wel erg ver weg.  Kijk bij de Links naar DNS info van Nederlandse providers. Mogelijk gaan die straks een betere performance geven.

Nog even de grijze massa masseren. Op het moment dat je je systeem een IP-adres laat achterhalen, zal het ook in de cache opgenomen worden van je nameserver. Moet daarna het zelfde IP-adres achterhaald worden, dan gaat dat mogelijk veel sneller want het staat zeker al in de cache van de nameserver die jij gebruikt.

We gaan eerst maar eens wat spelen met de tools om er gevoel voor te krijgen. Vervolgens kun je een echte test gaan plannen en uitvoeren

Dnsping naar Google output

 

DNSPING

De tool dnsping is eigenlijk een broertje van ping(1). Echter dnsping is gemaakt om dns servers (nameservers) te pingen. Voer eens uit dnsping www.linuxmag.nl (Listing 1). Dat geeft output die heel veel lijkt op de uitvoer van ping(1).  De eerste regel output vertelt je welke DNS server bevraagd wordt met de benaderde poort (53 is de standaard poort voor DNS servers), vervolgens de hostnaam die opgevraagd wordt en welk type adres het is.

Met een beetje geluk is de eerste bevraging een beetje traag (en dat is zij als www.linuxmag.nl nog niet in de cache van de nameserver staat), en alle volgende bevragingen gaan als de brandweer (het staat nu in de cache van de nameserver).

Hetzelfde experiment nog een keer, maar nu gaan we het aan de nameserver van Google vragen: dnsping -s 8.8.8.8 www.linuxmag.nl (Listing 2). Dit is een veel gebruikte DNS-server en heeft dus een grote cache. We kunnen de verwachting uitspreken dat www.linuxmag.nl al in de cache staat. Echter, de server zelf staat wel ver weg. Je mag dus verwachten dat het traag gaat. Niet alleen voor adressen die niet in de cache staan, maar ook voor adressen die wel in de cache staan. Probeer ook eens wat DNS-servers van Nederlandse providers.

Dnsping output

 

DNSTRACEROUTE

Nu weten we wel hoe lang het duurt, maar we weten nog niet hoe we bij de name server komen. Hier gaat dnstraceroute ons helpen. Laten we de vorige nameservers eens onder de loep nemen. Eerst maar weer via je de ingestelde nameserver, je moet dit wel als root uitvoeren dus sudo dnstraceroute www.linuxmag.nl (Listing 3). Mocht je een foutmelding krijgen negeer deze dan, er staan namelijk harde paden in de binary. Vervolgens via de Google nameserver sudo dnstraceroute -s 8.8.8.8 www.linuxmag.nl (Listing 4). Als het goed is vind je een significant verschil. Met een beetje geluk ben je (bijna) direct bij je nameserver. Als je naar Google gaat heb je een behoorlijk pad af te leggen. Dit verklaart ook waarom de Google nameserver traag is, ze staat gewoon te ver weg.

Vergelijk de output van dnstraceroute eens met de output van de ‘gewone’ traceroute. Als het goed is moet dit ongeveer, zo niet precies, hetzelfde zijn qua tussenliggende systemen. Is het niet hetzelfde dan word je DNS-verkeer binnendoor of omgeleid.

Dnseval huidige Nameservers

 

DNSEVAL

We weten nu hoe snel het gaat en hoe we er komen. We zouden een methode willen hebben waarbij we diverse nameservers met elkaar kunnen vergelijken. Dit zouden we kunnen doen door een aantal keren een query uit toe voeren op verschillende nameservers.

Meegeleverd zijn een drietal tekst bestanden met publieke nameservers. Maar je zou natuurlijk ook een eigen lijst met nameservers kunnen maken met de nameserver die je nu gebruikt en een aantal nameservers van nederlandse providers. Je roept het als volgt aan: dnseval -c 10 www.linuxmag.nl (Listing 5), er wordt nu 10 maal aan je ingestelde nameservers het IP-adres van www.linuxmag.nl gevraagd. Maar je kunt ook de meegeleverde lijst van publieke nameservers gebruiken: dnseval -f public-v4.txt -c 10 www.linuxmag.nl  (Listing 6). Er wordt nu voor elke nameserver die opgenomen is in het bestand public-v4.txt 10 maal bevraagd voor het IP adres van www.linuxmag.nl

Je hebt nu voldoende kennis om met deze tools je meest ideale nameserver te bepalen.

Dnseval lijst