DNS - Domain Name System

Martin Skala, xskala4@fi.muni.cz

Obsah

Historie

Vznikl pro usnadnění práce a komunikace v sítí již v době ARPANetu. Lidé si lépe zapamatují název v podobě řetězce, než 32bitovou IPv4 adresu (nebo v dnešní době dokonce 128bitovou IPv6 adresu). Původní koncept DNS spočíval v aktualizaci a distribuci jednoho souboru (v UNIXu: /etc/hosts). Tento způsob distribuce se při masivním rozšiřování uzlů v síti ukázal jako neunosný a težko udržovatelný. Proto vznikl v osmdesátých letech systém Host names on-line (RFC 606, RFC 608, RFC 623), který funguje za pomocí NIC (Network Information Center), kde je seznam jmen provázáný s jejich IP adresami uložen. V roce 1983 tento koncept nahradil systém DNS, za jehož vznikem stojí Paul Mockapetris (RFC 1034, RFC 1035).

Princip

DNS poskytuje možnost překladu doménových jmen na odpovídající IP adresy. Doménové jméno je v podstatě řetězec reprezentující určitou hierarchii. V důsledku udržování hierarchického uspořádání je možné vyhnout se plně centralizovanému řešení (struktura stromu). Každá úroveň stromou zná své bezprostřední potomky a proto je možné směrovat požadavek od kořene (resp. jednoho z kořenových serverů) až po list (konktrétní nameserver pro danou doménu). Princip zpracování požadavků od klienta se může lišit podle typu nameserveru.

Popis služby

Resolver je klientská aplikace zajištující zasílání požadavků a přijetí a zpracování odpovědí od nameserverů. Služba DNS využívá pro komunikaci s resolverem protokol TCP nebo UDP. Nameserver příjímá požadavky zpravidla na portu 53.

Při zpracování požadavků mohou nastat 3 možnosti:

Dělení nameserverů

Hierarchie

Příklad hierarchického uspořádání:

                              "."
                               |
                               |
         +---------------------+------------------+
         |                     |                  |
        MIL                   EDU                ARPA
         |                     |                  |
         |                     |                  |
   +-----+-----+               |     +------+-----+-----+
   |     |     |               |     |      |           |
  BRL  NOSC  DARPA             |  IN-ADDR  SRI-NIC     ACC
                               |
   +--------+------------------+---------------+--------+
   |        |                  |               |        |
  UCI      MIT                 |              UDEL     YALE
            |                 ISI
            |                  |
        +---+---+              |
        |       |              |
       LCS  ACHILLES  +--+-----+-----+--------+
        |             |  |     |     |        |
        XX            A  C   VAXA  VENERA Mockapetris

		

Domény

gTLDs (generické):

ccTLDs (závislé na regionu/zemi):

Přenos zón

AXFR (Asynchronous Full Transfer Zone, součást RFC 1034, 1035)

IXFR (Incremental Zone Transfer, RFC 1995)

Typy záznamů

Glue záznam je pomocný záznam, které slouží při precosu vyhodnocováni požadavku k tomu, aby nedošlo k přerušení během procházení hierarchického stromu. To by mohlo nastat v případě, kdy se například snažíme vyhodnotit dotaz na www.domena-o-uroven-niz.cz a jeden z autoritativních serverů domény .cz nám sdělí, že požadovaná doména je uložená na ns.domena-o-uroven-niz.cz, ale my bychom nevědeli, na které adrese (síťové vrstvy) daný nameserver kontaktovat. Proto se k takové odpovědi připojují informace z glue záznamů, kde jsou uložené informace o autoritativních DNS serverech dané domény a vyhodnocování požadavku tak může pokračovat bez přerušení dál.

RR (Resource Records) - struktura, kterou obdrží resolver od nameserveru. RR je ve formátu [<Domain name>] [<TTL>] Class Type Value, kde jednotlivé položky znamenají:

!! Pozor: je třeba nezapomenout za FQDN doménovým jménem udělat tečku, která reprezentuje kořen stromu, jinak dojde k expanzi názvu. !!
			aisa.fi.muni.cz			1800	IN	A 147.251.48.1
			aisa.fi.muni.cz.		1800	IN	A 147.251.48.1
			

DNS a Linux

Pro Linux lze nalézt nepřeberné množství implementací DNS serverů a utilit pro práci s DNS.

Software

Implementace DNS serverů:


Utility:

Klient (Resolver)

Resolver má informaci, kterému DNS serveru požadavek zaslat, uloženou lokálně. Tuto informaci lze nastavit fixně (ručně) nebo konfugurovat například pomocí DHCP. Konfigurace se provádí z pravidla v /etc/resolv.conf (popř. /etc/nsswitch.conf). Je možné nastavit mapování IP adresy na explicitně uvedená doménová jména (konfigurace v /etc/hosts).

!! Pozor: údaje v /etc/hosts mají vyšší prioritu (je to první místo, kam se resolver dívá), než údaje získaná z DNS !!

Struktura souboru /etc/resolv.conf může vypadat následovně:

$ cat /etc/resolv.conf
search fi.muni.cz # doména, která se prohledává v případě nezdaru překladu (ping aisa => ping aisa.fi.muni.cz.)
nameserver 147.251.206.1 # sks2 komarov
nameserver 147.251.4.33 # sks2 komarov
		
V případě konfigurace resolveru pomocí DHCP je soubor /etc/resolv.conf automaticky zkonfigurován podle odpovídajícího nastavení, které DHCP server propaguje.

Bezpečnost DNS

Jako většina starších protokolů postrádá i základní komunikace s DNS dostatečnou formu zabezpečení. Lze například podvrhnout falešné, pozměněné či neúplné údaje o doménových jménech. Zkontrolovat (alespoň částečně) bezpečnost našeho DNS serveru můžeme např. pomocí webovéhých nástrojů DNS Stuff nebo The DNS Sleuth.

Útoky

DNS Cache Poisioning, Denial-of-service (DDoS/DoS) attack - DNS Amplification Attack. Částečnou ochranou proti DoS/DDoS útokům může být použití anycastu, kdy dojde k rozložení zátěže na skupinu serverů pro danou anycastovou adresu.

Chrootování

Příklad pro BIND: pro běh procesu named v chroot prostředí je potřeba zadat při spouštění procesu parametr -t <chroot> s adresářem, v kterém bude proces uzamčen.
V takovém adresáři se musí vyskytovat adresářová struktura a soubory nezbytné pro běh named a to např.:

!! Pozor: je potřeba nastavit v chroot adresáři odpovídající přístupová práva (např. mapovaná na uživatele/skupinu named) !!

GSS-TSIG

GSS-TSIG - je používaný u Microsoft serverů a autentizace je prováděna přes Kerberos, navázáný security context s ADS (Active Directory Server), RFC 3645

EDNS a DNSSEC

BIND

BIND je velmi dobře zdokumentovaný a slouží také jako referenční model pro nové implementace. Jedná se o multiplatformní řešení, které používá přes 75% nameserverů na Internetu. BIND využívá pro svůj běh démon s názvem named. Od verze 9.3 částečná podpora DNSSEC-bis a od verze 9.6 plná podpora DNSSEC-bis.

Konfigurace

Hlavní konfigurační soubor named.conf si lze nechat zkontrolovat pomocí named-checkconf(8) a soubor obsahující zónu pomocí named-checkzone(8).

acl - určuje seznam ip adres
controls - určuje řídící kanály (rndc utilita)

	controls {
        	inet 127.0.0.1 allow { localhost; };
	};

include - vkládá soubor

	include jmeno_suboru;

key - určuje údaje potřebné pro autorizaci / autentizaci
logging - nastavení logování (určuje události, které se mají zaznamenávat)
options - globální nastavení serveru

	options {
		directory "/var/named";
		
		query-source port 53;
		
		forward only;
		
		forwarders {
			jine_servery;
		};
	};

server - nastavení konfiugračních možností na úrovni serveru
trusted-keys - určuje trusted DNSSEC keys
zone - určuje zónu
allow-query - určuje, kdo může pokládat bežné DNS požadavky
recursion - server se pokusí zodpovědět žádost za klienta (pošle rekurivně dál, než se mu vrátí odpověd, kterou předá zpět klientovi)
notify - zasílá notifikační zprávy všem autoritativním serverům pro danou zónu
			

Typy zón

zone "primary.example" {
	type master;
	notify yes;
	file "pri/primary.example.zone";
};

zone "slave.example" {
	type slave;
	masters { 147.251.206.1; };
	file "sec/slave.example.zone";
};

zone "." {
	type hint;
	file "root.hint";
};      
			

Příklad zóny muni.example.zone:
$TTL   86400
@       IN      SOA     ns.muni.example. postmaster.muni.example. (
			2009101300 	; Serial
			28800 		; Refresh
			7200 		; Retry
			1209600 	; Expire
			7200)		; Negative Cache TTL
;
@       IN      NS	        ns.muni.example.
@       IN      NS	        ns2.muni.example.
@	IN	A		147.251.206.111
@	IN	MX	10	mail
@ 	IN 	TXT 		"v=spf1 a mx ~all"
ns	IN	A		147.251.206.1
ns2	IN	A		147.251.206.2
fictive	IN	A		147.251.206.222
ftp	IN	CNAME		fictive
mail	IN	A		147.251.206.254
*	IN	CNAME		@
		
Kontrola zóny muni.example.zone:
$ cat /chroot/named/etc/named.conf | grep -A 3 "zone \"muni.exmaple.zone"
zone "muni.example" {
	type master;
	file "pri/muni.example.zone";
};

$ named-checkzone muni.example /chroot/named/var/named/pri/muni.example.zone
zone muni.example/IN: loaded serial 2009101300
OK
		

Literatura