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).
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
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í
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ů:
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
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.revsoubory 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 vbourbonjmé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
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