Finální All-in-One Návod: Bezpečný a Vyladěný DNS Server Pi-hole, DoH, DNSSEC a SNI 2025-06-29
Tento návod je finální, odladěná verze pro instalaci na čistý systém (Raspberry Pi 5 s Raspberry Pi OS nebo Ubuntu Server). Obsahuje všechny optimalizace pro rychlost a bezpečnost.
Cílové Funkce:
-
Blokování reklam a trackerů (Pi-hole)
-
Šifrované DNS dotazy do internetu (DoH přes dnscrypt-proxy)
-
Ověřování pravosti odpovědí (DNSSEC)
-
Vysoký výkon díky optimalizované cache
Celé to poběží v Dockeru a budeme to spravovat pohodlně přes Portainer.
Předpoklady
-
Raspberry Pi (doporučuji model 4 nebo 5) se stabilním systémem (např. Raspberry Pi OS).
-
Nainstalovaný Docker a Portainer.
-
Statická IP adresa pro tvůj Raspberry Pi (v našem příkladu budeme používat 192.168.54.2).
Část 1: Příprava adresářů a souborů na Raspberry Pi
Nejdříve si přes SSH (PuTTY) na tvém Pi připravíme veškerou strukturu.
1. Vytvoření adresářové struktury
Vytvoříme si přehlednou strukturu v adresáři /opt/.
# Vytvoření hlavního adresáře pro projekt
sudo mkdir -p /opt/dns-server
# Vytvoření adresářů pro Pi-hole
sudo mkdir -p /opt/dns-server/pihole/etc-pihole
sudo mkdir -p /opt/dns-server/pihole/etc-dnsmasq.d
# Vytvoření adresáře pro dnscrypt-proxy
sudo mkdir -p /opt/dns-server/dnscrypt-proxy
2. Nastavení oprávnění pro dnscrypt-proxy
Toto je velmi důležitý krok. Kontejner dnscrypt-proxy běží z bezpečnostních důvodů pod specifickým uživatelem (s ID 991). Aby mohl zapisovat své dočasné soubory (cache), musíme mu dát vlastnictví jeho konfiguračního adresáře.
sudo chown -R 991:991 /opt/dns-server/dnscrypt-proxy
3. Vytvoření konfiguračního souboru pro dnscrypt-proxy
Tento soubor definuje, jaké šifrované DNS servery bude náš systém používat.
sudo nano /opt/dns-server/dnscrypt-proxy/dnscrypt-proxy.toml
Do tohoto souboru vlož následující obsah. Obsahuje výběr několika špičkových, na soukromí orientovaných poskytovatelů. dnscrypt-proxy si automaticky vybere ten nejrychlejší dostupný.
# Seznam preferovaných DoH serverů.
server_names = ['cloudflare', 'quad9-doh', 'adguard-dns']
# Naslouchat na všech rozhraních uvnitř kontejneru na portu 53.
listen_addresses = ['0.0.0.0:53']
# Vyžadovat na serverech podporu klíčových bezpečnostních funkcí.
require_dnssec = true
require_nolog = true
require_nofilter = true
# Definice zdrojů, odkud se stahuje seznam a parametry všech dostupných serverů.
[sources]
[sources.'public-resolvers']
urls = ['https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v3/public-resolvers.md']
cache_file = '/config/public-resolvers.md'
minisign_key = 'RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3'
Ulož soubor a zavři editor (Ctrl+X, poté Y a Enter).
Oprávnění: Nezapomeňte na problém s oprávněními z minula. Ujistěte se, že adresář /opt/dns-server a jeho podadresáře mají správná oprávnění, aby do nich kontejnery mohly zapisovat. Příkaz sudo chown -R $USER:$USER /opt/dns-server je dobrý start, ale někdy je potřeba explicitně nastavit ID uživatele, pod kterým proces v kontejneru běží. Pro jednoduchost často stačí:
sudo chmod -R 777 /opt/dns-server/dnscrypt-proxy
4. Vytvoření konfiguračního souboru pro DNSSEC v Pi-hole
Tento soubor zapne v Pi-hole pokročilé funkce, zejména DNSSEC.
sudo nano /opt/dns-server/pihole/etc-dnsmasq.d/99-performance-tuning.conf
Vlož do něj následující obsah:
# --- DNSSEC ---
# Zapnutí validace DNSSEC pro ověření pravosti DNS odpovědí.
#Nechte DNSSEC validaci pouze na dnscrypt-proxy a v Pi-hole ji vypněte.
##Odstraňte DNSSEC z konfigurace Pi-hole:
#Upravte soubor /opt/dns-server/pihole/etc-dnsmasq.d/99-performance-tuning.conf a smažte nebo zakomentujte tyto dva řádky:
#dnssec
#trust-anchor=.,20326,8,2,E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D
# --- CACHE & PERFORMANCE TUNING ---
# Výrazné zvětšení cache pro bleskové odpovědi.
cache-size=50000
# Nastavení minimální doby platnosti záznamu v cache na 5 minut (300s).
# Zabraňuje zbytečným dotazům ven i u domén s krátkým TTL.
min-cache-ttl=300
# Přednačítání záznamů v cache, které se blíží expiraci.
# Výsledkem je pocitově plynulejší procházení webu.
dns-forward-max=1000
Ulož a zavři soubor.
Část 2: Nasazení Stacku v Portaineru
Nyní, když máme vše připraveno, nasadíme samotné služby.
YAML kód pro Portainer Stack
Následující kód je "srdcem" celého našeho setupu. Obsahuje definici obou služeb (pihole i dnscrypt-proxy) a jejich propojení.
version: "3.8"
services:
# Služba pro šifrování DNS (DoH)
dnscrypt-proxy:
image: klutchell/dnscrypt-proxy:latest
container_name: dnscrypt-proxy
restart: unless-stopped
# Explicitně říkáme kontejneru, aby použil náš konfigurační soubor
command: -config /config/dnscrypt-proxy.toml
volumes:
- /opt/dns-server/dnscrypt-proxy:/config
networks:
dns_network:
ipv4_address: 172.25.0.10
# Služba pro blokování reklam a lokální DNS cache
pihole:
image: pihole/pihole:latest
container_name: pihole
restart: unless-stopped
ports:
# Nahraď 192.168.54.2 IP adresou tvého serveru!
- "192.168.54.2:53:53/tcp"
- "192.168.54.2:53:53/udp"
- "192.168.54.2:80:80/tcp"
- "192.168.54.2:443:443/tcp" # HTTPS port pro Pi-hole
environment:
TZ: "Europe/Prague"
WEBPASSWORD: "ZdeZadejSveNoveSuperSilneHeslo" # Změň si heslo!
DNS1: "172.25.0.10#53"
DNS2: ""
DNSMASQ_LISTENING: all
# NTP servery pro Pi-hole - tvůj server + záložní české
PIHOLE_NTP_SERVERS: "ntp.zelina.eu,tik.cesnet.cz,tak.cesnet.cz,0.cz.pool.ntp.org,1.cz.pool.ntp.org,0.pool.ntp.org,1.pool.ntp.org"
volumes:
- /opt/dns-server/pihole/etc-pihole:/etc/pihole
- /opt/dns-server/pihole/etc-dnsmasq.d:/etc/dnsmasq.d
cap_add:
- NET_ADMIN
- SYS_TIME # Přidáno pro lepší práci s časem
depends_on:
- dnscrypt-proxy
networks:
- dns_network
networks:
dns_network:
driver: bridge
ipam:
config:
- subnet: 172.25.0.0/16
Kroky pro nasazení v Portaineru
-
Otevři si webové rozhraní Portaineru.
-
V menu vlevo klikni na Stacks.
-
Vpravo nahoře klikni na + Add stack.
-
Zadej Název stacku, například dns-server.
-
Ujisti se, že je vybrána volba Web editor.
-
Zkopíruj celý YAML kód uvedený výše a vlož ho do textového pole.
-
NEZAPOMEŇ změnit ZdeZadejSveNoveSuperSilneHeslo na své vlastní, bezpečné heslo.
-
Sjeď úplně dolů a klikni na tlačítko Deploy the stack.
Počkej chvilku, než Portainer stáhne obrazy a spustí kontejnery. Oba by se měly rozsvítit zeleně.
Část 3: Finální konfigurace a bonusy
1. Nastavení v Pi-hole GUI (Nezbytné!)
-
Otevři http://TVOJE_IP_ADRESA/admin.
-
Přihlas se.
-
Jdi do Settings -> DNS.
-
Upstream DNS Servers: Odškrtni všechny servery v levém sloupci. V pravém sloupci nech zaškrtnuté jen Custom 1 (IPv4) s hodnotou:
172.25.0.10#53
-
Interface settings: Úplně dole vyber Permit all origins.
-
Klikni na Save.
2. Bonus: Zvýšení bezpečnosti (Doporučeno)
Přidej do Pi-hole seznamy pro blokování malwaru a phishingu.
-
Jdi do Adlists.
-
Přidej následující URL (každou zvlášť):
https://phishing.army/download/phishing_army_blocklist_extended.txt
https://osint.digitalside.it/Threat-Intel/lists/latestdomains.txt
https://raw.githubusercontent.com/hagezi/dns-blocklists/main/lists/doh-vpn-proxy-bypass/pro/domains.txt
https://phishing.army/download/phishing_army_blocklist_extended.txt (Anti-phishing)
https://osint.digitalside.it/Threat-Intel/lists/latestdomains.txt (Malware a C&C servery)
https://raw.githubusercontent.com/hagezi/dns-blocklists/main/lists/doh-vpn-proxy-bypass/pro/domains.txt (Blokování služeb, které se snaží obejít tvé DNS)
Jdi do Tools -> Update Gravity a klikni na Update.
Po přidání seznamů nezapomeň jít do Tools -> Update Gravity a kliknout na Update, aby si Pi-hole seznamy stáhl a zpracoval.
3. Nastavení sítě
V administraci svého routeru nastav jako DHCP DNS server IP adresu tvého nového serveru.
4. Ověření funkčnosti (Test pravdy)
Jak jsi sám zjistil, na čerstvém serveru chybí dig a nslookup. Nainstalujeme je.
sudo apt update
sudo apt install dnsutils -y
Test ze serveru na sebe sama:
dig @192.168.54.2 www.google.com
Tímto testujeme, jestli je služba dostupná na své vnější IP adrese.
Test komunikace mezi kontejnery (pokud krok 'a' selže):
Tímto se dostaneme PŘÍMO do Pi-hole kontejneru a zkusíme se zeptat dnscrypt-proxy na jeho interní IP adrese.
# Spusť příkazový řádek uvnitř běžícího pihole kontejneru
docker exec -it pihole bash
# Teď jsi uvnitř kontejneru. Zkus se zeptat dnscryptu:
nslookup google.com 172.25.0.10
# Pro opuštění kontejneru napiš
exit
Nejlepší způsob je odposlouchávat provoz, jak jsme to dělali při ladění.
Na svém Pi v terminálu spusť:
sudo tcpdump -i eth0 -n port 53
(Pokud používáš Wi-Fi, nahraď eth0 za wlan0.)
Z jiného počítače ve tvé síti spusť v příkazovém řádku:
nslookup www.idnes.cz 192.168.54.2
V okně s tcpdump uvidíš pouze komunikaci mezi tvým počítačem a Pi-hole (192.168.54.7). Neuvidíš žádný odchozí provoz z Pi-hole na veřejné servery (1.1.1.1, 8.8.8.8 atd.) na portu 53. To je definitivní důkaz, že šifrování funguje!
🎉 Hotovo! Co dál?
GRATULUJI! Postavil jsi si robustní, bezpečný a soukromí chránící DNS systém.
-
Nastav router: V administraci svého routeru najdi nastavení DHCP a jako jediný DNS server zadej 192.168.54.7.
-
Restartuj zařízení: Restartuj svá zařízení (nebo jen obnov DHCP), aby si načetla nové nastavení DNS.
-
Užívej si internet: Sleduj v Pi-hole Query Logu, jak se blokují dotazy, a užívej si web bez reklam a sledování.
Za notné pomoci AI - aistudio od google.com
No comments to display
No comments to display