LW IT Solutions logo LW IT Solutions logo LW IT Solutions
« Przegląd bloga /IT & Networks/Tutorials / Infrastruktura Zero-Trust DNS: Unbound i Pi-hole z...
Ten artykuł w innych językach:

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

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

Co się stanie, jeśli …? ↓

Spis treści
  1. 1. Filtrowanie, rekursja i DNSSEC
  2. 2. Przykład dla Debiana lub Raspberry Pi OS
  3. 3. Połączenie z Pi-hole i kontrola rzeczywistej trasy
  4. 4. DoH jako inny tryb działania
  5. Pytania i odpowiedzi
  6. Źródła

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ń.
Pi-hole filtruje skonfigurowanych klientów; Unbound rozwiązuje nazwy i sprawdza podpisane dane DNS. Bezpośrednia rekursja zwykle korzysta z nieszyfrowanego transportu.
Pi-hole filtruje skonfigurowanych klientów; Unbound rozwiązuje nazwy i sprawdza podpisane dane DNS. Bezpośrednia rekursja zwykle korzysta z nieszyfrowanego transportu.

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ą?

Wybierz przykład
Internet
DNS
Przełącznik / Wi-Fi
Raspberry Pi

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.

Lukas Wójcik

Lukas Wójcik

Systems architect and technology enthusiast specializing in scalable tracking solutions, GMP Stack (GA4 & GTM), and robust backend architectures. Advocate for clean code and privacy-first design.

Kontakt

Masz pytanie lub pomysł na projekt internetowy? Napisz krótko, o co chodzi. Formularz korzysta z reCAPTCHA do ochrony przed spamem.

Napisanie komentarza

Doświadczenia z innym sprzętem lub inną wersją oprogramowania oraz pytania o konfigurację są tu mile widziane.

Adres e-mail nie jest publikowany. Pola obowiązkowe oznaczono gwiazdką.