GNU/Linux >> Znalost Linux >  >> Ubuntu

Nastavte Local DNS Resolver na Ubuntu 20.04 s BIND9

Tento tutoriál vám ukáže, jak nastavit místní překladač DNS na Ubuntu 20.04 pomocí široce používaného softwaru DNS BIND9. Překladač DNS je znám pod mnoha názvy, z nichž některé jsou uvedeny níže. Všechny odkazují na stejnou věc.

  • úplný resolver (na rozdíl od stub resolveru)
  • Rekurzor DNS
  • rekurzivní server DNS
  • rekurzivní překladač

Uvědomte si také, že DNS server může být také nazýván jmenným serverem. Příklady DNS resolveru jsou 8.8.8.8 (veřejný DNS server Google) a 1.1.1.1 (veřejný DNS server Cloudflare). OS na vašem počítači má také resolver, i když se kvůli jeho omezené schopnosti nazývá stub resolver. Překladač stub je malý klient DNS v počítači koncového uživatele, který přijímá požadavky DNS z aplikací, jako je Firefox, a předává požadavky rekurzivnímu překladači. Téměř každý překladač dokáže ukládat odpovědi DNS do mezipaměti pro zlepšení výkonu, proto se jim také říká caching DNS server.

Proč provozovat svůj vlastní lokální DNS Resolver

Normálně váš počítač nebo router používá DNS resolver vašeho ISP k dotazování na DNS jména, tak proč spouštět lokální DNS resolver?

  • Může to urychlit vyhledávání DNS, protože místní překladač DNS poslouchá pouze vaše požadavky DNS a neodpovídá na požadavky DNS jiných lidí, takže máte mnohem větší šanci získat odpovědi DNS přímo z mezipaměti překladače. Síťová latence mezi vaším počítačem a překladačem DNS je eliminována (téměř nulová), takže dotazy DNS lze odesílat na kořenové servery DNS rychleji.
  • Pokud provozujete poštovní server a k blokování spamu používáte černé listiny DNS (DNSBL), měli byste spustit svůj vlastní překladač DNS, protože některé černé listiny DNS, jako je URIBL, odmítají požadavky od veřejných překladačů DNS.
  • Pokud provozujete svůj vlastní server VPN na VPS (virtuálním privátním serveru), je také dobrým zvykem nainstalovat na stejné VPS překladač DNS.
  • Pokud se vám nelíbí, že se vaše historie procházení internetu ukládá na serveru třetí strany, můžete také chtít spustit svůj vlastní překladač DNS.

Pokud vlastníte web a chcete, aby váš vlastní server DNS řešil překlad názvu vaší domény namísto použití serveru DNS vašeho registrátora domény, budete muset nastavit autoritativní server DNS, který se liší od překladače DNS. BIND může fungovat jako autoritativní DNS server a DNS resolver současně, ale je dobrým zvykem oddělit dvě role v různých boxech .

Tento návod ukazuje, jak nastavit lokální DNS resolver, a protože bude použit na localhost/lokální síti, není potřeba žádné šifrování (DNS přes TLS nebo DNS přes HTTPS). Nastavení DoT resolveru nebo DoH resolveru bude probráno v budoucím článku.

Nápověda :Local neznamená váš domácí počítač. Spíše to znamená, že DNS resolver běží na stejném boxu jako DNS klient. BIND DNS resolver si můžete nainstalovat na svůj domácí počítač. Je to místní na vašem domácím počítači. Překladač DNS BIND můžete nainstalovat na cloudový server a je lokální na cloudovém serveru.

Nastavit Local DNS Resolver na Ubuntu 20.04 s BIND9

BIND (Berkeley Internet Name Domain) je open-source serverový software DNS široce používaný na Unix/Linux díky své stabilitě a vysoké kvalitě. Původně jej vyvinula UC Berkeley a později v roce 1994 byl jeho vývoj převeden na Internet Systems Consortium, Inc (ISC).

Spusťte následující příkaz a nainstalujte BIND 9 na Ubuntu 20.04 z výchozího úložiště. BIND 9 je aktuální verze a BIND 10 je mrtvý projekt.

sudo apt update
sudo apt install bind9 bind9utils bind9-dnsutils bind9-doc bind9-host

Zkontrolujte verzi.

named -v

Ukázkový výstup:

BIND 9.16.1-Ubuntu (Stable Release) <id:d497c32>

Chcete-li zkontrolovat číslo verze a možnosti sestavení, spusťte

named -V

Ve výchozím nastavení se BIND automaticky spustí po instalaci. Jeho stav zkontrolujete pomocí:

systemctl status named

Pokud neběží, spusťte jej pomocí:

sudo systemctl start named

A povolit automatické spuštění při spouštění:

sudo systemctl enable named

Server BIND poběží jako bind user, který je vytvořen během instalace a naslouchá na TCP a UDP portu 53, jak můžete vidět spuštěním následujícího příkazu:

sudo netstat -lnptu | grep named

DNS dotazy se obvykle odesílají na UDP port 53. TCP port 53 je pro odpovědi větší než 512 bajtů.

Démon BIND se nazývá named . (Démon je část softwaru, která běží na pozadí.) named binární se instaluje pomocí bind9 balíček a je tu další důležitá binární hodnota:rndc , vzdálený řadič démona, který je nainstalován pomocí bind9utils balík. rndc binární se používá k opětovnému načtení/zastavení a ovládání dalších aspektů démona BIND. Komunikace probíhá přes TCP port 953.

Můžeme například zkontrolovat stav jmenného serveru BIND.

sudo rndc status

Konfigurace pro místní překladač DNS

/etc/bind/ je adresář, který obsahuje konfigurace pro BIND.

  • named.conf :primární konfigurační soubor, který obsahuje konfigurace tří dalších souborů.
  • db.127 :localhost soubor zóny reverzního mapování IPv4.
  • db.local :localhost forwarding IPv4 and IPv6 maping zone file.
  • db.empty :prázdný soubor zóny

Balíček bind9 na Ubuntu 20.04 se nedodává s db.root nyní používá kořenový soubor hints na /usr/share/dns/root.hints . Kořenové rady soubor je používán překladači DNS k dotazování kořenových serverů DNS. Existuje 13 skupin kořenových serverů DNS z a.root-servers.net na m.root-servers.net .

Server BIND9 na Ubuntu poskytuje rekurzivní službu pouze pro localhost a klienty místní sítě. Vnější dotazy budou zamítnuty. Nemusíte tedy upravovat konfigurační soubory. Abyste se seznámili s konfiguracemi BIND 9, ukážu vám, jak službu rekurze přesto povolit.

Hlavní konfigurační soubor BIND /etc/bind/named.conf získává nastavení ze 3 dalších souborů.

  • /etc/bind/named.conf.options
  • /etc/bind/named.conf.local
  • /etc/bind/named.conf.default-zones

Chcete-li povolit službu rekurze, upravte první soubor.

sudo nano /etc/bind/named.conf.options

V options doložku, přidejte následující řádky. Nahraďte IP adresy v allow-recursion výpis s vašimi vlastními adresami místní sítě.

 // hide version number from clients for security reasons.
 version "not currently available";

 // optional - BIND default behavior is recursion
 recursion yes;

 // provide recursion service to trusted clients only
 allow-recursion { 127.0.0.1; 192.168.0.0/24; 10.10.10.0/24; };

 // enable the query log
 querylog yes;

Uložte a zavřete soubor. Poté otestujte syntaxi konfiguračního souboru.

sudo named-checkconf

Pokud je test úspěšný (indikováno tichým výstupem), restartujte BIND9.

sudo systemctl restart named

Pokud máte na serveru BIND spuštěný firewall UFW, musíte otevřít port 53, aby klienti LAN mohli odesílat dotazy DNS.

sudo ufw allow in from 192.168.0.0/24 to any port 53

Tím se otevře port TCP a UDP 53 do privátní sítě 192.168.0.0/24. Potom z jiného počítače ve stejné síti LAN můžeme spustit následující příkaz k dotazu na záznam A google.com. Nahraďte 192.168.0.102 IP adresou vašeho BIND resolveru.

dig A google.com @192.168.0.102

Nyní na překladači BIND zkontrolujte protokol dotazů pomocí následujícího příkazu.

sudo journalctl -eu named

Zobrazí se nejnovější zpráva protokolu servisní jednotky bind9. V protokolu jsem našel následující řádek, který označuje, že dotaz DNS na záznam A google.com byl přijat z portu 57806 z 192.168.0.103.

named[1162]: client @0x7f4d2406f0f0 192.168.0.103#57806 (google.com): query: google.com IN A +E(0)K (192.168.0.102)

Nastavení výchozího překladače DNS na serveru Ubuntu 20.04

Systemd-resolved poskytuje stub resolver na Ubuntu 20.04. Jak bylo zmíněno na začátku tohoto článku, stub resolver je malý klient DNS v počítači koncového uživatele, který přijímá požadavky DNS z aplikací, jako je Firefox, a předává požadavky rekurzivnímu resolveru.

Pomocí tohoto příkazu lze zobrazit výchozí rekurzivní překladač.

systemd-resolve --status

Tip:Pokud se výše uvedený příkaz neukončí okamžitě, můžete jej ukončit stisknutím klávesy Q.

Jak můžete vidět, BIND není výchozí. Pokud na serveru BIND spustíte následující příkaz,

dig A facebook.com

Tento DNS dotaz nelze najít v protokolu BIND. Místo toho musíte explicitně říci dig, aby použil BIND.

dig A facebook.com @127.0.0.1

Chcete-li nastavit BIND jako výchozí překladač, otevřete konfigurační soubor systemd-resolved.

sudo nano /etc/systemd/resolved.conf

V [Resolve] oddílu, přidejte následující řádek. Tím nastavíte globální server DNS pro váš server.

DNS=127.0.0.1

Uložte a zavřete soubor. Poté restartujte službu systemd-resolved.

sudo systemctl restart systemd-resolved

Nyní spusťte následující příkaz a zkontrolujte výchozí překladač DNS.

systemd-resolve --status

Nyní proveďte DNS dotaz bez zadání 127.0.0.1 .

dig A facebook.com

Dotaz DNS uvidíte v protokolu BIND, což znamená, že BIND je nyní výchozí rekurzivní překladač. Pokud v protokolu BIND nevidíte žádné dotazy, možná budete muset nakonfigurovat server DNS pro jednotlivé odkazy.

Konfigurace serveru DNS Per-Link na Ubuntu 20.04

Můžete také nakonfigurovat server DNS pro jednotlivé odkazy, který přepíše globální server DNS. Existují dva způsoby konfigurace serverů DNS pro jednotlivé odkazy:

  • přes systemd-resolved
  • přes netplan

vyřešeno systemd

Seznam souborů pod /etc/systemd/network/ adresář.

ls /etc/systemd/network/

Ukázkový výstup:

05-eth0.network  99-default.link

Jak vidíte, mám dva konfigurační soubory odkazu. 05-eth0.network soubor je pro mé hlavní síťové rozhraní, takže tento soubor upravuji.

sudo nano /etc/systemd/network/05-eth0.network

Váš název souboru se může lišit. Pokud v tomto adresáři nejsou žádné soubory, pak vaše konfigurace DNS pro jednotlivé odkazy není řízena systemd-resolved .

Zakomentujte výchozí záznam DNS a domény a přidejte svůj vlastní záznam DNS.

DNS=127.0.0.1

Uložte a zavřete soubor. Poté restartujte systemd-resolved a systemd-networkd službu.

sudo systemctl restart systemd-resolved systemd-networkd

netplan

Některé servery Ubuntu mohou používat netplan ke konfiguraci sítě pro jednotlivé odkazy. V tomto případě musíte nakonfigurovat DNS server v .yaml soubor pod /etc/netplan/ adresář. Seznam souborů v tomto adresáři.

ls /etc/netplan/

Ukázkový výstup:

01-netcfg.yaml

Upravuji tedy tento soubor.

sudo nano /etc/netplan/01-netcfg.yaml

Nastavte adresu DNS serveru v nameservers sekce.

      nameservers:
        search: [ invalid ]
        addresses:
                - 127.0.0.1

Můžete zadat více překladačů DNS, jak je uvedeno níže, což může snížit pravděpodobnost selhání DNS.

      nameservers:
        search: [ invalid ]
        addresses:
                - 127.0.0.1
                - 8.8.8.8
                - 1.1.1.1

Uložte a zavřete soubor. Poté aplikujte změnu.

sudo netplan apply

Poznámka: Pokud se zobrazí následující chybová zpráva, netplan nemůže zpracovat konfigurační soubor.

Invalid YAML at /etc/netplan/01-netcfg.yaml  inconsistent indentation

Měli byste opravit nekonzistentní odsazení a spustit sudo netplan apply příkaz znovu.

Odstraňování problémů

Zkontrolujte obsah /etc/resolv.conf .

cat /etc/resolv.conf

Jak můžete vidět, 127.0.0.1 (BIND) je výchozím DNS resolverem. Pokud vidíte jinou hodnotu, znamená to, že BIND stále není vaším výchozím překladačem DNS. K nastavení BIND jako výchozího resolveru můžete použít nástroj resolveconf.

Nainstalujte resolvconf balíček

sudo apt install resolvconf

Poté spusťte named-resolvconf službu.

sudo systemctl start named-resolvconf.service

Povolit automatické spouštění při spouštění.

sudo systemctl enable named-resolvconf.service

Nyní zkontrolujte /etc/resolv.conf soubor znovu. BIND by nyní měl být výchozím DNS resolverem na vašem serveru Ubuntu.

cat /etc/resolv.conf

Upozorňujeme, že někteří poskytovatelé hostingu, jako je Linode, mohou k automatickému generování souboru /etc/resolv.conf použít síťového pomocníka. soubor. Chcete-li změnit výchozí překladač DNS, musíte vypnout tohoto síťového pomocníka v ovládacím panelu hostitele.

Pokud tato metoda stále nefunguje, možná je to způsobeno tím, že /etc/resolv.conf soubor na vašem serveru Ubuntu není symbolický odkaz na /run/resolvconf/resolv.conf . Musíte smazat /etc/resolv.conf soubor a vytvořte symbolický odkaz.

sudo rm /etc/resolv.conf

sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf

Tento soubor můžete také vytvořit ručně a nastavit jej pouze pro čtení, abyste zabránili přepsání jinými aplikacemi na stejném serveru.

sudo rm /etc/resolv.conf

echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf

sudo chmod 444 /etc/resolv.conf

systemd-resolved neběží

Pokud se po provedení systemd-resolve --status zobrazí následující chyba příkaz,

Failed to get global data: Unit dbus-org.freedesktop.resolve1.service not found.

Může být systemd-resolved neběží. Začněte s:

sudo systemctl status systemd-resolved

Povolit automatické spouštění.

sudo systemctl enable systemd-resolved

Nastavení výchozího překladače DNS na klientských počítačích

Na ploše Ubuntu můžete podle výše uvedených pokynů nastavit výchozí překladač DNS, ale nezapomeňte nahradit 127.0.0.1 IP adresou serveru BIND. Kroky nastavení výchozího překladače DNS v systémech MacOS a Windows lze nalézt na internetu.

Jak deaktivovat IPv6 v BIND

Pokud ve své síti nepoužíváte IPv6, pak je dobré vypnout IPv6 v BIND, jinak bude v protokolu BIND spousta chyb o IPv6, jak je uvedeno níže.

network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2001:4178:2:1269:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/A/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53
network unreachable resolving 'mirrors.fedoraproject.org/AAAA/IN': 2610:28:3090:3001:dead:beef:cafe:fed5#53

Chcete-li zakázat IPv6 v BIND na Ubuntu, jednoduše otevřete /etc/default/named soubor

sudo nano /etc/default/named

Přidejte -4 na MOŽNOSTI.

OPTIONS="-u bind -4"

Uložte a zavřete soubor. Poté restartujte BIND a máte hotovo.

sudo systemctl restart named

BIND SERVFAIL

Pokud váš překladač BIND nemůže odpovídat na dotazy DNS (SERVFAIL) a v protokolu BIND vidíte následující řádek.

dnssec: warning: managed-keys-zone: Unable to fetch DNSKEY set '.': timed out

Je to pravděpodobně proto, že váš server nemá funkční připojení IPv6. Stalo se to jednomu z mých serverů. Myslel jsem, že konektivita IPv6 funguje jako obvykle, ale náhle se přerušila z důvodů, které jsem nevěděl. Jakmile jsem zakázal IPv6 v BIND, překlad DNS opět funguje.

Pojmenovaný automatický restart

Pokud je z jakéhokoli důvodu váš pojmenovaný proces zabit, musíte jej restartovat spuštěním následujícího příkazu.

sudo systemctl restart named

Místo ručního zadávání tohoto příkazu můžeme zajistit, aby se Named automaticky restartoval úpravou named.service systémovou servisní jednotku. Abychom přepsali výchozí konfiguraci služby systemd, vytvoříme samostatný adresář.

sudo mkdir -p /etc/systemd/system/named.service.d/

Poté vytvořte soubor v tomto adresáři.

sudo nano /etc/systemd/system/named.service.d/restart.conf

Přidejte do souboru následující řádky, čímž se Named automaticky restartuje 5 sekund po zjištění selhání.

[Service]
Restart=always
RestartSec=5s

Uložte a zavřete soubor. Poté znovu načtěte systemd.

sudo systemctl daemon-reload

Chcete-li zkontrolovat, zda by to fungovalo, zabijte Named with:

sudo pkill named

Poté zkontrolujte stav Pojmenování. Zjistíte, že se Named automaticky restartuje.

systemctl status named

BIND max-cache-size

BIND může ukládat výsledky DNS do mezipaměti na serveru, aby urychlil vyhledávání DNS pro klienty. BIND předpokládá, že používáte vyhrazený překladač DNS, tj. na stejném hostiteli neběží žádné jiné webové služby, takže výchozí velikost mezipaměti (definovaná pomocí max-cache-size ) je nastaveno na 90 % celkové paměti RAM pro dosažení nejlepšího výkonu. V protokolu BIND můžete vidět řádek jako níže (sudo journalctl -eu named ), když se spustí BIND.

none:100: 'max-cache-size 90%' - setting to 7165MB (out of 7961MB)

Pamatujte, že BIND nevyužije 90 % vaší RAM okamžitě. Pokud existuje pouze několik požadavků DNS, BIND používá pouze malé množství paměti RAM, protože není mnoho výsledků DNS k ukládání do mezipaměti. Pokud existuje mnoho požadavků DNS, použije se k uložení mezipaměti DNS mnoho paměti RAM.

Pokud je vaše RAM omezená, možná nebudete chtít, aby BIND používal 90 % vaší RAM pro mezipaměť. Upravte konfigurační soubor BIND /etc/bind/named.conf.options .

sudo nano /etc/bind/named.conf.options

Přidejte následující direktivu do options doložka. Změňte 50 % na preferovanou hodnotu.

max-cache-size 50%;

Restartujte BIND, aby se změna projevila.

sudo systemctl restart named

Poznámka :Když restartujete BIND, celá jeho mezipaměť bude vyprázdněna.

Nebyly dostupné žádné servery

Pokud se při použití příkazu dig na klientských počítačích zobrazí následující chyba

;; connection timed out; no servers could be reached

Mohlo by to být tím

  • Vaše pravidlo brány firewall je nesprávné. Zkontrolujte protokol brány firewall.
  • Překladač BIND neběží.
  • BIND nenaslouchá na síťovém rozhraní.
  • Můžete pingnout z klienta DNS na DNS resolver?

Závěr

Doufám, že vám tento návod pomohl nastavit místní DNS resolver na Ubuntu 20.04 s BIND9. Jako vždy, pokud vám tento příspěvek přišel užitečný, přihlaste se k odběru našeho bezplatného zpravodaje, kde získáte další tipy a triky. Opatruj se 🙂


Ubuntu
  1. Jak nastavit Local DNS Resolver pomocí Dnsmasq na Ubuntu 20.04

  2. Jak nastavit bránu firewall s UFW na Ubuntu 16.04

  3. Jak nastavit Unbound DNS Resolver na Ubuntu 20.04

  1. Jak nastavit bránu firewall s UFW na Ubuntu 18.04

  2. Jak nastavit DNS Nameserver na Ubuntu 20.04

  3. Prohledejte místní síť pomocí arp-scan na ubuntu

  1. Jak nastavit DNS Nameservery na Ubuntu 18.04

  2. Jak nastavit bránu firewall s UFW na Ubuntu 20.04

  3. Jak nakonfigurovat server DNS na Ubuntu 18.04 / Ubuntu 16.04