Bind v roli autoritativního serveru

Správa linuxového serveru: Bind v roli autoritativního serveru

Dnešní díl popisuje správu domén na vlastním DNS serveru, tedy tvorbu autoritativního DNS serveru a tvorbu zónových souborů.

Na úvod předpokládám, že máte nainstalovaný DNS server Bind (balíček bind9 v Debianu). Stejně tak předpokládám, že jste si prošli posledních pár dílů, které se věnují problematice DNS serverů.

Jak bylo řečeno minule, Bind umí zastat jak roli resolvujícího DNS serveru, který za klienty vyřizuje libovolné DNS žádosti, tak roli autoritativního serveru, který vrací autoritativní údaje o částech DNS stromu, jež jsou mu delegovány.

Pokud si zaregistrujete doménu, můžete registrátorovi sdělit, jaké jsou vaše autoritativní servery, a mít DNS informace spojené s příslušnou doménou (nebo se všemi vašimi doménami) na vlastních DNS serverech. Servery jsou potřeba alespoň dva, jeden primární a jeden sekundární. Primární poskytuje vždy aktuální autoritativní informace, sekundární přebírá ve specifikovaných intervalech data z primárního serveru a kešuje je. Pokud primární server vypadne, budou se klienti dotazovat sekundárního, dokud platnost jeho dat nevyprší.

DNS servery představují součást klíčové infrastruktury, a jako takové by měly být maximálně spolehlivé. Výpadek obou DNS serverů povede k nemožnosti klientů převádět vaše domény na IP adresy. I když budou v takové situaci vaše servery běžet, klienti se na ně nedostanou. Pokud budete provozovat vlastní DNS servery, měli byste je provozovat na spolehlivých strojích u spolehlivých poskytovatelů. Ideálně by to měly být servery ve dvou různých datacentrech (jinak hrozí, že výpadek konektivity datacentra zruší oba vaše DNS servery naráz).

Příklad zónového souboru

Vytvořte soubor někde v úložišti konfigurace pro Bind, tedy např. /etc/bind/db.example.cz, který poslouží k uložení záznamů o dané zóně. Příklad může vypadat třeba takto:

$TTL    3h      ; default expiration time
@       IN      SOA     ns1.example.cz. spravce.example.cz. (
                          20120820 ; serial
                          4h       ; slave refresh
                          2h       ; slave retry interval
                          2w       ; slave data expiration
                          1h )     ; maximum caching time when lookups fail
;
@       IN      NS      ns1.example.cz.
@       IN      NS      ns2.example.cz.


example.cz.    IN      MX      10      mujmailserver1.cz.
example.cz.    IN      MX      20      mujmailserver2.cz.
example.cz.    IN      A       1.2.3.5
ns1                     IN      A       1.2.3.4
ns2                     IN      A       1.2.3.3
www                     IN      CNAME   example.cz.
subdomena1              IN      A       1.2.3.4
subdomena2              IN      CNAME   example.cz.

Jak je patrno, není to úplně procházka růžovým sadem, ale není to zase příliš složité. Vezměme to jedno po druhém:

Všimněte si také teček za doménovými jmény. Ty označují kořenovou zónu a musí být uváděny. Aby váš DNS server začal distribuovat záznamy z tohoto zónového souboru, musíte jej zařadit do nastavení Bindu, tzn. vložit do souboru /etc/bind/named.conf.local následující:

zone "example.cz" {
       type master;
       file "/etc/bind/db.example.cz";
};

Je zde specifikován nejen soubor, ale také typ „master“, který určuje váš DNS server jako primární vzhledem k tomuto zónovému souboru.

Před samotným restartem Bindu je vhodné konfiguraci prověřit automatizovaným nástrojem, a vyhnout se tak situaci, kdy server znovu nenastartuje kvůli chybě v definici zóny, čímž nastane výpadek. Bind obsahuje nástroj named-checkconf, který stačí bez parametrů spustit:

named-checkconf

Dle unixové tradice, pokud tento příkaz nevrátí žádný text, znamená to, že nastavení Bindu je v pořádku, a vy jej můžete v klidu restartovat:

service bind9 restart

Nyní můžete server otestovat:

dig example.cz @1.2.3.4

;; QUESTION SECTION:
;example.cz.                     IN      A

;; ANSWER SECTION:
example.cz.             10800   IN      A       1.2.3.4

;; AUTHORITY SECTION:
example.cz.             10800   IN      NS      ns1.example.cz.
example.cz.             10800   IN      NS      ns2.example.cz

;; ADDITIONAL SECTION:
ns1.example.cz.          10800   IN      A       1.2.3.4
ns2.example.cz.          10800   IN      A       1.2.3.3

Všimněte si TTL u jednotlivých záznamů, které udává 10 800 sekund, tedy 3 hodiny, což je přesně hodnota, kterou jste specifikovali v proměnné $TTL.

Otestovat můžete i další záznamy (dig -t mxdig -t soa) atd.

Sekundární DNS servery

Přenos dat zóny (tzv. zónový transfer, zone transfer) je třeba na primárním serveru autorizovat, což můžete provést specifikací příslušné IP adresy u direktivy allow-transfer, takto:

   zone "example.cz" {
         type master;
         file "/etc/bind/db.example.cz";
         allow-transfer { @4.3.2.1; };
   };

Následně je třeba na sekundárním serveru vytvořit specifikaci zóny typu slave se specifikací primárního (master) serveru, takto:

   zone "example.cz" {
         type slave;
         file "/var/cache/bind/db.example.cz";
         masters { @1.2.3.4; };
   };

Nezapomeňte oba servery restartovat, nejprve primární, pak sekundární, a následně otestovat, jestli vše funguje.

Tím bych tento díl ukončil. Příště budou probrány reverzní záznamy a také český, pouze autoritativní server KnotDNS pocházející z laboratoří CZ.NIC.