DNS

Jiří Appl, 207620 na mail.muni.cz

Obsah

DNS teoreticky

Historie

Překlad jmen na adresy má dlouhou historii, využíván již v dobách ARPAnetu. Používalo se jednodušší schéma, veřejně dostupný soubor HOSTS.TXT se všemi adresami, Stanford Research Institute. Špatně škálovatelné řešení, při libovolné změně je vynuceno stažení poměrně velikého balíku dat. Zachováno dodnes (/etc/hosts) s menší důležitostí.

Počátkem 80. let změna, Internet Engineering Task Force. První implementace DNS 1983, RFC 882 a 883; změny 1987, RFC 1034 a 1035 zneplatnily původní specifikace; později další rozšíření pomocí dalších RFC. Je také definován DNS protokol pro výměnu informací v DNS.

První unixová implementace 1984, studenti z Berkeley; 1985 přepsáno a přejmenováno na BIND -- Berkeley Internet Domain Name, počátkem 90. let portováno na WinNT.

BIND je jedna z nejvíce používaných implementací, původní návrh nebral příliš ohled na bezpečnost, kompletně přepsán pro verzi 9 (aktuální je 9.6.0).

Mezi další lze zařadit např. djbdns, Dnsmasq, NSD atd.

DNS zrušil povinnost vést centrální registr pomocí distribuované databáze záznamů, odstranil tak některá bezpečnostní rizika, zvýšil výkon a škálovatelnost celého systému a snížil náklady při zachování kvality (ve skutečnosti došlo ke zvýšení kvality).

Struktura

Prostor doménových jmen tvoří strom, dále dělený na zóny. Řeší původně náročné udržování aktuálních informací v jednom souboru pomocí klient/server distribuce údajů. Správce vyšší domény může delegovat právo udržovat informace o poddoméně někomu jinému; rekurzivně podobně dál.

Doménové jméno se obvykle skládá z 2 a více popisků oddělených tečkou. (Rozdíl od hostname -- nemusí mít IP adresu, např. cz.)

Napravo Top Level Domain, doména nejvyšší úrovně. Relace být poddoménou je relativní, muni.cz je poddoménou cz, www.fi.muni.cz poddoménou fi.muni.cz

Až 127 úrovní, každý popisek až 63 oktetů, celé jméno maximálně 253 oktetů. Prakticky bývají z registrů diktované tvrdší podmínky.

Doména je dělená na několik zón. Např. muni.cz na fi.muni.cz, sci.muni.cz a muni.cz. Zóna obsahuje několik autoritativních DNS serverů, které poskytují informace o počítačích obsažených v zóně + informace o NS podzón -- glue records. Naproti tomu všechny počítače z fi.muni.cz, sci.muni.cz i muni.cz patří do jedné domény -- muni.cz.

Hierarchická struktura začíná NS v kořenové zóně, označovaná "." (tečkou). Aktuálně 13 nameserverů, fyzicky více strojů. Rozmístěné po celé planetě. Používají BIND a NSD implementace.

Name servery poskytují klientům různé informace -- samozřejmě překlad, používají se i na blacklisty, informace o aktualizacích atd.

Klient je označován jako resolver, dotazuje se NS, informace může čerpat ale i jinde.

NS jsou rozděleny do několika tříd. Každá zóna má alespoň dva (RFC vyžaduje fyzicky oddělené) autoritativní NS, jeden primární, ostatní sekundární. Primární načítá nastavení ze souborů, sekundární se s ním opakovaně automaticky synchronizují. Tyto NS obvykle odpovídají nerekurzivně (tedy řeknou, kde má resolver hledat dál). Existují také Cache-only NS, vhodné pro vlastní doménu, u ISP atd. Mohou dotazy řešit rekurzivně, tedy najdou odpověď za žadatele samy a informaci uchovají v cache. Toto chování není od NS vyžadováno.

Klasicky překlad probíhá jako iterativní dotazování autoritativních NS, počínaje u NS kořenové zóny a konče autoritativními NS cílové zóny. Admin musí udržovat aktuální seznam adres kořenových NS. V praxi se používá cachování, jinak by byla zátěž kořenových NS, ale i TLD NS, neobsloužitelná (každý požadavek by začínal u nich); bylo by tu opět úzké hrdlo původního systému. 86 let vs. 8 číslic na TTL

Internationalized domain names (IDN), Internet Corporation for Assigned Names and Numbers (ICANN) schválila Internationalizing Domain Names in Applications (IDNA) v roce 2003 -- mapování Unicode řetězců na ASCII.

Reverzní mapování -- z adres na jména, pomocí domény in-addr.arpa, nadmnožina IP sítí -- pouze na podsítě na hranici bytů.

Forwarding nameservers -- odpovídají pro vlastní zónu, neznámé přeposílají dál

Bezpečnostní problémy

DNS cache poisoning

chybí podpisy (řeší DNSSEC)

chybné/úmyslné změny záznamů, těžko opravitelné kvůli cachování

phising (a co teprve s IDN)

lze použít kontrolu pomocí Forward Confirmed Reverse DNS

dále lze chránit použitím chroot jailu a snížením oprávnění

DNS prakticky

Používá se obvykle protokol UDP, server poslouchá na portu 53. Dotaz je obvykle jeden paket, stejně jako odpověď. TCP se používá pro delší odpovědi.

Dotazy se ptají na tzv. Resource Records (RR). Složeno z:

Příklady typů:

Resolver

Klientská knihovna, táže se; gethostbyname(2), gethostbyaddr(2); čte konfigurační soubory při volání. Konfigurační soubory především určují pořadí zdrojů dat nabízených k dotazování.

Dříve konfigurace v /etc/host.conf -- každý řádek jeden záznam, nejdůležitější order. Výchozí nastavení bylo order bind,hosts; možnost překrýt pomocí proměnných prostředí.

Nyní v /etc/nsswitch.conf, od glibc v2, sdružuje mnohem více zdrojů dat. Pro DNS zajímavý řádek začínající na hosts; výchozí je hosts: dns files; možnost vkládat akce mezi jednotlivé služby.

Při konfiguraci je třeba resolveru říci, koho se může ptát -- /etc/resolv.conf

BIND

démon named

dříve konfigurace v named.boot, příklad:

; /etc/named.boot file for vlager.vbrew.com
;
directory     /var/named
;
;             domain                   file
;-----------------
cache         .                        named.ca
primary       vbrew.com                named.hosts
primary       0.0.127.in-addr.arpa     named.local
primary       16.172.in-addr.arpa      named.rev
soubory dále specifikované hledej ve /var/named, je to primární NS pro tři domény, zónové konfigurace ve specifikovaných souborech; cache odkazuje na root NS

nyní v named.conf; skript named-bootconf.pl pro konverzi; příklad:

// 
// /etc/named.boot file for vlager.vbrew.com                                     
options {
        directory "/var/named";
};

zone "." {
        type hint;
        file "named.ca";
};

zone "vbrew.com" {
        type master;
        file "named.hosts";
};

zone "0.0.127.in-addr.arpa" {
        type master;
        file "named.local";
};

zone "16.172.in-addr.arpa" {
        type master;
        file "named.rev";
};
identické tomu dříve

zónový soubor pro root NS:

;
; /var/named/named.ca          Cache file for the brewery.
;                We're not on the Internet, so we don't need
;                any root servers. To activate these
;                records, remove the semicolons.
;
;.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
;A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
;.                        3600000      NS    B.ROOT-SERVERS.NET.
;B.ROOT-SERVERS.NET.      3600000      A     128.9.0.107
;.                        3600000      NS    C.ROOT-SERVERS.NET.
;C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
;.                        3600000      NS    D.ROOT-SERVERS.NET.
;D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90
;.                        3600000      NS    E.ROOT-SERVERS.NET.
;E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
;.                        3600000      NS    F.ROOT-SERVERS.NET.
;F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
;.                        3600000      NS    G.ROOT-SERVERS.NET.
;G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
;.                        3600000      NS    H.ROOT-SERVERS.NET.
;H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
;.                        3600000      NS    I.ROOT-SERVERS.NET.
;I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
;.                        3600000      NS    J.ROOT-SERVERS.NET.
;J.ROOT-SERVERS.NET.      3600000      A     198.41.0.10
;.                        3600000      NS    K.ROOT-SERVERS.NET.
;K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129 
;.                        3600000      NS    L.ROOT-SERVERS.NET.
;L.ROOT-SERVERS.NET.      3600000      A     198.32.64.12
;.                        3600000      NS    M.ROOT-SERVERS.NET.
;M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
;
neurčená CLASS znamená stejná jako dříve

příklad zónového souboru pro normální doménu:

;
; /var/named/named.hosts       Local hosts at the brewery
;                               Origin is vbrew.com
;
@                IN  SOA   vlager.vbrew.com. janet.vbrew.com. (
                           2000012601 ; serial
                           86400      ; refresh: once per day
                           3600       ; retry:   one hour
                           3600000    ; expire:  42 days
                           604800     ; minimum: 1 week
                           )
                 IN  NS    vlager.vbrew.com.
;
; local mail is distributed on vlager
                 IN  MX    10 vlager
;
; loopback address
localhost.       IN  A     127.0.0.1
;
; Virtual Brewery Ethernet
vlager           IN  A     172.16.1.1
vlager-if1       IN  CNAME vlager
; vlager is also news server
news             IN  CNAME vlager
vstout           IN  A     172.16.1.2
vale             IN  A     172.16.1.3
;
; Virtual Winery Ethernet
vlager-if2       IN  A     172.16.2.1
vbardolino       IN  A     172.16.2.2
vchianti         IN  A     172.16.2.3
vbeaujolais      IN  A     172.16.2.4
;
; Virtual Spirits (subsidiary) Ethernet
vbourbon         IN  A     172.16.3.1
vbourbon-if1     IN  CNAME vbourbon
jméno bez tečky na konci znamená připoj doménu, @ je zástupce pro doménu, číslo u MX je preference, menší je vyšší; vlager.vbrew.com je primární NS, janet@vbrew.com je email správce

Debian balíček bind -- starší, novější v9 je bind9

djbdns

narozdíl od BINDu několik menších částí, 4.3.2009 vyplacena odměna prvnímu člověku, který našel chybu umožnující eskalaci oprávnění (1000 $)

serverové části:

podobně klientské části

Další nástroje

Literatura