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 provedefinální, krokodladěná zaverze krokempro vytvořením vlastního DNS resolveruinstalaci na čistý systém (Raspberry Pi.Pi Výsledkem5 budes systém,Raspberry který:Pi OS nebo Ubuntu Server). Obsahuje všechny optimalizace pro rychlost a bezpečnost.

Cílové Funkce:

  • BlokujeBlokování reklamyreklam a trackerytrackerů v celé tvé síti pomocí (Pi-hole.hole)

  • Šifruje všechny odchozíifrované DNS dotazy do internetu pomocí(DoH DNS-over-HTTPSpřes (DoH), takže tvůj poskytovatel internetu neuvidí, jaké weby navštěvuješ.dnscrypt-proxy)

  • Ověřujeování pravost DNSpravosti odpovědí pomocí DNSSEC, čímž tě chrání před podvrženými stránkami.(DNSSEC)

  • PodporujeVysoký modernívýkon technologiedíky optimalizované cache jako Encrypted SNI (ECH) pro ještě vyšší soukromí.


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 náš projekt
sudo mkdir -p /opt/dns-server

# Vytvoření adresářů pro konfiguraci 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 konfiguraci 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ů, které se mají použít pro DoH.
# Jsou seřazeny podle preferencí, ale. dnscrypt-proxy si dynamicky vybere nejrychlejší.
# vybereKombinujeme tenzde sněkolik nejlepšíšpičkových, odezvou.na soukromí orientovaných poskytovatelů.
server_names = ['cloudflare', 'quad9-doh', 'adguard-dns']

# Naslouchat na všech síťových rozhraních uvnitř kontejneru na portu 53.
# Pi-hole bude posílat dotazy právě sem.
listen_addresses = ['0.0.0.0:53']

# Zajistí,Vyžadovat žena seserverech službapodporu spustí,klíčových ibezpečnostních když některé servery ze seznamu nejsou dostupnéfunkcí.
require_dnssec = true
require_nolog = true
require_nofilter = true

# Definice zdrojů, odkud se stahuje seznam a parametry všech dostupných serverů.
# Toto je klíčové, aby dnscrypt-proxy věděl, co jména jako 'cloudflare' znamenají.
[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'

# Vypneme blokováBlokováIPv6, protože toto chcemeIPv6 řešitímena úrovniv Pi-hole.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-dnssec.performance-tuning.conf

Vlož do něj následující obsah:

# --- DNSSEC ---
# Zapnutí validace DNSSEC.DNSSEC Zvyšuje bezpečnostpro ověřovánímení pravosti DNS odpovědí.
dnssec

# Důvěryhodná kotva pro DNSSEC.
trust-anchor=.,20326,8,2,E06D44B80B8F1D39A95C0B0D7C65D08458E880409BBC683457104237C7F8EC8D

# Zvě--- CACHE & PERFORMANCE TUNING ---
# Výrazné zvětšení cache pro rychlejšíbleskové odpovědidi.
cache-size=50000

# Nastavení minimální doby platnosti záznamu v cache na opakované5 dotazy.minut (300s).
# Zabraňuje zbytečným dotazům ven i u domén s krátkým TTL.
min-cache-size=10000ttl=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í.

# Verze se v moderních definicích již nepoužívá, ale v Portaineru je stále dobré ji uvést.
version: "3.8"

services:
  # Služba pro šifrování DNS dotazů (DoH)
  dnscrypt-proxy:
    image: klutchell/dnscrypt-proxy:latest
    container_name: dnscrypt-proxy
    restart: unless-stopped
    volumes:
      # Mapuje náš připravený konfigurační adresář do kontejneru.
      - /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:
      # MapujeNahraď porty pouze na192.168.54.7 IP adresuadresou našehotvého Pi, ne na celý systém.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"
      # KLÍČOVÉ NASTAVENÍ: Říká Pi-hole, kamaby se posílatptal dotazy.našeho # Používáme jméno služby 'dnscrypt-proxy' a její interní port 53.proxy.
      DNS1: "dnscrypt-proxy#53"
      DNS2: ""
      # DruhýDůležité servernastavení, nepotřebujeme,aby spoléhámePi-hole napřijímal flexibilitudotazy dnscrypt-proxy.z volumes:celé sítě.
      # MapujeFinální konfigurační adresáře Pi-hole, abypovolení se dataale zachovaladělá pov restartu.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:
      # Dává kontejneru potřebná síťová oprávnění.
      - NET_ADMIN
    depends_on:
      # Zajistí, že se Pi-hole spustí až poté, co je připraven dnscrypt-proxy.
      - dnscrypt-proxy
    networks:
      - dns_network

# Definice naší privátní sítě, ve které spolu kontejnery komunikují.

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 ověřeníbonusy

Nyní musíme udělat poslední dva kliky v rozhraní Pi-hole, aby vše správně fungovalo.

1. Nastavení DNS a rozhraní v Pi-hole GUI (Nezbytné!)

  1. Otevři administraci Pi-hole: http://192.168.54.7/TVOJE_IP_ADRESA/admin.

  2. Přihlas se svým novým heslem.se.

  3. V menu vlevo jdiJdi do Settings -> záložka DNS.

  4. Upstream DNS Servers: Odškrtni všechny Vservery v levém sloupci ODŠKRTNI VŠECHNY předdefinované servery (Google, Cloudflare atd.).sloupci. V pravém sloupci musí býtnech zaškrtnuté pouze jen Custom 1 (IPv4) s hodnotou dnscrypt-proxy#53.

  5. Interface settings: Úplně dole na stránce najdi tuto sekci a vyber možnost Permit all origins. Toto je klíčové, aby Pi-hole odpovídal na dotazy z celé tvé sítě.

  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
  1. Jdi do Tools -> Update Gravity a klikni na Update.

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