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.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 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 ::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; };
};
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.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.
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.