DNS
Filip Zachar, 409815@mail.muni.cz
Obsah
Čo je DNS
DNS alebo Domain Name System (po slovensky Systém názvov domén) je systém, ktorý ukladá prístup k informácii o názve stroja (hostname) a názve domény v istej distribuovanej databáze v počítačových sieťach ako internet. Najdôležitejšie je, že poskytuje mechanizmus získania IP adresy pre každé meno stroja (lookup) a naopak (reverse), a uvádza poštové servery (MX záznam) akceptujúce poštu pre danú doménu.
DNS poskytuje na internete všeobecne dôležitú službu, pretože kým počítače a sieťový hardvér pracujú s IP adresami, ľudia si vo všeobecnosti ľahšie pamätajú mená strojov a domén pri použití napr. v URL a e-mailovej adrese (obzvlášť nepríjemné by to bolo pri IPv6 adrese). DNS nie je dôležitý len pre koncového zákazníka, napríklad aj developeri často používajú na konfigurovanie aplikácií doménové mená aby tak nefixovali jenotlivé časti systému na konkrétne IP adresy. V prípade zmeny konfiguácie sa zmení záznam v distribuovanej DNS databáze a všetky časti sýstému začnú používať novú konfiguráciu.
História
DNS vynašiel Paul Mockapetris v roku 1983 po tom čo sa počítačové sieťe viacej rozšírili aby tým vyriešil problém distribuovania zmien v súboroch HOSTS.TXT ktoré dovtedy obsahovali tabuľku mapujúcu názvy na adresi.
Súbor HOSTS.TXT technicky stále existuje. Väčšina dnešných systémov, či už predvolene alebo po konfigurácii, prehľadáva pri získavaní adresy podla doménového mena najprv súbor HOSTS.TXT (v linuxových systémoch sa tento súbor zväčša nachádza v /etc/hosts) a až následne sa pokúša o DNS dotaz aby získala odpoveď z distribuovanej databázy.
Fungovanie DNS
- Informácie sa ukladajú v zónových súboroch
- Systém používa protokol TCP alebo UDP port 53
- Doménové meno sa skladá z častí (domén / subdomén) oddelených bodkou
- Doména / subdoména môže obsahovať znaky "a-z", "0-9" a pomlčku "-"
- V doménových menách nezáleží na veľkosti písmen. Doména "google.com" označuje taký istý záznam ako doména "GOOGLE.COM".
Stromová hierarchia
.
|
,---------|----------------,
| | |
com cz sk
| | |
,-----------| ,-----, |-----------,
| | | | | |
google github muni idnes sme eset
|
,---------|-------,
| | |
fi czs med
|
,---------,
| |
aisa erigona
- Koreňový pvok stromovej štruktúry je "." ktorá sa ale nepíše na konci doménových mien
- Jednotlivé prvky stromu spojené bodkou "." reprezentujú doménový názov daného zdroja
- TLD (Top level domain), česky doména nejvyššího řádu, je najobecnejšia časť doménového mojadomena
- Zvýraznená vetva stromu teda reprezentuje doménu erigona.fi.muni.cz
- Časti doménového mena na ľavej strane sú najviac špecifické a smerom do prava sa zobecňujú
Typy DNS serverov
DNS server je počítač zodpovedný za preklad doménových mien na na IP adresy (prípadne iné typy záznamov)
DNS Serveri vieme rozdeliť na základe funcionalít:
-
Authoritative-only
- je autoritatívny pre nejaké zóny
- server nakonfigurovaný tak, aby odpovedal len na dotazy ktorých odpovede vie nájsť vo svojich zónových súboroch
- býva vypnutá funkcia rekurzívneho dohľadávania odpovede
- nie je zapnuté cache-ovanie pretože všetky infomácie má v zónových súboroch
- dokáže spracovať veľké množstvo dotazov
-
Caching
- odpovedá na rekurzívne dotazy, dotazuje verejné autoritatívne (nie nutne) servery aby sa dopracoval k opovedi
- cachuje dotazy kvoli zvýšeniu efektivity
- "hlúpemu" klientovi skrýva zložitosť DNS
-
Forwarding
- presmeruváva dotazy na caching dns serveri
- býva vypnutá funkcia rekurzívneho dohľadávania odpovede
- cachuje dotazy kvoli zvýšeniu efektivity
- pridáva další skok v reťazi dohľadávania odpoveda
- používa sa na priblíženie cache k koncovým užívateľom
Niektoré serveri môžu kombinovať jednotlivé funkcionality. Takže je možné vytvoriť autoritatívny DNS server s povoleným rekurzívnym dohľadávaním a zapnutou cache.
Autoritatívne DNS serveri vieme rozdeliť na základe vzťahov k zónam:
-
Primárny - Master
- informácie o zóne pre ktorú je autoritatívny má uložené vo svojom súborovom systéme
- pre každú zónu je práve jeden server primárny
-
Sekundárny - Slave
- informácie o zóne pre ktorú je autoritatívny si sťahuje z primárneho DNS servera pre túto zónu
- zóna môže mať viacej sekundárnych DNS serverov
- zvyšuje redundaciu
Server môže byť primárny pre jednu zónu a sekundárny pre druhú zónu.
Typy DNS záznamov
- SOA (Start Of Authority)
Syntax:
<doména> [<ttl>] [<trieda>] SOA <nameserver> <admin> (
<serial>
<refresh>
<retry>
<expire>
<minimum> )
doména: meno domény
trieda: pre Internet vždy "IN"
nameserver: primárny DNS server
admin: adresa správcu DNS. Znak "@" sa nahrádza znakom "."
serial: sériové číslo v tvare "YYYYMMDDxx",
- kde YYYY predstavuje rok
- MM mesiac, DD deň poslednej zmeny a xx je číslo zmeny
- Pri každej zmene zónového súboru treba zvýšiť toto číslo, inak sa zmeny neprejavia v sekundárnych DNS serveroch
refresh: určuje interval, v akom si má sekundárny DNSserver obnovovať údaje z primárneho DNS servera (v sekundách, RFC 1033 odporúča: 3600)
retry: určuje interval, v ktorom sa má sekundárny nameserver pokúšať opätovne spojiť s primárnym DNS serverom po tom, ako pri spojení nastala chyba (v sekundách, RFC 1033 odporúča: 600)
expire: určuje platnosť údajov na sekundárnom DNS serveri v prípade, že sa mu nepodarí aktualizovať údaje z primárneho DNS servera (v sekundách, RFC 1033 odporúča: 3600000)i
minimum: minimálna hodnota TTL (v sekundách, RFC 1033 odporúča: 86400)
NS (Name Server): určuje DNS servery pre definovanú zónu
Každá zóna musí mať najmenej jeden NS záznam
Syntax:
[<ttl>] [<trieda>] NS <server>
MX (Mail Exchanger)
určuje server ktorý prijíma poštu adresovanú na adresy tejto zóny
na zistenie, kam sa má pošta doručiť
Syntax:
[<ttl>] [<trieda>] MX <priorita> <server>
A (Address)
Záznam "A" (Address) určuje IP adresu pre server definovaný jeho menom. Servery uvedené ako "NS" a "MX", ktoré sú súčasťou vašej domény, musia mať záznam typu "A" (nie CNAME)!
Syntax:
<server> [<ttl>] [<trieda>] A <adresa>
AAAA (Address IPv6)
Záznam "AAAAA" (Address IPv6) určuje podobne ako záznam A, IP adresu verzie 6 pre server definovaný jeho menom.
Syntax:
<server> [<ttl>] [<trieda>] A <adresa>
CNAME (Canonical Name)
umožňuje vytvoriť alias pre server, ktorý už má "A" záznam, čiže niekoľko záznamov môže byť asociovaných s tou istou IP adresou. Toto sa používa pre definíciu serverov s menami "www", "mail" a podobne.
Syntax:
<alias> [<ttl>] [<trieda>] CNAME <server>
PTR (Pointer)
Záznamy "PTR" umožňujú reverzný preklad (z IP adresy na doménové meno počítača). Tieto záznamy môžete použiť iba v špeciálnej doméne "in.addr-arpa".
Syntax:
<špeciálnemeno> [<ttl>] [<trieda>] PTR <meno>
Vyhodnotenie dotazu
Vždy keď sa aplikácia snaží dohľadať IP (prípadne iný typ záznamu) k doménovému menu, aby mohla ďalej pracovať so smerovateľnou adresou,
napríklad pri zadaní URL do browsera, sa najprv kontaktuje tzv. stub resolver, čo je časť operačného systému ktorá prehľadáva súbor hosts
a v prípade nenájdenia požadovanej informácie kontaktuje resolver.
Pri riešení dotazu "www.example.com" postupuje resolver nasledovne:
- V prípade že sa jedná o autoritatívny DNS server hľadá odpoveď pre "www.example.com" v svojich zónových súboroch a vráti odpoveď
- V prípade že má DNS server zapnutú cache hľadá odpoveď v cache
- V prípade že sa jedná o forwarding DNS server preposiela dotaz "www.example.com" nadradenému dnes serveru
- V prípade že sa jedná o DNS server s zapnutou podporou rekurzívnych dotazov pokračuje nasledovne:
- Kontaktuje ROOT DNS server s dotazom na "com"
- Kontaktuje autoritatívny DNS server pre doménu "com" s dotazom "example.com"
- Kontaktuje autoritatívny DNS server pre doménu "ecample.com" s dotazom "www.example.com"
- Vráti získanú informáciu
- V prípade nenájdenia záznamu v ktorom kolvek kroku vráti chybu
Stub resolver
Konfuguruje sa ktoré serveri použiť na vyhonotenie rekurzívneho dotazu.
V unixových systémoch sa konfigurácia nachádza v súbore /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
BIND
Najpopulárnejší DNS server.
Vyvýjaný už od 1985. Súčasná verzia 9.10.3
Hlavný konfiguračný súbor named.conf obsahuje inicializaciu súborov:
- named.rfc1912.zones - definované zóny
- /etc/named.root.key - verejný kľúč pre root zónu, používa sa pri DNSSEC
Ukážka definice zóny
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
Príklad zónového súboru:
$TTL 3600
$ORIGIN example.com.
@ IN SOA @ root.example.com. (2015101000 3H 15M 2W 1D)
IN NS ns1 ; autoritativne name servery
IN NS ns1.registrar.com.
IN MX 0 mail.example.com.
www IN A 10.20.30.80 ; info. o pocitacoch
ftp IN A 10.20.30.21 ; v tejto domene
ns1 IN A 10.20.30.53
news IN CNAME www.example.com.
...
Reverzný záznam pre podsieť 10.20.30.0:
$ORIGIN 30.20.10.in-addr.arpa.
@ IN SOA @ root.domena.cz. (2015101000 3H 15M 2W 1D)
IN NS ns.domena.cz.
IN NS ns.provider.cz.
80 IN PTR www.example.com
21 IN PTR ftp.example.com
53 IN PTR ns1.example.com
...
- dig resolver
- Header
- QUESTION SECTION
- ANSWER SECTION
- AUTHORITY SECTION - odpovedajúce DNS servery
- ADDITIONAL SECTION - IP k DNS serverom
- host - na komunikáciu s DNS serverom a umožňuje prístup k záznamov v DNS
- drill
- whois
- nslookup
DNSSEC
DNS je nešifrovaný protokol, všetky informácie putujú sieťou v čitateľnej forme. Je možné klientovy podunúť odpoveď z podvhnutou adresou (DNS spoofing)
a iniciovať tak MITM útok.
Na zabezpečenie autenticity sa používa DNSSEC ktorý využíva asymetrickú kryptografiu.
DNSSEC používa na autentizáciu trust chain tvorený jednotlivými kľúčmi domén.
Používajú sa 2 typy kľúčov:
- ZSK - zone signing key, pár súkromného a verejného kľúča, súkromný kľúč podpíše jednotlivé záznamy (RRSIG), verejný kľúč je použiťý na overenie autenticity
- KSK - key signing key, pár súkromného a verejného kľúča, súkromný kľúč podpíše ZSK a verejný ho overý
RFC 4033 popisujúce bezpečnosť v DNS definuje 3 nové typy záznamov:
- DNSKEY - verejný kľúč ZSK / KSK
- RRSIG (Resource Record SIGnature) - existuje ku každému záznamu v zóne, obsahuje digitálny podpis daného záznamu
- DS (Delegation Signer) - otlacok verejného kľúča KSK delegovanej zóny, uvádza sa v nadradenej zóne
Prečo 2 klľúče ?
- Kvoli bezpečnosti je treba vhodne zvoliť veľkosť kľúča ktorý sa používa na overovanie autenticity. S pribúdajúcou dĺžkou kľúča rastie bezpečnosť ale zase rastie aj výpočetná náročnosť na overenie autenticity záznamu. Krátky kľúč treba zase častejšie meniť.
- DS je potrebné uložiť v nadradenej zóne, takže pri každej zmene kľúča by bolo treba kontaktovať administrátora nadradenej zóny.
- KSK, dlhší kľúč (večšinou 4098 bitov, stačí na niekoľko rokov) ktorý je potebný na overenie len pár záznamov (DNSKEY ZSK)
- ZSK, kratší kľúč (večšinou 1024 bitov, stačí na mesiac) je potrebný na overenie ostatných záznamov zóny
- pregenerovanie ZSK sa dá nastaviť automaticky (napr cron) pretože všetky zmeny sa udejú len v rámci zóny a nie je tak potreba zásah administrátora
Priamo v konfigurácii resolvera je umiestnený verejný kľúč koreňového KSK. Od tohto kľúča je budovaný trust chain až smerom k špecifickejším doménam.
Literatura