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.
/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
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 |
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.3Takž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 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.
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).
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.
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; };
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 ::1O 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; }; };
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.
$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.10Pro 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
.
Za zmínku také stojí nastavení v sekci logging
, které umožňuje logovat do souborů různé
nastavení. Další info lze nalézt zde.
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:
$ dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE example.com $ dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE example.com
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
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.