Co je DNS resolver a který zrovna používáte?
DNS resolver je služba, které se vaše zařízení zeptá jako první, když potřebuje IP adresu pro název, a jedno vyhledání obvykle projde třemi různými rolemi: stub resolverem na vašem vlastním počítači, rekurzivním resolverem, který vykoná skutečné hledání, a autoritativními servery, které drží skutečnou odpověď. Většina lidí si nakonfiguruje jen tu první a další dvě nikdy přímo neuvidí.
Co se stane, když vaše zařízení vyhledá název?
Váš operační systém nehledá název po internetu sám. Předá požadavek malému softwaru zvanému stub resolver, což vůbec není jmenný server. RFC 8499 ho definuje jako resolver, "který nedokáže provést celé rozlišení sám" a spoléhá na rekurzivní resolver, že skutečnou práci vykoná. Úkolem stub resolveru je poslat váš dotaz na server nastavený ve vašich síťových nastaveních a vrátit odpověď, nebo uloženou kopii nedávné.
Stub resolver, rekurzivní resolver, autoritativní server: jaký je rozdíl?
V každém vyhledání se objeví tři role, a stejný fyzický server může hrát víc než jednu z nich:
- Stub resolver. Běží na vašem zařízení, přeposílá dotazy, drží malou cache a sám o sobě neumí žádný název přeložit.
- Rekurzivní resolver. Podle RFC 8499 "resolver, který funguje v rekurzivním režimu", tedy dělá celou práci pronásledování odpovědi přes libovolný počet serverů, kolik je potřeba, a pak výsledek uloží do cache a vrátí. Tuto roli plní váš poskytovatel internetu nebo veřejná DNS služba.
- Autoritativní server. RFC 8499 ho definuje jako server, který "zná obsah DNS zóny z vlastní znalosti, a tak umí odpovídat na dotazy o dané zóně bez potřeby ptát se jiných serverů". Toto je server, který provozuje vlastní poskytovatel DNS domény, a jeho odpověď je ta, kterou nikdo jiný neopisuje.
Server, který odpoví odkazem místo úplné odpovědi, jedná iterativně; ten, který pracuje dál, dokud nemá konečnou odpověď nebo definitivní chybu, jedná rekurzivně, což je přesně to, co znamená "rekurzivní resolver" ve svém názvu.
Cesta jednoho vyhledání: přeskoky přes root, TLD a autoritativní server
Studené vyhledání, takové, kde nic nikde není uloženo v cache, prochází pevnou hierarchií. Rekurzivní resolver začne u root serveru, jedné ze třinácti pojmenovaných identit root serverů, které IANA uvádí od a.root-servers.net po m.root-servers.net, a zeptá se ho na example.com. Root server odpověď nezná; vrátí odkaz na servery zodpovědné za doménu nejvyšší úrovně .com. Resolver se zeptá jednoho z nich a dostane druhý odkaz, tentokrát na autoritativní jmenné servery pro example.com samotnou, ty, které nakonfiguroval vlastník domény. Teprve tento poslední server dá skutečnou odpověď místo ukazatele někam jinam. Rekurzivní resolver ji uloží do cache a předá zpátky vašemu stub resolveru, který ji předá vašemu prohlížeči.
Každý přeskok po prvním se přeskočí, kdykoli má odpověď už cestou nějaká cache, což je důvod, proč naprostá většina každodenních vyhledání root server vůbec nezasáhne.
Resolver poskytovatele internetu vs veřejný resolver: co se skutečně mění?
Resolver, který vaše zařízení ve výchozím stavu používá, obvykle přichází z DHCP, rozdaný vaším routerem nebo poskytovatelem internetu, a téměř vždy jde o rekurzivní resolver, který za vás dělá plné vyhledávání. Co dělá s vašimi dotazy, jak velkou má cache a z kolika lokalit běží, nastavuje ten, kdo ho provozuje, a z vaší strany to nejde vidět.
Veřejné resolvery existují jako alternativa, na kterou svoje zařízení místo toho nasměrujete: Google Public DNS běží na 8.8.8.8, Cloudflare na 1.1.1.1 a Quad9 na 9.9.9.9. Každý publikuje vlastní zásady o tom, co loguje a jak dlouho si to drží, každý provozuje vlastní síť anycast, takže stejná adresa odpovídá z lokality, která je vám nejblíž, a Quad9 navíc ve výchozím stavu blokuje známé škodlivé domény přímo na úrovni resolveru, což poskytovatel internetu typicky nedělá. Nic z toho nemění, co DNS samotné umí: resolver rozhoduje jen o tom, jak se vyhledání provede, ne o tom, co říkají záznamy domény.
Který resolver váš počítač právě teď používá?
Resolver, který skutečně používáte, je nastavení, ne hádanka, a každý OS má jeden příkaz, který ho ukáže:
- Windows:
ipconfig /allvypíše "DNS Servers" pod každým síťovým adaptérem, v pořadí, v jakém se na ně obrací dotaz. - macOS:
scutil --dnsnahlásí aktuální konfiguraci DNS, včetně jmenných serverů platných pro každou síťovou službu. - Linux se systemd-resolved:
resolvectl statusukáže, podle vlastního manuálu, "globální a per-link nastavení DNS aktuálně platná", tedy jak záložní resolver, tak to, co konkrétní připojení jako Wi-Fi nebo VPN případně přebilo.
VPN, firemní síť nebo vlastní nastavení zabezpečeného DNS v prohlížeči může každé nahradit jiný resolver, aniž by se změnilo to, co hlásí příkaz OS, takže pokud odpověď příkazu neodpovídá tomu, co byste čekali, tam se dívejte nejdřív.
To, který resolver odpoví na dotaz, může změnit výsledek, který vidíte, ne jen rychlost jeho získání: resolver se zastaralou cache, regionálním výpadkem nebo vlastní filtrovací politikou může vrátit něco jiného, než by řekly přímo autoritativní servery. Spusťte vyhledání pomocí nástroje pro DNS dotaz, abyste porovnali, nebo pokud resolver odpovídá pomalu místo jinak, jak opravit pomalé vyhledávání DNS pokrývá jeho měření a změnu. Pokud neodpovídá vůbec, začněte s DNS server not responding. O chování cachování za tím vším viz co je DNS cache. HostTracker monitoruje weby od roku 2004, dnes sleduje přes 500 000 webů z více než 300 kontrolních bodů ve 158 městech a dokáže upozornit e-mailem, SMS, hlasovým hovorem, přes Slack, Telegram a další ve chvíli, kdy kontrola, která očekává konkrétní IP adresu, uvidí jinou.
Časté otázky
Je můj router DNS resolver?
Často jen v omezeném smyslu. Mnoho domácích routerů provozuje malý DNS forwarder: odpovídá z maličké cache, ale pro cokoli, co ještě nemá uložené, pošle dotaz rovnou resolveru poskytovatele internetu, místo aby dělal plnou rekurzi sám. RFC 2308 popisuje tuto roli jako forwarder, "jmenný server použitý k rozlišování dotazů namísto přímého použití řetězce autoritativních jmenných serverů".
Zrychlí veřejný resolver moje prohlížení?
Někdy ano, někdy ne. Resolver blízko vás s teplou cache odpoví v jednotkách milisekund bez ohledu na to, kdo ho provozuje. Hlavními proměnnými jsou, jak blízko je vám nejbližší lokalita resolveru a jak zahřátá už má cache, ne jméno značky.
Jaký je rozdíl mezi rekurzí a přeposíláním?
Resolver, který dělá rekurzi, se sám ptá root serveru, TLD serveru i autoritativních serverů, krok po kroku, a výsledek uloží do cache. Resolver, který místo toho přeposílá, pošle celou otázku jinému resolveru a čeká na úplnou odpověď, přičemž práci, a přehled o tom, co jste hledali, přenechá tomu, co má nadřazený resolver už v cache.
Běží všech 13 root serverů na 13 strojích?
Ne. Existuje třináct pojmenovaných identit root serverů, ale každá z nich je obsluhována mnoha fyzickými stroji po celém světě, takže dotaz se nasměruje na blízkou kopii místo aby při každém dotazu přecházel oceán.
Můžou dvě zařízení ve stejné síti používat různé resolvery?
Ano. Router rozdá výchozí přes DHCP, ale kterékoli zařízení ho může přebít ve vlastních síťových nastaveních, a VPN nebo zabezpečené DNS prohlížeče ho může přebít ještě jednou navrch. Příkazy výše vždy ukazují, co dané konkrétní zařízení v daném okamžiku používá, ne co zamýšlí síť.