W przypadku Pi-hole na Ubuntu Server 24.04 należy kierować żądania upstream przez dnscrypt-proxyi wskazać Pi-hole lokalnemu nasłuchującemu pod adresem 127.0.0.1#5053. Spowoduje to szyfrowanie ruchu DNS między serwerem a wybranym resolverem upstream za pomocą protokołu DNS-over-HTTPS (DoH), podczas gdy Pi-hole nadal odpowiada klientom LAN i stosuje swoje listy blokowania. Sam Pi-hole domyślnie nie zapewnia transportu DoH do swojego upstream; to lokalne proxy zapewnia szyfrowane połączenie.
Najpierw należy poznać szczegóły dotyczące bieżącej wersji: Cloudflare usunął to cloudflared proxy-dnspolecenie z nowych wydań od 2 lutego 2026 r. Starsze samouczki instalujące to polecenie mogą nie działać z obecną wersją cloudflared. Poniższe kroki wykorzystują dnscrypt-proxy, zgodnie z aktualnym przewodnikiem DoH Pi-hole. Ta konfiguracja jest odpowiednia, gdy Pi-hole i serwer proxy działają na tym samym hoście Ubuntu. Konfiguracja Docker lub wielohostowa wymaga różnych adresów nasłuchiwania i reguł zapory sieciowej.
Co ta konfiguracja robi i czego nie robi
Standardowy DNS zazwyczaj wysyła zapytania z resolvera do dostawcy DNS bez szyfrowania transportu. DoH przesyła żądania DNS w protokole HTTPS, co utrudnia obserwatorowi sieci między serwerem Pi-hole a resolverem odczytanie lub modyfikację tych żądań. Pi-hole pozostaje serwerem DNS reklamowanym urządzeniom w sieci lokalnej; zmienia się tylko jego ścieżka upstream.
DoH nie sprawia, że aktywność DNS jest niewidoczna dla wybranego resolvera. Dostawca nadrzędny nadal otrzymuje zapytania z Twojego serwera, a Pi-hole może przechowywać historię zapytań klienta zgodnie ze swoimi ustawieniami prywatności i rejestrowania. Protokół HTTPS nie szyfruje również niepowiązanego ruchu sieciowego. Jeśli chcesz użyć konkretnego resolvera, sprawdź jego politykę prywatności i wybierz wpis DoH z listy obsługiwanych resolverów.
Zanim zaczniesz
- Sprawdź, czy Pi-hole jest już zainstalowany i działa w systemie Ubuntu Server 24.04. Ten poradnik opisuje konfigurację istniejącego Pi-hole zamiast jego instalacji.
- Upewnij się, że serwer ma stabilny adres LAN. Jeśli adres ulegnie zmianie, klienci DHCP routera mogą utracić swój serwer DNS.
- Uzyskaj dostęp administratora i możliwość połączenia z hostem Pi-hole, jeśli DNS tymczasowo przestanie działać. Unikaj wprowadzania tej zmiany zdalnie przez połączenie, które korzysta z tego samego Pi-hole do rozpoznawania nazw.
- Zapisz bieżące ustawienia upstream Pi-hole, aby móc je przywrócić podczas wycofywania aktualizacji.
Serwer proxy będzie łączył się tylko z pętlą zwrotną na porcie 5053, pozostawiając port 53 dla Pi-hole. Pozwala to uniknąć konkurowania z usługą DNS Pi-hole i lokalnym resolverem Ubuntu. Nie należy wyłączać systemd-resolvedtej funkcji tylko po to, aby ta konstrukcja działała; oddzielny port pętli zwrotnej serwera proxy pozwala uniknąć tego konfliktu.
1. Zainstaluj dnscrypt-proxy z repozytoriów pakietów Ubuntu
Projekt dnscrypt-proxy dokumentuje ścieżkę instalacji pakietu Ubuntu. Przed instalacją sprawdź, czy skonfigurowane repozytoria Ubuntu oferują kandydata:
sudo apt update
apt-cache policy dnscrypt-proxy
Jeśli wynik wskazuje wersję kandydacką, zainstaluj ją:
sudo apt install dnscrypt-proxy
Jeśli nie zostanie wyświetlony żaden kandydat, nie dodawaj niepowiązanego repozytorium innej firmy, tylko po to, aby kontynuować. Użyj metody instalacji podanej w oficjalnym przewodniku po Linuksie projektu dnscrypt-proxy, zweryfikuj wydanie i architekturę oraz dostosuj konfigurację usługi do tej instalacji. Poniższe ścieżki konfiguracji i jednostki gniazd systemd odnoszą się do konfiguracji pakietów Ubuntu udokumentowanej przez Pi-hole.
2. Przenieś nasłuchiwacz proxy na port localhost 5053
Pi-hole już korzysta ze standardowego portu DNS 53. Skonfiguruj gniazdo proxy tak, aby nasłuchiwało zarówno na TCP, jak i UDP pod adresem 127.0.0.1:5053, dostępnym tylko z tego samego hosta. Utwórz drop-in systemd:
sudo systemctl edit dnscrypt-proxy.socket
Wprowadź te linie w edytorze i zapisz:
[Socket]
ListenStream=
ListenDatagram=
ListenStream=127.0.0.1:5053
ListenDatagram=127.0.0.1:5053
Puste wiersze ListenStream=i ListenDatagram=czyszczą domyślne ustawienia pakietu przed ustawieniem adresów zastępczych. Nie należy ich pomijać: w przeciwnym razie systemd może zachować domyślny port oprócz niestandardowego nasłuchiwacza.
3. Wybierz resolver DoH
Otwórz plik konfiguracji pakietu:
sudoedit /etc/dnscrypt-proxy/dnscrypt-proxy.toml
Do aktywacji gniazda systemd należy użyć pustej listy nasłuchujących w konfiguracji proxy. Wybierz nazwę resolvera z bieżącej, podpisanej publicznej listy resolverów. Na przykład, poniższy przykład wybiera standardowy resolver Cloudflare; przewodnik Pi-hole pokazuje również cloudflare-securityprzykład filtrowania złośliwego oprogramowania w resolverze nadrzędnym:
listen_addresses = []
server_names = ['cloudflare']
Pozostaw resztę konfiguracji pakietu w stanie nienaruszonym. Nazwy w server_namespliku to identyfikatory rejestru, a nie dowolne nazwy hostów ani ścieżki URL. Jeśli wolisz innego dostawcę, sprawdź, czy jego bieżący wpis w programie do rozpoznawania nazw obsługuje DoH i skopiuj jego dokładną nazwę. Program do rozpoznawania nazw, który filtruje złośliwe oprogramowanie lub inne kategorie, może generować inne wyniki niż niefiltrowany program do rozpoznawania nazw.
4. Skieruj Pi-hole na lokalny serwer proxy
Ustaw adres DNS upstream Pi-hole na lokalny odbiornik:
sudo pihole-FTL --config dns.upstreams '["127.0.0.1#5053"]'
Sufiks #5053to notacja Pi-hole dla niestandardowego portu DNS. Możesz również sprawdzić interfejs administratora Pi-hole w Ustawieniach > DNS . Wyczyść wstępnie ustawione publiczne serwery nadrzędne i pozostaw niestandardowy serwer 127.0.0.1#5053jako serwer nadrzędny. Utrzymanie publicznego resolvera jako dodatkowego serwera nadrzędnego może umożliwić zapytaniom omijanie szyfrowanego serwera proxy, więc usuń te wpisy, jeśli chcesz, aby wszystkie zapytania nadrzędne Pi-hole korzystały z DoH.
5. Uruchom ponownie usługi i sprawdź rozwiązanie
Uruchom ponownie gniazdo, usługę proxy i demona FTL Pi-hole, aby załadować nową konfigurację:
sudo systemctl restart dnscrypt-proxy.socket
sudo systemctl restart dnscrypt-proxy.service
sudo systemctl restart pihole-FTL.service
Sprawdź status usługi:
sudo systemctl status dnscrypt-proxy.socket
sudo systemctl status dnscrypt-proxy.service
sudo systemctl status pihole-FTL.service
Każdy z nich powinien być aktywny, bez błędu powiązania lub niepowodzenia uruchomienia resolvera. Przetestuj serwer proxy bezpośrednio przez lokalny odbiornik DNS:
dig @127.0.0.1 -p 5053 example.com
Odpowiedź DNS oznacza, że lokalny serwer proxy odpowiada. Następnie przetestuj Pi-hole na porcie 53:
dig @127.0.0.1 example.com
Sprawdź dziennik zapytań Pi-hole lub pulpit nawigacyjny, aby upewnić się, że żądanie dotarło do Pi-hole. Jeśli test się nie powiedzie, przejrzyj dziennik serwera proxy:
sudo journalctl -u dnscrypt-proxy.service -b --no-pager
Aby przeprowadzić dodatkową kontrolę, sprawdź dane wyjściowe z uruchomienia serwera proxy lub dziennika dla wybranego resolvera oraz status protokołu DoH. digSamo pomyślne zakończenie testu dowodzi, że rozpoznawanie nazw domen działa; samo w sobie nie dowodzi, że żądanie korzystało z protokołu HTTPS.
Typowe problemy i bezpieczne odzyskiwanie
- „Adres jest już używany”: inny proces może już zajmować port 5053 lub nadpisanie gniazda nie zostało załadowane. Sprawdź nasłuchiwacze za pomocą
sudo ss -lntup, przejrzyj drop-in za pomocą systemctl cat dnscrypt-proxy.socketi upewnij się, że puste linie resetowania poprzedzają wpisy 5053.
- Serwer proxy jest aktywny, ale przekroczono limit czasu wyszukiwania: sprawdź wychodzący dostęp HTTPS, nazwę resolvera i logi serwera proxy. Niektóre sieci blokują połączenia DNS-over-HTTPS lub ograniczają port TCP 443.
- Test proxy działa, ale Pi-hole nie odpowiada w górę: sprawdź, czy Pi-hole jest ustawiony dokładnie na
127.0.0.1#5053, a następnie zrestartuj pihole-FTL. Upewnij się, że standardowe pola wyboru w górę nie zapewniają po cichu alternatywnej trasy.
- Samo Ubuntu nie może rozwiązywać nazw po tej zmianie: ta konfiguracja zmienia plik źródłowy Pi-hole, a nie hosta
/etc/resolv.conf. Unikaj zastępowania tego pliku lub wyłączania go systemd-resolvedjako skrótu do rozwiązywania problemów.
Aby przywrócić poprzednią wersję, przywróć ustawienia DNS zapisane w Pi-hole i uruchom ponownie pihole-FTL. Gdy Pi-hole przestanie wskazywać na serwer proxy, możesz go wyłączyć lub usunąć dnscrypt-proxyza pomocą menedżera pakietów. Jeśli ten serwer również rozwiązuje własny DNS przez Pi-hole, przed zmianą usług zachowaj dostępną lokalną ścieżkę odzyskiwania.
Która opcja jest odpowiednia dla Twojej sieci?
Użyj tego rozwiązania z pojedynczym hostem proxy, gdy potrzebujesz scentralizowanego filtrowania DNS w Pi-hole i szyfrowanego ruchu z Pi-hole do jednego wybranego resolvera. Jest ono stosunkowo łatwe do sprawdzenia, ponieważ proxy ma jeden adres lokalny i port. Jeśli uruchamiasz Pi-hole w Dockerze, na innym serwerze lub w wielu sieciach, możesz potrzebować adresu sieci kontenera zamiast pętli zwrotnej i musisz ograniczyć nasłuchiwanie proxy, aby nie było ono widoczne jako otwarty resolver. Jeśli potrzebujesz filtrowania opartego na regułach, tożsamości dla każdego urządzenia lub szyfrowanego DNS dla urządzeń mobilnych poza domem, skonfiguruj te klienty lub zarządzaną bramę osobno; połączenie DoH nadrzędne Pi-hole nie szyfruje automatycznie ścieżki każdego klienta do Pi-hole.
Na koniec pamiętaj, że router lub klient może ominąć Pi-hole, jeśli reklamuje drugi serwer DNS. W przypadku filtrowania w całej sieci, przydziel klientom tylko adres Pi-hole przez DHCP i uwzględnij reklamy DNS IPv6, a także IPv4. Po zmianie ustawień routera sprawdź ustawienia na wielu urządzeniach, ponieważ poprawna konfiguracja proxy na serwerze nie może uniemożliwić klientowi bezpośredniego korzystania z innego resolvera.
Oficjalne referencje