DNS - Domain Name System

Martin Klimeš, klimes@fi.muni.cz

Obsah

DNS Resolver

DNS Resolver je klientská strana DNS. Zahajuje a zpracovává DNS dotazy/odpovědi při překladu jména na IP. DNS Resolvery můžou být rekurzivní (typicky domácí router) nebo iterativní (menší zátěž na DNS servery).

Konfigurace resolveru je v /etc/resolv.conf. Jeho konfigurace může být přepisována síťovým manažerem (netcl, NetworkManager,...). Pokud přepisování souboru nechceme musíme nastavit soubor jako neměnný (chattr +i /etc/resolv.conf). Když potřebujeme, aby do souboru resolv.conf zapisovalo více procesů lze použít openresolv, který lze nakonfigurovat aby spolupracovat s ostatními resolvery.

Příklad souboru /etc/resolv.conf na systému s NetworkManager

# Generated by NetworkManager
nameserver 10.0.0.138
nameserver 2a00:1028:1:910::1
nameserver 2a00:1028:1:911::1
    

Typy záznamů

A IPv4 adresa
AAAA IPv6 adresa
CNAME Cannonical Name - alias
MX Mail Exchange
TXT Text k doméně
PTR Pointer na doménu. Na rozdíl od CNAME se zde DNS končí
NS Delegace DNS zóny
SOA Důležité informace o zóně. Povinné pole
DNSKEY Klíč k podpisu DNSSEC
RRSIG Podpis k DNSSEC
DS Delegation signer

Kruhová závislost, glue záznam

Příklad: Chci zjistit IP adresu fi.muni.cz

... dojdeme až na server nsa.ces.net

;; QUESTION SECTION:
;fi.muni.cz.			IN	NS

;; AUTHORITY SECTION:
fi.muni.cz.		7200	IN	NS	ns.muni.cz.
fi.muni.cz.		7200	IN	NS	aisa.fi.muni.cz.
fi.muni.cz.		7200	IN	NS	anxur.fi.muni.cz.
fi.muni.cz.		7200	IN	DS	56292 13 2 2592AB64BED77E9891A874F9DEAA53440C3ED4EA912900BFA955F283 AEDFA3AE
fi.muni.cz.		7200	IN	RRSIG	DS 13 3 7200 20221029053538 20220929044715 5617 muni.cz. sYPFGJWLYIetNI4GTPZTilG8wof8D9t8m57CmYt0QemKA2XOUNaLv6nQ Mlmu83qhWlu5S1LNf+vf+kLTQO4H2w==
    
Problém: Pro fi.muni.cz autoritativní server je aisa.fi.muni.cz a anxur.fi.muni.cz, ale my nevíme ani IP adresu ani aisy či anxura. Řešení spočívá v tzv. glue záznamech, které se posílají v doplňkové sekci.
;; ADDITIONAL SECTION:
ns.muni.cz.		7200	IN	AAAA	2001:718:801:404::33
ns.muni.cz.		7200	IN	RRSIG	AAAA 13 3 7200 20221026150700 20220926143338 5617 muni.cz. ch97L12M8wH9D8B6ZB7qzsXQ9BbgUrv31C6JEJIB2b6xkCTsiRdz6o2D PZcl3UzDvFEeS2/s9UZiZu3dsHF19A==
aisa.fi.muni.cz.	7200	IN	AAAA	2001:718:801:230::1
ns.muni.cz.		7200	IN	A	147.251.4.33
ns.muni.cz.		7200	IN	RRSIG	A 13 3 7200 20221026150700 20220926143338 5617 muni.cz. xfPUM4lbXd3Trv19qEfhZ1b90+E2ZYVfJUV540iwnxjwyRzRgYparx3S wknJiXQ3l/JiTcjswW73PfvqKq/zdg==
aisa.fi.muni.cz.	7200	IN	A	147.251.48.1
anxur.fi.muni.cz.	7200	IN	A	147.251.48.3
    
Takže situace je následovná: zeptáme se serveru nsa.ces.net na fi.muni.cz a dostaneme odpověď, že se máme obrátit na aisa.fi.muni.cz, ale ještě nám řekne "BTW, IP adresa aisy je 147.251.48.1".

Reverzní DNS

Reverzní DNS umožňuje převod IP adresy na doménové jméno.

dig -x 10.58.251.14

;; QUESTION SECTION:
;10.58.251.147.in-addr.arpa.    IN      PTR

;; ANSWER SECTION:
10.58.251.147.in-addr.arpa. 1797 IN     PTR     stratus.fi.muni.cz.
  
Vidíme že pro překlad se IP adresa zapíše obráceně v dekadickém zápisu a naváže se na in-addr.arpa.
dig -x 2001:718:801:235::74

;; QUESTION SECTION:
;4.7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.3.2.0.1.0.8.0.8.1.7.0.1.0.0.2.ip6.arpa. IN PTR

;; ANSWER SECTION:
4.7.0.0.0.0.0.0.0.0.0.0.0.0.0.0.5.3.2.0.1.0.8.0.8.1.7.0.1.0.0.2.ip6.arpa. 1800 IN PTR musa01.ip6.fi.muni.cz.
  
Pro IPv6 je situace podobná, jen je zápis delší a doména ip6.arpa.

DNS servery

Nejrozšířenější je server bind, ale existují i jiné jako je např. knot-dns vyvíjen organizací cz.nic nebo Unboud.

DNS server může být buď primární, sekundární nebo cache-only. Změny děláme na primárním DNS serveru a sekundární servery si stahují z primárního data. Cache-only server si jen ukládá již zpracované dotazy.

Standardně DNS využívá port 53 (UDP & TCP).

Bind (named)

Balíček pro debian bind9 (dokumentace v bind9-doc), pro arch bind. Konfigurace na Archu je v /etc/named.conf pro debian je vše pod /etc/bind. Pro provozování máme k dispozici systemd službu named. Dále se popisuje jen Debian.

Nastavení bind

Globální nastavení se dělá ve sekci options.

options {
    directory "/etc/bind";
    forwarders {
      147.251.48.3; 147.251.4.33;
      3ffe:ffff::1;
    };
    forward only;
    // recursion no;
};
  

Nastavení zóny

Vždy DNS server musí být schopen přeložit localhost na sebe + reverzní záznamy. V Debianu tyto soubory vytvoří při instalaci bind. Jedná se o db.local (viz níže), db.0, db.127, db.255, db.empty.

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.
@       IN      A       127.0.0.1
@       IN      AAAA    ::1
  
O nastavení zóny se v tomhle případě stará named.conf.default-zones, viz úryvek níže.
zone "localhost" {
        type master;
        file "/etc/bind/db.local";
};

  
V named.conf.local provádíme nastavení dalších zón.
zone "k11m1.eu" {
    type master;
    also-notify { 192.100.0.0 };
    file "/etc/bind/zones/k11m1.eu";
};

zone ”muni.cz” {
  type slave;
  file ”slave/muni.cz”;
  masters { 147.251.4.33; };
  allow-transfer { any; };
};
  

Reverzní záznamy

Stejné jako předtím: název zóny ______.in-addr.arpa. Pro konfiguraci reverzních záznamů používáme typ PTR. Nezapomeneme, že doména musí končit tečkou!


zone "127.in-addr.arpa" {
        type master;
        file "/etc/bind/db.127";
};
; Soubor db.127
; BIND reverse data file for local loopback interface
;
$TTL    604800
@       IN      SOA     localhost. root.localhost. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      localhost.
1.0.0   IN      PTR     localhost.
  

Konfigurace dopředného záznamu

$TTL    60
@       IN      SOA     alfa.k11m1.eu. klimes.fi.muni.cz. (
                              4         ; Serial
                             3H         ; Refresh
                            15M         ; Retry
                             2W         ; Expire
                            30M )       ; Negative Cache TTL
;
        IN      NS      alfa
alfa    IN      A       192.0.0.1
        IN      MX      50 mx.k11m1.eu
        IN      TXT     "Nejaky text"
mx      IN      A       192.0.0.10
Pro experimentování se hodí používat nízké TTL. Soubor musí začínat SOA záznam.

Užitečný nástroj může být také named-checkconf, který zkontroluje named konfigurace nebo named-checkzone, který umí zkontrolovat danou zónu. (named-checkzone domain /etc/bind/zona). Za zmínku stojí také dig nebo host, či nslookup.

Bind logging

Za zmínku také stojí nastavení v sekci logging, které umožňuje logovat do souborů různé nastavení. Další info lze nalézt zde.

Zabezpečení DNS

Podvržení DNS odpovědi -> útočník může změnit IP adresu. Chránit se před tímto útokem lze pomocí DNSSEC.

DNSSEC je zapnutý již ve výchozí konfiguraci jak na Debianu tak třeba archu. Pokud DNS nastavujeme a nechceme se ještě zabývat zabezpečením, můžeme jej vypnout v nastavení volbou dnssec-validation no; v sekci options.

Používají se 2 klíče ZSK - Zone Signing Key a KSK - Key Singing Key.

Velmi dobře popsaný postup jak zavést DNSSEC k podpisu spravované zóny lze najít na ArchLinux wiki; malý výtažek:

  1. Vygenerování klíčů (KSK a ZSK) k podpisu zóny
    $ dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE example.com
    $ dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE example.com
        
  2. Konfigurace zóny
    auto-dnssec maintain;
    inline-signing yes;
    

Pro Bind 9 lze využít "Fully Automated (Key and Signing Policy)", které by mělo nastavit DNSSEC samo a nastavit sane defaults. Pro použití nastavíme v definici zóny dnssec-policy default; a inline-signing yes;. Poté je ještě potřeba nastavit Delegaci pomocí DS v nadřazené zóně.

Místo příkazu dig lze využít i nástroj z ldnsutils (debian), ldns (Arch).

drill -DT sigfail.verteiltesysteme.net
drill -DT sigok.verteiltesysteme.net

DNS over HTTPS

Jako další mechanizmus pro zabezpečení DNS dotazů může sloužit DNS over HTTPS (DoH), nebo alternativně DNS over TLS (DoL). Problém s DNS je vcelku jednoduchý: všechny dotazy jsou v plain textu a tedy pokud někdo poslouchá na síti, tak vidí i domény, které chceme navštívit. Použitím DoT máme komunikaci šifrovanou.

Literatura