Infrastruktura Zero-Trust DNS: Unbound i Pi-hole z DoH oraz DNSSEC

Spis treści
Pi-hole i Unbound pełnią różne funkcje: Pi-hole filtruje nazwy DNS według reguł, a Unbound rozwiązuje dozwolone zapytania i sprawdza DNSSEC. Centralny publiczny resolwer przestaje być punktem zbierającym przekazywane zapytania. Nadal potrzebne są serwery root, TLD i autorytatywne. Samo połączenie tych narzędzi nie tworzy kompletnej architektury zero trust.
1. Filtrowanie, rekursja i DNSSEC
DNS przyporządkowuje nazwy, np. example.com, do adresów. Publiczny resolwer może zapisywać otrzymane nazwy, ale zwykłe zapytanie DNS nie zawiera pełnej ścieżki URL, treści strony ani wszystkich metadanych ruchu sieciowego.
- Pi-hole: obsługuje zapytania urządzeń faktycznie korzystających z Pi-hole jako serwera DNS. Listy domen nie zapewniają pełnego wykrywania reklam ani złośliwego oprogramowania. Przeglądarka z osobną usługą DoH może ominąć lokalny filtr.
- Unbound: rozwiązuje dozwolone zapytania bez dostępnej odpowiedzi w pamięci podręcznej. Odesłania prowadzą od serwerów root przez TLD do serwerów autorytatywnych; zapisane wcześniej dane mogą skrócić tę drogę.
- DNSSEC: sprawdza podpisane dane DNS na podstawie łańcucha zaufania. Błędne podpisy powodują odrzucenie odpowiedzi. Strefy poprawnie rozpoznane jako niepodpisane nadal działają, lecz bez kryptograficznego potwierdzenia autentyczności odpowiedzi. DNSSEC nie szyfruje zapytań.

2. Przykład dla Debiana lub Raspberry Pi OS
Przykład zakłada Pi-hole i Unbound na wspólnym hoście i we wspólnej przestrzeni sieciowej, bez oddzielnych sieci kontenerów. Zmiany działającego DNS mogą przerwać rozwiązywanie nazw. Przygotowanie obejmuje kopię dotychczasowej konfiguracji i dostępny kanał administracyjny. Rekursja wymaga wychodzącego ruchu UDP oraz TCP na port 53.
Instalacja z utrzymywanych pakietów dystrybucji:
sudo apt update
sudo apt install unbound dnsutils
Przed dodaniem ustawień konieczna jest kontrola konfiguracji pakietu w /etc/unbound/. Pakiety Debiana zwykle zapewniają root hints i kotwicę zaufania DNSSEC. Istniejącego wpisu auto-trust-anchor-file dla tej samej ścieżki nie należy powielać. Usługa Unbound potrzebuje prawa zapisu do automatycznie aktualizowanej kotwicy. Przy braku takiej konfiguracji punktem odniesienia jest instrukcja pakietu dystrybucji.
Poniższy fragment pliku /etc/unbound/unbound.conf.d/pi-hole.conf uzupełnia konfigurację pakietu:
server:
interface: 127.0.0.1
port: 5335
verbosity: 0
do-ip4: yes
do-ip6: no
do-udp: yes
do-tcp: yes
harden-glue: yes
harden-dnssec-stripped: yes
use-caps-for-id: no
edns-buffer-size: 1232
prefetch: yes
qname-minimisation: yes
hide-identity: yes
hide-version: yes
private-address: 10.0.0.0/8
private-address: 172.16.0.0/12
private-address: 192.168.0.0/16
private-address: 169.254.0.0/16
private-address: fc00::/7
private-address: fe80::/10
do-ip6: no wybiera tutaj transport IPv4; rekordy AAAA pozostają dostępne. Przy działającym natywnym IPv6 uzasadniona może być wartość yes. Fragment celowo nie deklaruje drugiej kotwicy zaufania i nie stanowi pełnej samodzielnej konfiguracji.
Restart następuje dopiero po poprawnej kontroli konfiguracji. Poniższe polecenia stanowią oddzielne kroki; błąd pierwszej kontroli oznacza konieczność wstrzymania restartu:
sudo unbound-checkconf
sudo systemctl restart unbound
systemctl is-enabled unbound
dig @127.0.0.1 -p 5335 fail01.dnssec.works
dig @127.0.0.1 -p 5335 dnssec.works +ad
Pierwszy test DNS powinien zwrócić SERVFAIL, a drugi NOERROR z flagą ad. Pojedynczy wynik SERVFAIL nie dowodzi sprawnej walidacji: podobny rezultat powodują problemy z łącznością. DNSSEC wymaga prawidłowego czasu systemowego. Polecenie restart nie włącza startu usługi przy uruchamianiu systemu; is-enabled sprawdza istniejące ustawienie.
3. Połączenie z Pi-hole i kontrola rzeczywistej trasy
W Settings > DNS niestandardowym serwerem nadrzędnym zostaje 127.0.0.1#5335. Dla wyłącznie lokalnej rekursji pozostałe serwery nadrzędne wymagają usunięcia. Po zapisaniu zmian testowe zapytanie do Pi-hole powinno wskazać Unbound jako cel przekazania w dzienniku zapytań. W oddzielnych kontenerach adres 127.0.0.1 oznacza wnętrze danego kontenera i nie nadaje się do takiego połączenia.
Opcja Use DNSSEC uruchamia dodatkową walidację w Pi-hole, a nie samo przekazywanie flag. Unbound sprawdza DNSSEC niezależnie. Po włączeniu dodatkowej kontroli oba testy DNSSEC wymagają powtórzenia przez Pi-hole. Kontroli wymaga również integracja z openresolv lub unbound-resolvconf: wpis dotyczący portu 53 nie może tworzyć pętli do lokalnej usługi.
4. DoH jako inny tryb działania
Zwykła bezpośrednia rekursja wysyła poza sieć nieszyfrowane zapytania DNS. Minimalizacja QNAME ogranicza części nazwy ujawniane poszczególnym serwerom, lecz obserwator na łączu internetowym nadal może odczytywać zapytania.
Celowo skonfigurowany serwer nadrzędny DoH szyfruje połączenie z wybranym resolwerem. Ten resolwer otrzymuje przekazywane nazwy. Jest to inna architektura, a nie automatyczny tryb awaryjny. Dodanie kolejnego serwera nadrzędnego w Pi-hole nie zapewnia ustalonej kolejności przełączania po awarii. Weryfikacja certyfikatu, początkowe rozwiązanie adresu usługi i zachowanie podczas niedostępności wymagają osobnej konfiguracji.
Funkcja cloudflared proxy-dns została usunięta od wersji 2026.2.0 i nie jest aktualną opcją instalacji. Udokumentowana obsługa DoH w Unbound dla przychodzących zapytań klientów również wymaga odróżnienia od wychodzącego przekazywania przez DoH.
Pytania i odpowiedzi
Czy ta konfiguracja zapobiega obserwacji przez dostawcę Internetu?
Sama bezpośrednia rekursja nie zapewnia takiej ochrony. DoH chroni treść danego połączenia DNS; docelowe adresy IP późniejszych połączeń zasadniczo pozostają widoczne. DNSSEC chroni podpisane dane przed niewykrytą zmianą, ale nie zapobiega blokadom ani atakom na niepodpisane dane DNS. Szyfrowane połączenie klienta z własnym resolwerem rekursywnym jest możliwe; nie oznacza automatycznego szyfrowania drogi od resolwera do serwerów autorytatywnych.
Dlaczego znikają odpowiedzi z prywatnymi adresami IP?
private-address zapobiega wprowadzaniu wymienionych prywatnych adresów przez odpowiedzi publicznego DNS. Celowo wewnętrzna nazwa może wymagać wąskiego wyjątku, np. private-domain: "internal.example.com". Wyjątek dla całej domeny obejmuje również subdomeny i osłabia ochronę przed rebindingiem w tym zakresie. Lokalne rekordy obsługiwane bezpośrednio przez Pi-hole nie przechodzą przez Unbound.
Co się stanie, jeśli …?
Uproszczony model edukacyjny
Co się stanie, jeśli …?
Wyłącz element przykładowej sieci. Które usługi nadal działają?
Obraz z kamery w sieci lokalnej
Lokalna kamera jest otwierana przez adres IP. Przełącznik i Wi-Fi łączą ją z Twoim urządzeniem. W tym modelu internet, DNS i Pi nie są potrzebne.
Home Assistant przez lokalny adres IP
Interfejs działa na Pi. Twoje urządzenie łączy się z nim przez sieć lokalną; nazwa DNS nie jest tutaj potrzebna.
Automatyzacja Zigbee na Pi
Koordynator Zigbee podłączony bezpośrednio do Pi steruje lokalnym urządzeniem. Ta stała reguła nie wymaga tutaj Wi-Fi ani internetu.
Dostęp do Home Assistant przez chmurę
Dostęp wykorzystuje nazwę w chmurze i tunel z Pi. W tym przykładzie potrzebuje wszystkich czterech elementów.
Otwarcie nowej zewnętrznej strony
Nowa nazwa, której nie ma w pamięci podręcznej, potrzebuje DNS i drogi do internetu. Lokalne Pi nie hostuje tej obcej strony.
Istniejące połączenie internetowe przez IP
Nawiązane połączenie nie wymaga nowego wyszukania nazwy. Przetrwa awarię DNS, jeśli sieć i internet pozostaną dostępne.
Uproszczony model edukacyjny
Przykładowa sieć, a nie podgląd mojego sprzętu na żywo. Urządzenia mają zasilanie. Pi = Home Assistant z Zigbee przez USB; DNS to zewnętrzny resolver bez pamięci podręcznej i zastępstwa. „Przełącznik / Wi-Fi” oznacza cały dostęp lokalny. Wynik opisuje samą awarię, nie automatyczne przywrócenie działania.
DNS · RFC 1034 ↗Przejdź do powiązanego artykułu →
Te przykłady działają tylko w Twojej przeglądarce. Nie zakłócają prawdziwych systemów.
PNG z ustawieniami, wynikiem i adresem artykułu. Powstaje lokalnie dopiero po kliknięciu.