I den här andra delen av serien om grunderna i nätverk ska vi utforska DNS-systemet. Vi kan lära oss mycket om internet och nätverk genom att slå upp information i DNS-servrarna. En DNS innehåller mer information än bara IP-adressen till en domän.

Switchar Foto: Thomas Jensen

Vi kommer att använda programmet nslookup i den här artikeln. Programmet finns i både Linux, macOS och Windows. Det startas genom att skriva nslookup i en terminal. När programmet är startat möts vi av en prompt i form av ett ensamt “större än”-tecken. Under Windows visas även vilken DNS-server som används vid start av programmet, men i övrigt fungerar programmet på samma sätt under alla operativsystem.

$> nslookup
> 

Nu kan vi börja slå upp saker. Vi kan testa att ta reda på IPv4-adressen till domännamnet jackbenny.se. På DNS-språk benämns IPv4-adresser som A-post, eller A-record på engelska. Vi börjar därför med att sätta typen till detta:

> set type=a
> jackbenny.se
Server:         192.168.0.1
Address:        192.168.0.1#53

Non-authoritative answer:
Name:   jackbenny.se
Address: 178.128.198.95

Den serveradress som visas överst (192.168.0.1 i mitt fall) är DNS-servern som uppslaget görs i. Adressen 192.168.0.1#53 betyder att IP-adressen är 192.168.0.1 och portnumret är 53. Port 53 är alltid till för DNS-servrar.

Därefter fick vi ett så kallat non-authoritative answer som visar IP-adressen för domänen, i det här fallet 178.128.198.95. Ett non-authoritative answer innebär att svaret kom från en server som inte kontrolleras av domänens ägare (svaret fick vi ju från vår lokala DNS-server). Det är så här vi alltid gör uppslag. Direkta uppslag mot den så kallade auktoritativa servern görs nästan bara från andra DNS-servrar. Men vi kan faktiskt testa att göra ett uppslag direkt mot en sådan auktoritativ server. För det behöver vi först ta reda på vilka dessa servrar är. Det gör vi med typen NS, som står för Name Server.

> set type=ns
> jackbenny.se
Server:         192.168.0.1
Address:        192.168.0.1#53

Non-authoritative answer:
jackbenny.se    nameserver = ns1.cyberinfo.se.
jackbenny.se    nameserver = ns3.cyberinfo.se.
jackbenny.se    nameserver = ns2.cyberinfo.se.

Här vi fick en lista på tre stycken auktoritativa servrar. Det är dessa som andra DNS-servrar hämtar sin information från om domänen jackbenny.se. Förfrågningar från andra DNS-servrar kan däremot vara cachade, därför sker inte alltid förfrågningar till dessa servrar från andra DNS:er.

Anledningen till att man har flera DNS-servrar är för att DNS-systemet är så viktigt. Skulle vi bara ha en enda DNS-server skulle vi bli ganska sårbara. Skulle den gå ner kan inte andra DNS-servrar och datorer hitta rätt IP-adress, och hemsidan, mejlen och allting annat skulle förbli onåbart. Därför har man som tumregel att alltid ha minst tre DNS-servrar, och helst på olika geografiska platser och på olika nätverk.

Nu när vi har en lista på domänens DNS-servrar kan vi välja en av dem och använda den för att göra uppslag. Jag väljer här den första:

ANNONS FÖR VÅRA EGNA BÖCKER Demonerna på internet

> server ns1.cyberinfo.se
Default server: ns1.cyberinfo.se
Address: 95.217.156.151#53
Default server: ns1.cyberinfo.se
Address: 2a01:4f9:c011:690f::1#53

När vi bytte server ser vi också adresserna till den. I det här fallet har DNS-servern både en IPv4- och en IPv6-adress. IPv6-adresser benämns AAAA på DNS-språk. Nu när vi bytt server kan vi göra ett nytt uppslag av jackbenny.se:

> set type=a
> jackbenny.se
Server:         ns1.cyberinfo.se
Address:        95.217.156.151#53

Name:   jackbenny.se
Address: 178.128.198.95

Nu försvann texten om non-authoritative answer eftersom vi har frågat en av domänens egna DNS-servrar, eller zonens DNS-servrar som det heter på DNS-språk. Man delar in DNS-systemet i zoner. Exempelvis är toppdomänen .se en zon, domänen jackbenny.se en annan zon som är placerad under .se.

Eftersom denna DNS-servern endast har information om zonen jackbenny.se kan vi inte slå upp andra domäner i den:

 > cyberinfo.se
Server:         ns1.cyberinfo.se
Address:        95.217.156.151#53

** server can't find cyberinfo.se: REFUSED

Däremot kan vi ställa frågor till öppna, publika DNS-servrar. Exempelvis är Googles DNS-server på IP-adressen 8.8.8.8 en sådan:

> server 8.8.8.8
Default server: 8.8.8.8
Address: 8.8.8.8#53

> cyberinfo.se
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
Name:   cyberinfo.se
Address: 13.33.141.49
Name:   cyberinfo.se
Address: 13.33.141.63
Name:   cyberinfo.se
Address: 13.33.141.89
Name:   cyberinfo.se
Address: 13.33.141.21

Här ser vi att domänen cyberinfo.se har flera A-poster. Vilken av IP-adresserna som inkommande trafik kommer att skickas till – exempelvis när någon surfar in på webbsidan – kommer att väljas slumpmässigt. Det kan vi verifiera om vi skickar frågan igen:

> cyberinfo.se
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
Name:   cyberinfo.se
Address: 13.33.141.21
Name:   cyberinfo.se
Address: 13.33.141.89
Name:   cyberinfo.se
Address: 13.33.141.49
Name:   cyberinfo.se
Address: 13.33.141.63

Ordningen på IP-adresserna är nu en annan. Gör vi en ny förfrågan kommer ordningen än en gång vara annorlunda. DNS-servrarna roterar alltså IP-adresserna om det finns fler än en till samma domän.

Andra typer av poster

Men en DNS innehåller mer information än bara IP-adressen till en domän och eventuella underdomäner. Här finns också information om vilken eller vilka servrar som ansvarar för domänens e-post. Detta benämns som MX-poster (förkortning av Mail eXchange):

> set type=mx
> jackbenny.se
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
jackbenny.se    mail exchanger = 1 mail.tutanota.de.

Här ser vi att jackbenny.se bara har en enda e-postserver. Vi kan fortsätta vårt utforskande med att slå upp IP-adressen för e-postservern.

> set type=a
> mail.tutanota.de
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
Name:   mail.tutanota.de
Address: 185.205.69.211
Name:   mail.tutanota.de
Address: 81.3.6.165
Name:   mail.tutanota.de
Address: 81.3.6.162 

Här ser vi att e-postservern finns på tre IP-adresser, vilket förhoppningsvis är tre fysiska servrar. Vanligtvis har man istället flera MX-poster där varje post pekar på en e-postserver:

> set type=mx
> getdevnull.com
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
getdevnull.com  mail exchanger = 10 mx.zoho.com.
getdevnull.com  mail exchanger = 20 mx2.zoho.com.

Här har vi istället två e-postservrar listade. För MX-poster har man dessutom ett extra fält som visar prioriteten för servern. Servern mx.zoho.com har här prioritet 10 och mx2.zoho.com har prioritet 20. Det lägsta numret är den som har högst prioritet.

En annan vanlig DNS-post när det kommer till e-post är TXT-poster. Detta är rena textfält och används oftast till olika typer av verifieringar samt till något som heter SPF (Sender Policy Framework). Det är ett sätt att minimera spam och missbruk av e-postadresser. Mottagaren kontrollerar SPF för en lista över vilka servrar som tillåts skicka e-post för en viss domän. Det är dock upp till mottagaren att välja vad som ska hända med ett mejl som inte matchar, så tekniken är inte helt säker.

> set type=txt
> jackbenny.se

Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
jackbenny.se    text = "v=spf1 include:spf.tutanota.de -all"
jackbenny.se    text =  "google-site-verification=K58Hv-IFVQI7BO3Wi6aNPYeHTDZ5Oa90d4R7Vn9D1Kc"
jackbenny.se    text = "t-verify=10ebcf973ee66678ff0d857889bf826d"

CNAME (förkortning av canonical name) är en annan vanlig post. Det är ett alias som pekar på en A- eller AAAA-post. Exempelvis är det vanligt att man pekar en domän på en A-post, men låter www-underdomänen vara ett CNAME som pekar på domänen. På så sätt pekar både domänen och www-delen på samma IP-adress, även om man i framtiden skulle ändra IP-adressen för domänen.

> set type=cname
> www.jackbenny.se
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
www.jackbenny.se        canonical name = jackbenny.se.

Zoner

Jag nämnde som hastigast ordet zoner. DNS-systemet är indelat i zoner där varje DNS-server ansvarar för sina zoner. En och samma DNS-server kan däremot ansvara för flera zoner. Likaså har man oftast flera DNS-servrar i varje zon. Överst i hierarkin finns rot-zonen som benämns med en ensam punkt. Titta extra noga på svaret vi fick när vi testade CNAME-posten. Domännamnet som www.jackbenny.se pekar på, alltså jackbenny.se., avslutas med en punkt. Detta är för att markera toppen av hierarkin.

. (rot)
└── .se (toppdomän)
    └── jackbenny.se (domänen)