Skip to main content

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.7).


Čá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ů. dnscrypt-proxy si dynamicky vybere nejrychlejší.
# Kombinujeme zde několik špičkových, na soukromí orientovaných poskytovatelů.
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'

# Blokování IPv6 řešíme až v Pi-hole, zde ho vypneme.
block_ipv6 = false

Ulož soubor a zavři editor (Ctrl+X, poté Y a Enter).

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í.
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
    volumes:
      - /opt/dns-server/dnscrypt-proxy:/config
    networks:
      - dns_network

  # 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.7 IP adresou tvého serveru!
      - "192.168.54.7:53:53/tcp"
      - "192.168.54.7:53:53/udp"
      - "192.168.54.7:80:80/tcp"
    environment:
      TZ: "Europe/Prague"
      WEBPASSWORD: "ZdeZadejSveNoveSuperSilneHeslo"
      # Říká Pi-hole, aby se ptal našeho dnscrypt-proxy.
      DNS1: "dnscrypt-proxy#53"
      DNS2: ""
      # Důležité nastavení, aby Pi-hole přijímal dotazy z celé sítě.
      # Finální povolení se ale dělá v GUI!
      DNSMASQ_LISTENING: all
    volumes:
      - /opt/dns-server/pihole/etc-pihole:/etc/pihole
      - /opt/dns-server/pihole/etc-dnsmasq.d:/etc/dnsmasq.d
    cap_add:
      - NET_ADMIN
    depends_on:
      - dnscrypt-proxy
    networks:
      - dns_network

networks:
  dns_network:
    driver: bridge

Kroky pro nasazení v Portaineru

  1. Otevři si webové rozhraní Portaineru.

  2. V menu vlevo klikni na Stacks.

  3. Vpravo nahoře klikni na + Add stack.

  4. Zadej Název stacku, například dns-server.

  5. Ujisti se, že je vybrána volba Web editor.

  6. Zkopíruj celý YAML kód uvedený výše a vlož ho do textového pole.

  7. NEZAPOMEŇ změnit ZdeZadejSveNoveSuperSilneHeslo na své vlastní, bezpečné heslo.

  8. 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é!)

  1. Otevři http://TVOJE_IP_ADRESA/admin.

  2. Přihlas se.

  3. Jdi do Settings -> DNS.

  4. 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 dnscrypt-proxy#53.

  5. Interface settings: Úplně dole vyber Permit all origins.

  6. Klikni na Save.

2. Bonus: Zvýšení bezpečnosti (Doporučeno)

Přidej do Pi-hole seznamy pro blokování malwaru a phishingu.

  1. Jdi do Adlists.

  2. 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 
  1. (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)
  2. 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)

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.7

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