Rekurzivní DNS server doma

K napsání článků mě postrčila informace o nově spuštěném DNS resolveru od firmy CloudFlare, kteří spustil na IPv4 adresách 1.1.1.1, 1.0.0.1 a IPv6 adresách 2606:4700:4700::1111 a 2606:4700:4700::1001 další veřejné DNS servery jako má Google či CZ.NIC. Služba se prezentuje jako super rychlé DNS s nastavením zaměřujícím se na soukromí tak, že o dotazech co na jejich DNS server pošlete neuchovávají v logu na disku a veškeré logy mažou po 24 hodinách. Zní to hezky ne? Ale existuje ještě lepší varianta jak se stát nezávislým na službách tohoto typu.

Tajemství zní rekurzivní DNS server a root.hints soubor. Ale nejdřív je vhodné popsat jak vlastně takový rekurzivní DNS server funguje a jak se liší od forwarding DNS serveru, který teď máte pravděpodobně už doma.

Forwarding DNS

Jeho funce je velmi jednoduchá, když na něj pošlete dotaz tak jej vezme a bez změny jej pošle dál na IP DNS serveru kterou má nastavenou. Má interní cache tak, že zrychluje dotazy na stejné záznamy pokud se na stejný dotaz zeptá jiný stroj v síti. Forwarding DNS používáte i teď pokud jste měli DNS službu spuštěnou na svém domácím routeru, kde jste nejčastěji dostali DNS od svého ISPíka buď přes DHCP nebo fixně na papíře či jste tam vlastnoručně naťukali profláklé servery googlu 8.8.8.8 a 8.8.4.4 či nově IPčka od Cloudflare. Platí, že vždycky na konci každého řetězce forwarding DNS serverů se nachází rekurzivní DNS server.

Rekurzivní DNS

Způsob fungování se liší od forwarderu a to následovně, server má u sebe soubor IP adres všech kořenových DNS (root DNS) serverů s jejich IP adresami nazvaný root.hints, který se dá stáhnout na webu iana.org a který budete potřebovat k tomu aby jste mohli fungovat v rekurzivním režimu. Proces získání koncového záznamu má následující průběh, vezmu si příklad na dotaz www.seznam.cz

  1. Přišel dotaz “A” či “AAAA” na doménu www.seznam.cz
  2. DNS rekurzivní server prohledá root.hints s dotazem kde je zóna “.”
  3. Vybere jeden z ROOTů a zeptá se ho typem dotazu “NS” kde je zóna “cz.”
  4. DNS ROOT server odpoví že zóna “cz.” je umístěna na adresách a.ns.nic.cz , b.ns.nic.cz, c.ns.nic.cz, d.ns.nic.cz a dostane jejich IP adresy (A a AAAA záznam)
  5. DNS rekurzivní server se dotáže jednoho z serverů zóny “cz.” kde je zóna “seznam.cz.” dostane odpověd jako v případě bodu 4 tzn list DNS serverů seznamu a jejich IPčka
  6. DNS rekurzivní server se dotáže jednoho z serverů zóny “seznam.cz.” kde je “A” či “AAAA” záznam “www.seznam.cz” a dotane konkrétní IP adresu webserveru www.seznam.cz
  7. Odpověd předá dotazujícímu klientovi v podobě odpovědi že www.seznam.cz má “A” záznam 77.75.77.53  a “AAAA” záznam 2a02:598:a::79:39.

Jak vidíte workflow rekurzivního DNS serveru je dost delší než u forwarderu, který dotazy jen posílá dál, je tedy na místě mít zapnutou cache kvůli zkrácení času nutného k opakovanému dotazování “kde je zóna cz. či com.”. Nevýhoda rekurzivního DNS serveru je v tom že prvotní dotazy můžou trvat delší dobu než když použijete prostý forwarder. Nicméně po nějaké době když se záznamy nacachují tak už to není znát. Bonus je že ve chvíli kdy vypadne někomu DNS server jako se to stalo Googlu 22.11.2016 v ČR tak vy jedete dál jen nemáte dostupné služby dané nedostupností jejich DNS serveru např. tak že váš rekurzivní DNS server se není schopen spojit DNS servery Googlu a získat např. www.google.com na “A” či “AAAA” záznam.

Nastavení rekurzivního DNS v Windows Active Directory

Nastavení je velmi jednoduché, ani nepotřebujete root.hints file z webu Iany DNS implementace si dokáže seznam serverů vytáhnout z libovolného veřejného DNS serveru tak že k tomu můžete použít stávající forwaredery co tam již máte.

  1. Zvolte Properties vaší DNS služby
  2. Otevřete záložku “Root hints”
  3. Klepněte na “Copy from server” a zadejte libovolný veřejný DNS server, můžete pro ten účel použít třeba i googlí 8.8.8.8 či 1.1.1.1 od Cloudflare. Měli by jste skončit s vypsaným seznamem všech root serverů a jejich IP jako je to na obrázku.
  4. V záložce “Forwareders” vymažte všechny forwardery které tam máte nastavené a potvrďte OK
  5. Zrestartuje DNS službu
  6. Bingo, máte rekurzivní DNS server

Nastavení DNS serveru krok 1.

Záložka “Root Hints”

Načtení seznamu rootů z DNS serveru, krok 3

Vymazání forwarderů

Nastavení rekurzivního DNS v Linuxu s Unbound

Zde je nastavení podobné jako u Windows, jen musíte stáhnout již zmíněný root.hints file ručně z webu iana.org. Pro svojí instalaci používám Linux Debian a Unbound DNS serverem. Stejně pro to můžete použít BIND server akorát konfigurace bude jiná.

  1. sudo su (všechny úkony je potřeba provést pod rootem)
  2. apt-get install unbound
  3. cd /etc/unbound/
  4. wget http://www.internic.net/domain/named.root
  5. nano unbound.conf (konfigurace níže)
  6. service unbound restart
  7. service unbound status
  8. Hotovo, máte rekurzitní DNS server

konfigurace z /etc/unbound/unbound.conf

server:
 verbosity: 1
 interface: 192.168.50.2
 do-ip4: yes
 do-ip6: yes
 do-udp: yes
 do-tcp: yes
 do-daemonize: yes
 access-control: 192.168.50.0/24 allow
 use-syslog: yes
 root-hints: "/etc/unbound/named.root"
  • interface – na kterém IP rozhraní má server naslouchat (může být i IPv6 adresa)
  • do-ipv4, do-ipv6 – zapíná podporu dotazů po IPv4 a IPv6
  • do-udp, do-tcp – zapíná podporu dotazů po UDP i TCP
  • do-daemonize – zapne unbound jako službu na pozadí
  • access-control – rozsahy ze kterých jsou dovoleny dotazy, použijte svůj domací rozsah.
  • use-syslog – použije syslog pro logování
  • root-hints – cesta k staženému souboru root.hints pojmenovaného “named.root”

Po provedení restartu služby zkontrolujte jestli služba běží dle bodu 7

A to je všechno, na spuštění vlastního rekurizvního DNS serveru není nic těžkého a kdokoliv kdo umí aspoň v linuxu nainstalovat balík a ovládat nano z přikazové řádky to zvládne. Pokud by jste chtěli měnit detailnější parametry jako jsou třeba expirace cache a další věci tak se koukněte do dokumentace Unbound serveru je tam toho hodně na štelování. DNS server se takto dá provozovat i na raspberry PI, není to náročné na paměť ani výkon procesoru pokud jde o malé domácí sítě. Sám to takhle mám udělané doma na rPI první generace model B s 700 Mhz CPU a 512 MB paměti, proces unbound si v mém případě bere 24 MB paměti při uptime cca 17 dní.

Štítky , , , , , , .Záložka pro permanentní odkaz.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *