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 🙂