Jak nastavit DNS Caching pomocí dnsmasq na Ubuntu

Photo of author

By etechblogcz

DNSmasq představuje efektivní nástroj pro ukládání DNS dotazů do mezipaměti v rámci linuxových distribucí, ačkoli jeho konfigurace může vyžadovat určitou míru technické zdatnosti.

Mechanismus DNS cache je navržen tak, aby zrychlil proces překladu doménových jmen webových stránek na odpovídající IP adresy. Pokud více uživatelů v síti přistupuje ke stejné webové adrese, použití lokálního DNS cache serveru může významně snížit dobu načítání stránek.

Nejprve si objasníme samotný koncept DNS cachování.

Co je to DNS cachování?

Systém DNS se stará o evidenci všech veřejně dostupných webových stránek a jim přidělených IP adres. Můžeme si to představit jako jakýsi internetový telefonní seznam. Používání DNS nás zbavuje nutnosti pamatovat si IP adresy jednotlivých webů, což je klíčové pro fungování síťové infrastruktury a interakci s internetem.

Kdykoliv zadáte do prohlížeče požadavek na zobrazení webové stránky, celý tento proces probíhá na pozadí.

Přestože váš systém má přístup k velkému množství externích DNS serverů, centrální DNS replikace může stále omezovat rychlost přenosu dat a rozlišení. Právě zde vstupuje do hry DNS cache.

DNS cache před odesláním požadavku na web zpracovává rozlišení identifikátorů pro nedávno a často používané domény, což výrazně urychluje celý proces.

DNS server je aktivní pokaždé, když je potřeba převést IP adresu na doménové jméno. To může způsobit nadměrné zatížení serveru, zejména pokud web zaznamenává vysoký počet simultánních požadavků.

DNS cache je využívána pro redukci DNS dotazů a zkrácení doby odezvy. Již vyřešené IP adresy spolu s informacemi o hostiteli jsou ukládány lokálně. Místo generování nového DNS dotazu se při dalším požadavku na IP adresu nebo doménové jméno načítá výsledek z DNS cache.

Jak DNS cache pomáhá řešit občasné problémy s DNS na instancích Amazon EC2?

Většina linuxových systémů ve výchozím nastavení nepoužívá lokální DNS cache. To znamená, že všechny DNS dotazy jsou odesílány přímo k autoritativnímu DNS překladači společnosti Amazon, který je omezen počtem požadavků, které dokáže zpracovat v daném okamžiku. Při velkém množství dotazů tak může docházet k problémům s rozlišením DNS.

Zavedením lokální DNS cache ve vašem systému můžete snížit zátěž procesoru a sítě a zároveň předejít chybám při překladu DNS. Místní DNS cache reaguje na dotazy směřující k externím zdrojům DNS, jako jsou Amazon RDS a S3.

Protokol DHCP se využívá při spuštění instancí Amazon EC2 připojených k Amazon VPC k získání adresy DNS serveru.

Při použití Amazon VPC pro vytvoření virtuálního privátního cloudu, Route 53 DNS Resolver efektivně využívá překladač na VPC k odpovídání na DNS požadavky pro EC2 instance běžící pod lokálními webovými adresami Amazon VPC a záznamy v soukromě spravovaných zónách. Pro veškeré ostatní webové adresy provádí překladač opakované vyhledávání na veřejných DNS serverech.

DNS cache slouží jako dočasný záznam minulých DNS dotazů, které může systém rychle prozkoumat při pokusu o přístup na webovou stránku. Uchovává informace o každé existující i následující relaci. Tato DNS cache usnadňuje rozlišení domény a zabraňuje chybám u instancí Amazon EC2 s Linuxem.

Mnoho uživatelů obvykle používá službu Amazon Route 53 pro DNS při přístupu k AWS. Je to jednoduché a téměř bezplatné řešení. Nicméně existuje několik důvodů, proč se uživatel může rozhodnout pro lokální DNS server.

Ačkoliv je bind9 stále dobrou volbou pro nastavení lokálního DNS cache serveru, dnsmasq je výrazně jednodušší instalovat a konfigurovat jak na EC2 instancích, tak na lokálním počítači.

Co je to dnsmasq?

DNSmasq je linuxový nástroj podporující DNS cache, DHCP, TFTP a DNS. Byl navržen s důrazem na kompaktnost a nízké nároky na zdroje, což ho činí ideálním pro sítě a firewally s omezenými prostředky.

Instalace a konfigurace jsou velmi jednoduché. Dnsmasq představuje flexibilní a praktické řešení pro nastavení DNS a DHCP pro podsítě.

Je možné konfigurovat identifikátory přiřazené pomocí DHCP a související instrukce pro každý server nebo pro příslušný řadič. Dnsmasq podporuje dynamické i statické možnosti DHCP. Je přenosný a dokáže spravovat DNS a DHCP až pro 1000 klientů.

Když je přijat DNS dotaz, dnsmasq buď odpoví z lokální mezipaměti, nebo jej přesměruje na autoritativní DNS server. Kromě odpovídání na DNS požadavky na adresy pomocí konfigurace DHCP, kontroluje obsah souboru /etc/hosts, aby identifikoval lokální názvy hostitelů, které nejsou uvedeny ve veřejném DNS.

Použití dnsmasq namísto vestavěné DNS cache v prohlížeči významně zvyšuje rychlost procházení internetu. Je ideální pro integrované prostředí s omezenými zdroji, protože se snadno nastavuje a vyžaduje minimální prostor na disku.

Vlastnosti dnsmasq

  • Dnsmasq umožňuje snadnou integraci interních DNS serverů tím, že jej nakonfigurujete pro přesměrování specifických dotazů na rozlišení doménových jmen na určené autoritativní servery.
  • Použití nakonfigurovaného lokálního DNS serveru snižuje zátěž serveru a zvyšuje spolehlivost.
  • Konfigurace DNS pro koncové body s firewallem je poměrně jednoduchá a nezávislá na DNS používaném poskytovatelem internetového připojení (ISP).
  • Pokud je port připojený k internetu při provádění kontroly DNS nedostupný, proces vyhledávání se okamžitě pozastaví.
  • Dnsmasq lze nakonfigurovat pro pravidelné shromažďování dat přímo ze základního serveru pro rozlišení domén prostřednictvím dotazů PPP (Point-to-Point Protocol) nebo DHCP.

Instalace

Před instalací a konfigurací nástroje dnsmasq je nutné vypnout službu systemd-resolved.

systemctl stop systemd-resolved

Pomocí atributu mask ji můžete také skrýt, aby se nespustila automaticky při restartu.

systemctl mask systemd-resolved

Instalace dnsmasq je prvním krokem, který musíte provést po deaktivaci systemd-resolved. Dnsmasq je předinstalován téměř ve všech distribucích Linuxu. Pokud ne, můžete jej nainstalovat manuálně. Otevřete příkazový terminál a zadejte následující příkaz.

sudo apt-get install dnsmasq

Pokud používáte yum, zadejte tento příkaz:

sudo yum install -y dnsmasq

Tento příkaz automaticky nainstaluje nástroj a spustí dnsmasq na pozadí.

Po úspěšné instalaci můžete zkontrolovat stav dnsmasq pomocí níže uvedeného příkazu.

systemctl status dnsmasq

Pokud je stav označen jako „active (running)“, znamená to, že instalace byla dokončena a konfigurace proběhla na portu 53. Pokud se zobrazí stav „inactive (dead)“, je potřeba restartovat jak váš počítač s Ubuntu, tak dnsmasq. Tím by se měla chyba vyřešit.

Konfigurace

Dnsmasq je nyní připraven k nastavení na vašem počítači jako lokálního cache DNS serveru. Výchozí konfigurační soubor se nachází v /etc/dnsmasq.conf. Tento soubor je nutné upravit, aby bylo možné nastavit utilitu dnsmasq ve vašem systému.

Použijte tento příkaz pro otevření a úpravu konfiguračního souboru.

nano /etc/dnsmasq.conf

Konfigurační soubor je nutné upravovat s právy roota. Stačí vymazat veškerý obsah souboru včetně komentářů a zkopírovat, vložit a uložit toto konfigurační nastavení.

port=53
domain-needed
bogus-priv
listen-address=127.0.0.1
expand-hosts
domain=geek-demo.com
cache-size=1000

Rádi bychom vám stručně popsali význam jednotlivých parametrů.

  • Port – Určení portu, který Dnsmasq bude používat pro příjem DNS požadavků.
  • domain-needed – Přesměrovává pouze názvy domén na upstream DNS server.
  • bogus-priv – Zabraňuje přesměrovávání domén a portů.
  • listen-address – Definuje adresu jmenného serveru. Pro nastavení lokálního DNS serveru se jako výchozí obvykle používá localhost.
  • domain – Konfigurace domén, které dnsmasq přidává ke krátkým identifikátorům.
  • cache-size – Maximální velikost DNS cache povolená v úložišti.

Po provedení všech potřebných změn uložte a zavřete konfigurační soubor. Dalším krokem je úprava souboru /etc/resolv.conf a přidání adresy lokálního hostitele. Pomocí níže uvedeného příkazu otevřete nano editor.

nano /etc/resolv.conf

Zde najdete seznam všech jmenných serverů, které váš systém používá pro rozlišení adres. Do tohoto seznamu přidejte i adresu zpětné smyčky. Přidejte „nameserver 127.0.0.1“ a umístěte ho na první řádek.

Uložte a zavřete konfigurační soubor. Aby se aktualizované nastavení projevilo, restartujte utilitu dnsmasq.

systemctl restart dnsmasq

Testování místního DNS Cache serveru

Testování lokálního DNS serveru je jednoduché. Otevřete příkazový řádek a pomocí příkazu dig zkontrolujte ukládání do mezipaměti DNS. Když spustíte příkaz dig poprvé, výsledek bude standardní.

┌──(root💀kali)-[/home/writer]
└─# dig etechblog.cz.com                                                                                     1 ⚙

; <<>> DiG 9.18.0-2-Debian <<>> etechblog.cz.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 623
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;etechblog.cz.com.                 IN      A

;; ANSWER SECTION:
etechblog.cz.com.          227     IN      A       172.66.43.163
etechblog.cz.com.          227     IN      A       172.66.40.93

;; Query time: 31 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sat Oct 15 07:52:49 EDT 2022
;; MSG SIZE  rcvd: 74

Zde si všimněte, že doba dotazu je přibližně 31 ms pro získání informací z upstream jmenného serveru. Zadejte stejný příkaz dig ještě jednou a zaznamenáte výrazné snížení doby dotazu.

┌──(root💀kali)-[/home/writer]
└─# dig etechblog.cz.com                                                                                     1 ⚙

; <<>> DiG 9.18.0-2-Debian <<>> etechblog.cz.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21942
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;etechblog.cz.com.                 IN      A

;; ANSWER SECTION:
etechblog.cz.com.          281     IN      A       172.66.40.93
etechblog.cz.com.          281     IN      A       172.66.43.163

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sat Oct 15 07:58:10 EDT 2022
;; MSG SIZE  rcvd: 74

V tomto případě je doba dotazu 0 ms. Je to proto, že po provedení prvního vyhledávání dnsmasq uložil data do mezipaměti a veškerá následná vyhledávání proběhla okamžitě díky využití uložené cache. Pokud chcete vymazat uloženou DNS mezipaměť, je nutné dnsmasq restartovat.

Závěr

V tomto článku jsme si ukázali, jak nastavit a konfigurovat dnsmasq pro fungování jako lokální DNS server. Možná vás bude zajímat také postup, jak změnit DNS servery pro rychlejší procházení v různých operačních systémech.