Tento tutoriál vám ukáže, jak nastavit a spustit svůj vlastní autoritativní jmenný server na Ubuntu 18.04/16.04 s široce používaným softwarem BIND 9.
Poznámka :Tento tutoriál ukazuje metodu příkazového řádku. Pokud chcete upravovat záznamy DNS z webového grafického rozhraní, doporučuji nastavit autoritativní servery DNS pomocí Webmin, což je bezplatný ovládací panel serveru s otevřeným zdrojovým kódem.
Co je to autoritativní server DNS?
Pokud vlastníte název domény 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.
Autoritativní server DNS používají vlastníci názvů domén k ukládání záznamů DNS. Poskytuje autoritativní odpovědi na DNS resolvery (jako 8.8.8.8 nebo 1.1.1.1), které zjišťují DNS záznamy jménem koncových uživatelů na PC, smartphonu nebo tabletu.
O BIND
BIND (Berkeley Internet Name Domain) je open-source, flexibilní a plně vybavený DNS software š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).
BIND může fungovat jako autoritativní DNS server pro zónu a DNS resolver současně. Překladač DNS může být také nazýván rekurzivním jmenným serverem, protože provádí rekurzivní vyhledávání pro místní klienty. Zastávat dvě role současně však není výhodné. Je dobrým zvykem oddělit dvě role na dvou různých počítačích.
V předchozím článku jsem vysvětlil kroky nastavení místního DNS resolveru na Ubuntu 18.04/16.04. Tento tutoriál vám ukáže, jak nastavit BIND9 na Ubuntu 18.04/16.04 jako autoritativní server DNS se zakázanou rekurzí.
Předpoklady
Abyste mohli postupovat podle tohoto návodu, měli byste mít již zakoupené doménové jméno. Zaregistroval jsem své doménové jméno na NameCheap, protože cena je nízká a poskytují ochranu soukromí whois doživotně zdarma.
Potřebujete také dva servery. Jeden server je pro hlavní server DNS a druhý je pro podřízený server DNS. V ideálním případě by dva servery měly být na různých fyzických místech. Pokud je jeden server DNS offline, druhý server DNS může stále odpovídat na dotazy DNS na název vaší domény.
Každý server potřebuje pouze 512 MB RAM a zde jsou poskytovatelé hostingu, které doporučuji. Použil jsem je všechny.
- Vultr:Začněte na 2,5 $ měsíčně. Je vyžadována kreditní karta. Můžete si vytvořit účet na Vultr přes můj odkaz na doporučení a získat kredit 50 $ zdarma.
- DigitalOcean:Začíná na 5 $ měsíčně. Není vyžadována žádná kreditní karta. Můžete použít Paypal. Můžete si vytvořit účet na DigitalOcean přes můj odkaz na doporučení a získat kredit 50 $ zdarma.
Jakmile si zakoupíte dva servery, nainstalujte na ně Ubuntu a postupujte podle pokynů níže.
Nastavte autoritativní server DNS na Ubuntu 18.04/16.04 s BIND9
Příkazy v této sekci musíte spouštět na obou serverech.
Přihlaste se na dva servery přes SSH a spusťte následující příkazy k instalaci BIND 9 na Ubuntu 18.04/16.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-doc
Zkontrolujte číslo verze.
named -v
Ukázkový výstup:
BIND 9.11.3-1ubuntu1.3-Ubuntu (Extended Support Version) <id:a375815>
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 bind9
Pokud neběží, spusťte jej pomocí:
sudo systemctl start bind9
A povolit automatické spuštění při spouštění:
sudo systemctl enable bind9
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
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
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
Server BIND9 na Ubuntu poskytuje rekurzivní službu pro localhost a klienty místní sítě. Protože nastavujeme autoritativní server DNS, musíme deaktivovat rekurzi. Upravte /etc/bind/named.conf.options
soubor.
sudo nano /etc/bind/named.conf.options
Přidejte následující řádky do options {...};
doložka.
// hide version number from clients for security reasons. version "not currently available"; // disable recursion on authoritative DNS server. recursion no; // enable the query log querylog yes; // disallow zone transfer allow-transfer { none; };
Technicky vzato, stačí přidat recursion no;
zakázat rekurzi, ale je dobrým zvykem přidat další 3 direktivy. Uložte a zavřete soubor. Poté restartujte BIND.
sudo systemctl restart bind9
Konfigurace hlavního serveru DNS
Vyberte jeden ze dvou serverů jako hlavní server DNS. Pojmenujeme jej ns1.example.com
.
Hlavní server DNS obsahuje hlavní kopii souboru zóny. Na tomto serveru se provádějí změny DNS záznamů. Doména může mít jednu nebo více zón DNS. Každá zóna DNS má soubor zóny, který obsahuje každý záznam DNS v této zóně. Pro jednoduchost tento článek předpokládá, že ke správě všech DNS záznamů pro název vaší domény chcete používat jedinou zónu DNS.
/etc/bind/named.conf.default-zones
definuje kořenovou zónu a zónu localhost. Chcete-li přidat zónu pro název své domény, upravte /etc/bind/named.conf.local
soubor.
sudo nano /etc/bind/named.conf.local
Přidejte do tohoto souboru následující řádky. Nahraďte example.com svým vlastním názvem domény. Nahraďte 12.34.56.78 IP adresou podřízeného DNS serveru.
zone "example.com" { type master; file "/etc/bind/db.example.com"; allow-query { any; }; allow-transfer { 12.34.56.78; }; };
Ve výše uvedené konfiguraci jsme vytvořili novou zónu s zone
klauzule a uvedli jsme, že se jedná o hlavní zónu. Soubor zóny je /etc/bind/db.example.com
, kam přidáme DNS záznamy. Zónový přenos bude povolen pouze pro podřízený DNS server. Uložte a zavřete soubor.
Místo vytvoření souboru zóny od začátku můžeme použít soubor šablony zóny. Zkopírujte obsah db.empty
do nového souboru.
sudo cp /etc/bind/db.empty /etc/bind/db.example.com
Soubor zóny může obsahovat 3 typy záznamů:
- Komentáře :začíná středníkem (;)
- Směrnice :začíná znakem dolaru ($)
- Záznamy zdrojů :aka DNS záznamy
Soubor zóny se obvykle skládá z následujících typů záznamů DNS.
- Záznam SOA (Start of Authority) :definuje klíčové charakteristiky zóny. Je to první záznam DNS v souboru zóny a je povinný.
- Záznam NS (Name Server) :určuje, které servery se používají k ukládání záznamů DNS a odpovídání na dotazy DNS na název domény. V souboru zóny musí být alespoň dva záznamy NS.
- Záznam MX (Mail Exchanger) :určuje, kteří hostitelé jsou zodpovědní za doručování e-mailů pro název domény.
- Záznam (adresy) :Převádí názvy DNS na adresy IPv4.
- AAAA (Quad A) záznam :Převádí názvy DNS na adresy IPv6.
- Záznam CNAME (kanonický název) :Používá se k vytvoření aliasu pro název DNS.
- Záznam TXT :SPF, DKIM, DMARC atd.
Nyní upravíme soubor zóny.
sudo nano /etc/bind/db.example.com
Ve výchozím nastavení to vypadá takto:
Místo toho to můžete změnit na toto.
Kde
$TTL
direktiva definuje výchozí Time to Live hodnota pro zónu, což je doba, po kterou může být záznam DNS uložen do mezipaměti v překladači DNS. Tato směrnice je povinná. Čas je uveden v sekundách.$ORIGIN
směrnice definuje základní doménu.- Názvy domén musí končit tečkou (.), což je kořenová doména. Když název domény končí tečkou, jedná se o plně kvalifikovaný název domény (FQDN).
- Symbol @ odkazuje na základní doménu.
IN
je třída DNS. Zkratka znamená Internet. Jiné třídy DNS existují, ale používají se zřídka.
První záznam v souboru zóny je záznam SOA (Start of Authority). Tento záznam obsahuje následující informace:
- Hlavní server DNS .
- E-mailová adresa správce zóny . RFC 2142 doporučuje e-mailovou adresu [e-mail chráněný] . V souboru zóny má tato e-mailová adresa tento tvar:hostitel.example.com protože symbol @ má v souboru zóny zvláštní význam.
- Sériové číslo zóny . Sériové číslo je způsob sledování změn v zóně podřízeným serverem DNS. Podle konvence má sériové číslo formát data:
yyyymmddss
, kde yyyy je čtyřmístné číslo roku, mm je měsíc, dd je den a ss je pořadové číslo dne. Při provádění změn v souboru zóny musíte aktualizovat sériové číslo. - Hodnota obnovení . Po dosažení obnovovací hodnoty se podřízený server DNS pokusí přečíst záznam SOA z hlavního serveru DNS. Pokud se sériové číslo zvýší, zahájí se přenos zóny.
- Hodnota opakování . Definuje interval opakování v sekundách, pokud se podřízenému serveru DNS nepodaří připojit k hlavnímu serveru DNS.
- Vypršení platnosti :Pokud se podřízenému serveru DNS po tuto dobu nedaří navázat kontakt s hlavním serverem DNS, podřízený server přestane odpovídat na dotazy DNS pro tuto zónu.
- Záporné TTL mezipaměti :Definuje hodnotu doby do aktivace odpovědí DNS pro neexistující názvy DNS (NXDOMAIN).
Záznamy TXT jsou obvykle uzavřeny do dvojitých uvozovek. Pokud přidáte záznam DKIM, musíte hodnotu také uzavřít do závorek.
Uložte a zavřete soubor. Poté spusťte následující příkaz a zkontrolujte, zda v hlavním konfiguračním souboru nejsou syntaktické chyby. Tichý výstup znamená, že nebyly nalezeny žádné chyby.
sudo named-checkconf
Poté zkontrolujte syntaxi souborů zóny.
sudo named-checkzone example.com /etc/bind/db.example.com
Pokud jsou v souboru zóny syntaktické chyby, musíte je opravit, jinak se zóna nenačte. Následující zpráva označuje, že neexistují žádné syntaktické chyby.
zone example.com/IN: loaded serial 2019011503 OK
Poté restartujte BIND9.
sudo systemctl restart bind9
Pokud používáte nekomplikovaný firewall (UFW), otevřete TCP a UDP port 53.
sudo ufw allow 53/tcp sudo ufw allow 53/udp
Pokud používáte přímo firewall iptables, spusťte následující příkaz.
sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT sudo iptables -A INPUT -p udp --dprot 53 -j ACCEPT
Konfigurace podřízeného serveru DNS
Nyní použijeme druhý server jako podřízený DNS server, který se bude jmenovat ns2.example.com
.
Nejprve upravte named.conf.local
soubor.
sudo nano /etc/bind/named.conf.local
Přidejte zónu jako níže. Nahraďte 12.34.56.78 IP adresou hlavního serveru DNS.
zone "example.com" { type slave; file "db.example.com"; allow-query { any; }; masters { 12.34.56.78; }; };
Ve výše uvedené konfiguraci jsme uvedli, že se jedná o podřízený server DNS pro example.com
zóny a bude přijímat zónové přenosy pouze z důvěryhodné IP adresy.
Uložte a zavřete soubor. Poté spusťte následující příkaz a zkontrolujte, zda v hlavním konfiguračním souboru nejsou syntaktické chyby.
sudo named-checkconf
Pokud nejsou nalezeny žádné chyby, restartujte BIND9.
sudo systemctl restart bind9
Soubor zóny na podřízeném serveru DNS se načte z přenosu zóny, který se používá k synchronizaci změn záznamů DNS z hlavního serveru DNS na podřízený server DNS. Po restartu BIND9 se okamžitě spustí přenos zóny. Zkontrolujte protokol BIND9 pomocí následujícího příkazu.
sudo journalctl -eu bind9
Můžete vidět zprávy jako níže, které indikují, že přenos zóny byl úspěšný.
named[31518]: transfer of 'example.com/IN' from 12.34.56.78#53: Transfer completed: 1 messages, 16 records, 886 bytes, 0.004 secs (221500 bytes/sec)
Soubor zóny bude uložen jako /var/cache/bind/db.example.com
.
Pokud používáte nekomplikovaný firewall (UFW), otevřete TCP a UDP port 53.
sudo ufw allow 53/tcp sudo ufw allow 53/udp
Pokud používáte přímo firewall iptables, spusťte následující příkaz.
sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT
Další informace o Zone Transfer
Podřízený DNS server se znovu spojí s hlavním serverem, když je dosaženo doby aktualizace v záznamu SOA, a pokud je sériové číslo na hlavním serveru větší než na podřízeném, bude zahájen přenos zóny. Existují dva typy zónových přenosů:
- Přenos plné zóny (AXFR):Přenese se úplná kopie souboru zóny.
- Přírůstkový přenos zóny (IXFR):Přenášejí se pouze změněné záznamy DNS.
Oba typy přenosu zóny používají port TCP 53. Ve výchozím nastavení bude BIND na podřízeném serveru DNS požadovat přírůstkový přenos zóny a BIND na hlavním serveru DNS povolí přírůstkový přenos zóny pouze v případě, že je zóna dynamická.
Interval přenosu zóny je hlavním faktorem rychlosti šíření změn DNS záznamů. Místo čekání, až podřízený DNS server naváže kontakt, BIND master oznámí podřízenému, když jsou v zóně provedeny změny. To může výrazně zkrátit dobu šíření změn zón do Internetu.
Reverzní zóna
Reverzní zóna obsahuje záznam PTR, který mapuje IP adresu na název DNS. Je to protějšek DNS A záznamu. Záznam PTR je často nezbytný pro to, aby poštovní servery prošly spamovými filtry. Tento záznam nepatří do domény. Musíte vytvořit záznam PTR na ovládacím panelu poskytovatele hostingu nebo se zeptat svého ISP, takže se nebudu zabývat vytvářením reverzních zón v BIND.
Změnit záznam NS a vytvořit záznam lepidla
Nyní musíte přejít na web svého registrátora domény a změnit záznam NS pro vaši doménu, aby internet věděl, že nyní používáte svůj vlastní server DNS. Normálně používáte názvy hostitelů v záznamu NS jako ns1.example.com
a ns2.example.com
.
name server 1: ns1.example.com name server 2: ns2.example.com
Pokud máte název domény example.com
a používáte subdoménu pro autoritativní servery DNS (ns1.example.com
a ns2.example.com
), pak musíte také vytvořit spojovací záznam u svého registrátora domény, aby internet mohl znát IP adresu vašeho DNS serveru. Spojovací záznam je záznam A pro ns1.example.com
a ns2.example.com
.
ns1.example.com IP-address-of-master-server ns2.example.com IP-address-of-slave-server
Výše uvedené informace budou odeslány provozovateli registru, který provozuje servery DNS TLD prostřednictvím protokolu EPP (Extensible Provisioning Protocol), aby servery DNS TLD znaly názvy hostitelů a IP adresy autoritativních serverů DNS pro název vaší domény. V závislosti na používaném registrátorovi domény může být váš záznam NS šířen okamžitě nebo může jeho šíření trvat až 24 hodin. Můžete přejít na https://dnsmap.io a zkontrolovat, zda je váš nový záznam NS aktivní.
Ukážu vám, jak to udělat na NameCheap .
Pokud jste si zakoupili název domény u NameCheap, přihlaste se ke svému účtu NameCheap. Vyberte Domain list
na levém postranním panelu a poté klikněte na Spravovat tlačítko zcela vpravo.
Vyberte Advanced DNS .
Přejděte na konec stránky, kde najdete osobní server DNS sekce. Klikněte na Přidat NameServer tlačítko pro přidání vlastních jmenných serverů:ns1.example.com
a ns2.example.com
. Musíte zadat IP adresy vašich jmenných serverů.
Po přidání vašich dvou jmenných serverů klikněte na tlačítko Hledat a zkontrolujte, zda byly úspěšně přidány. Pokud ano, lepené záznamy se objeví ve spodní části této stránky.
Nyní klikněte na Domain
a použijte svůj vlastní server DNS.
V závislosti na používaném registrátorovi domény může být váš záznam NS šířen okamžitě nebo může jeho šíření trvat až 24 hodin. Můžete přejít na https://dnsmap.io a zkontrolovat, zda je váš nový záznam NS aktivní.
Po rozšíření záznamu NS a spojovacího záznamu do Internetu budou vaše servery DNS odpovídat na dotazy DNS pro název vaší domény. Záznam dotazu můžete zkontrolovat pomocí:
sudo journalctl -eu bind9
Můžete také použít dig
nástroj ke kontrole NS záznamu názvu vaší domény.
dig NS example.com
Pokud byly NS záznam a spojovací záznam šířeny na internetu, měli byste vidět své jmenné servery v sekci odpovědí. Pokud vidíte SERVFAIL
chyba, je to pravděpodobně proto, že jste na svých jmenných serverech neotevřeli port UDP 53.
Co byste měli vědět
- Termín
master DNS server
pouze znamená, že tento server ukládá hlavní kopii souboru zóny. Nemá vyšší prioritu, pokud jde o překlad DNS. - Při provádění změn v souboru zóny vždy aktualizujte sériové číslo SOA.
Použití zástupných znaků v souboru zóny BIND
Pokud chcete nasměrovat všechny subdomény na stejnou IP adresu, můžete toho dosáhnout pomocí zástupných znaků. Například na následujícím řádku budou všechny vaše subdomény ukazovat na IP adresu 1.2.3.4.
*.your-domain.com IN A 1.2.3.4
Povolení nástroje Resolver
BIND může fungovat jako autoritativní server DNS pro zónu a překladač DNS ve stejnou dobu. Je dobrým zvykem oddělit dvě role na dvou různých hostitelích a v tomto článku jsme deaktivovali resolver v BIND. Pokud chcete překladač opravdu povolit, postupujte podle pokynů níže.
Upravte konfigurační soubor BIND.
sudo nano /etc/bind/named.conf.options
Najděte následující řádky.
// disable recursion on authoritative DNS server. recursion no;
Změňte je na následující, aby rekurzivní dotazy do vašeho DNS resolveru mohla odesílat pouze důvěryhodná IP adresa a váš server nebude otevřeným resolverem.
// allow recursion for trusted clients only. recursion yes; allow-query { localhost; 12.34.56.78; };
Nahraďte 12.34.56.78 svou vlastní IP adresou. Uložte a zavřete soubor. Ujistěte se, že definice zóny v /etc/bind/named.conf.local
soubor má následující možnost, takže internet může dotazovat záznamy DNS ve vaší zóně.
allow-query { any; };
Poté restartujte BIND.
sudo systemctl restart bind9
Přejděte na https://openresolver.com/ a otestujte, zda je váš server BIND otevřeným resolverem.