Jak už bylo řečeno dříve, různé DNS servery realizují různou funkčnost. V zásadě existují dva základní typy, rekurzivní a autoritativní. Rekurzivní DNS servery realizují pro své klienty vyhledávání v DNS stromu a poskytují jim odpovědi na jejich dotazy. Servery tohoto typu vám bývají poskytovány vaším ISP. Rekurzivní DNS servery provádějí také kešování odpovědí na dotazy.
Kromě rekurzivních serverů existují také tzv. autoritativní DNS servery, což jsou servery, které publikují DNS záznamy určité části DNS stromu, jejíž správa jim byla přidělena. Kupříkladu, pokud byste si zaregistrovali doménu example.org, měli byste kontrolu nad tím, které DNS servery budou obsahovat její autoritativní informace. Na tyto DNS servery by se pak obracely rekurzivní DNS servery, které od nich získají odpověď na DNS dotazy týkající se domény example.org a jejích subdomén.
Různé DNS servery realizují různou funkčnost. Server dnsmasq, probraný v minulém díle, je ve své podstatě pouze kešující DNS server, který nevyřizuje dotazy, pouze je přeposílá (forwarduje) definovaným rekurzivním DNS serverům. Unbound je primárně rekurzivní a kešující DNS server, i když do jisté míry se dá použít i jako autoritativní server. Bind je univerzální DNS server schopný fungovat jako rekurzor i jako autoritativní server. Jedná se o nejznámější DNS server vůbec. Jsou i čistě autoritativní servery, které neumí pracovat jako rekurzory a zaměřují se pouze na publikování autoritativních DNS informací. Příkladem může být KnotDNS, server z dílen CZ.NIC.
Připomínám, že výchozí port pro službu DNS je 53 a komunikace může probíhat jak přes UDP, tak přes TCP.
Unbound
Unbound je především rekurzivní a kešující DNS server. Je schopen provádět DNSSEC validaci, ale neprovádí ji ve výchozím stavu (alespoň v Debianu). Problematikou DNSSEC se zabýval minulý díl seriálu.
Instalaci serveru Unbound realizujete velmi jednoduše:
aptitude install unbound
Po instalaci se server rovnou rozběhne a začne fungovat. Jeho funkčnost si můžete snadno ověřit:
dig @localhost example.org
DNSSEC
Jako první by bylo dobré zapnout DNSSEC validaci. K tomu potřebujete do hlavního konfiguračního souboru /etc/unbound/unbound.conf
přidat informace o souboru obsahujícím klíč kořenové zóny (fungující jako „trust anchor“, tedy „kotva důvěry“):
auto-trust-anchor-file: "/etc/unbound/root.key"
Tento soubor však ve výchozí instalaci neexistuje a je třeba jej vytvořit. Za tímto účelem je nutné si příslušný klíč opatřit a ověřit. Opatřit si jej můžete stažením následujícího souboru:
https://data.iana.org/root-anchors/root-anchors.xml
Jedná se o XML soubor s potřebnými hodnotami. Tyto hodnoty vložte do souboru /etc/unbound/root.key
do jediné řádky, a to dle následujícího klíče:
. IN DS <KeyTag> <Algorithm> <DigestType> <Digest>
Výsledek může vypadat nějak takto:
.IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5
Po uložení souboru Unbound restartujte:
service unbound restart
Následně zkontrolujte, že DNSSEC validace funguje, např. takto:
dig +dnssec org @localhost
Je-li DNSSEC aktivní, měli byste vidět příznak „AD“ v odpovědi:
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 1
Přizpůsobení nastavení Unboundu
Jak je z postupu výše patrné, soubor s konfigurací Unboundu je /etc/unbound/unbound.conf
. Tento soubor je bohatě komentovaný, doporučuji si jej tedy projít a upravit podle vašich potřeb. Základní dvě věci pro úpravu jsou v první řadě rozhraní a IP adresy, na kterých Unbound poslouchá (ve výchozím stavu naslouchá pouze na lokální smyčce, tedy nikoliv na síti), a ve druhé řadě je to řízení přístupu, tj. kdo má právo na vyřizování DNS dotazů.
Specifikace rozhraní, popřípadě IP adres, na kterých Unbound naslouchá, se realizuje takto:
interface: 1.2.3.4 interface: 1.2.3.4@5000 interface: 0.0.0.0 interface: ::0
První řádka zajistí, že Unbound bude naslouchat na IP adrese 1.2.3.4
na standardním portu. Druhá řádka ukazuje, jak byste Unboundu sdělili, aby naslouchal na nestandardním portu (v tomto případě portu 5000). Třetí řádka zajistí, že Unbound bude naslouchat na všech IPv4 rozhraních a adresách. Čtvrtá pak provede totéž, ale v rámci protokolu IPv6.
Druhou podstatnou oblastí je řízení přístupu. Ve výchozím stavu je totiž veškerý přístup zakázán, kromě místní smyčky (localhostu).
access-control: 10.0.1.15 refuse access-control: 10.0.1.0/24 allow
Syntaxe je zde na první pohled jasně patrná – v první řádce se zamítá přístup počítači 10.0.1.15
, druhá řádka pak povoluje přístup ze sítě 10.0.1.0/24
.
Unbound umožňuje i tvorbu místních zón, popřípadě úpravu odpovědí na specifické dotazy. Místní zónu můžete snadno a rychle vytvořit takto:
local-zone: "local." static local-data: "typhoon.local. IN A 10.0.1.27"
První řádek definuje doménu „local“, druhý pak vytváří A záznam pro počítač 10.0.1.27
se jménem typhoon.local.
Nastavení Unboundu jako výchozího rekurzoru pro server
Máte-li funkční rekurzivní DNS server, můžete pro příslušný počítač zajistit, aby DNS dotazy vyřizoval přímo místní rekurzor (na místo DNS serverů poskytovatele). To zajistíte úpravou /etc/resolv.conf
a vložením následujícího záznamu na první řádek:
nameserver 127.0.0.1
Tato úprava zajistí, že se běžící aplikace budou ptát nejprve místního DNS serveru, který bude odpovídat rychleji než servery vašeho ISP. Nevyřadíte-li ostatní záznamy v resolv.conf
, zajistíte tak „fallback“ na některý z dalších serverů, pokud bude váš místní DNS server mimo provoz.
Bind
Bind je univerzální DNS server, umí pracovat jako rekurzor a vyřizovat DNS dotazy (podpora DNSSEC je samozřejmostí), ale umí pracovat také jako autoritativní server.
Jeho instalaci provedete opět velmi jednoduše:
aptitude install bind9
Po instalaci se Bind rozběhne a začne fungovat jako rekurzivní DNS server, což si opět můžete snadno ověřit:
dig @localhost example.org
DNSSEC
Základem je opět opatřit si klíč ke kořenové zóně. Tento klíč můžete získat DNS dotazem:
dig . dnskey . 172758 IN DNSKEY 256 3 8 AwEA AbW4qUZUxSRqUntM9u0pvmkqRB9Z+WRPghllsekdgp8ksT5bwRBE3xwVWJJp JgVYGvFGgLIutrGyZDJVLQX+tu+qe6HJbA8XRZsL2aA6e4MZeD4TOUlIH/c Vlof3y4gFibjwzuuondVku9ia2MSRYnrBl+LMSRftBkVa4OvS+dij . 172758 IN DNSKEY 257 3 8 AwEA AagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjFFVQUTf6v 58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYE hg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXpoY68LsvP VjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpzW5hOA2hzCTMjJPJ8LbqF 6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8 ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0=
Ve výpisu budou patrné dva klíče, vy chcete ten delší (257). Klíč a hodnoty převeďte do následující podoby:
managed-keys { "." initial-key 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq QxA+Uk1ihz0="; };
A tu vložte třeba do souboru /etc/bind/named.conf.managed
. Následně vložte potřebnou include direktivu do /etc/bind/named.conf
:
include "/etc/bind/named.conf.managed";
Toto samo o sobě by mělo stačit (DNSSEC validace je povolená, ale fungovat začne teprve po výše uvedené operaci). Bind tedy restartujte:
service bind9 restart
A následně použijte stejný postup uvedený výše pro ověření, že DNSSEC validace funguje.
Pozor! Opět zde platí, že výše uvedený klíč si musíte v každém případě nějakým způsobem ověřit, protože na něm stojí celá bezpečnost ověřování DNSSEC.
Přizpůsobení nastavení Bindu
Bind se umí chovat úplně stejně jako dnsmasq, tedy jako forwardující (přeposílá dotazy na jiný server) a kešující DNS server. Chcete-li ho takto nastavit, vložte do /etc/bind/named.conf.options
, mezi složené závorky direktivy options, následující řádky (servery, které se mají dotazovat, se specifikují v proměnné forwarders):
forward only; forwarders { 1.2.3.4; 4.3.2.1;};
Nastavení síťových rozhraní, kde má Bind naslouchat, se realizuje následovně (stejný soubor, stejné umístění jako v příkladu výše):
listen-on-v6 { any; }; listen-on { 127.0.0.1; 10.0.1.254; };
První řádka specifikuje naslouchání na IPv6 adresách. Klíčové slovo any zajistí, že se bude naslouchat na všech. Druhá řádka řídí naslouchání na IPv4, kde jsou specifikovány v tomto případě dvě adresy, adresa místní smyčky (localhostu) a privátní adresa 10.0.1.254.
allow-query { 10.0.1.0/24; };
Proměnná allow-query definuje, kdo se smí serveru dotazovat. V tomto příkladu se serveru smí dotazovat síť 10.0.1.0/24.
allow-recursion { 10.0.1.0/24; };
Tato proměnná definuje, kdo smí pokládat rekurzivní dotazy. Syntax je totožná jako u allow-querry.
Pokud nechcete provozovat rekurzivní DNS server, rekurzi jako takovou je možné vypnout:
recursion no;
Tím bych pro tentokrát skončil. Příště bude osvětlena problematika tvorby zón a zónových souborů.