Skip to main content

Instalace technitium-dns serveru na portaineru Raspberry PI

1. Příprava adresářů a souborů na RPi5

Než nasadíme Technitium přes Portainer, potřebujeme připravit adresářovou strukturu a umístit tam tvůj wildcard certifikát.

  1. Připoj se k RPi5 (192.168.54.2) přes SSH.


    ssh pi@192.168.54.2

    Vytvoř adresáře pro Technitium data a certifikáty:

     

    sudo mkdir -p /opt/stacks/technitium-dns/data
    sudo mkdir -p /opt/stacks/technitium-dns/certs
    Bash

      • /opt/stacks/technitium-dns/data: Zde budou uložena všechna konfigurační data Technitium DNS serveru (zóny, nastavení cache, logy atd.).
      • /opt/stacks/technitium-dns/certs: Zde umístíme tvůj wildcard SSL certifikát.
    • Nastav správná oprávnění pro adresáře: Je důležité, aby uživatel, pod kterým Docker běží (obvykle root nebo Docker démon), měl k těmto adresářům přístup. Nastavíme vlastníka na tvého uživatele pi, aby si mohl s adresáři snadno pracovat.

sudo chown -R pi:pi /opt/stacks

2. Umístění wildcard certifikátu

Máš svůj wildcard certifikát pro zelina.eu. Typicky se jedná o dva klíčové soubory:

  • Privátní klíč: *.zelina.eu.key (nebo privkey.pem, server.key atd.)
  • Plný řetězec certifikátů: *.zelina.eu.crt (nebo fullchain.pem, server.crt atd.) – tento soubor by měl obsahovat tvůj certifikát pro *.zelina.eu a všechny mezilehlé CA certifikáty.
  1. Zkopíruj tyto dva soubory do adresáře /opt/stacks/technitium-dns/certs/: Předpokládejme, že se tvé soubory jmenují zelina.eu.key a zelina.eu.crt.

cp /cesta/k/tvemu/certifikatu/zelina.eu.key /opt/stacks/technitium-dns/certs/privkey.pem
cp /cesta/k/tvemu/certifikatu/zelina.eu.crt /opt/stacks/technitium-dns/certs/fullchain.pem
  • Důležité: Přejmenuj soubory na privkey.pem a fullchain.pem pro konzistenci a snadnější konfiguraci v Technitiu. Ujisti se, že fullchain.pem obsahuje jak tvůj certifikát, tak i certifikát(y) vydávající autority.

  • Ověř, že soubory jsou na místě:

ls -l /opt/stacks/technitium-dns/certs/
  1. Měly bys vidět fullchain.pem a privkey.pem.


3. Vytvoření Portainer Stack YML souboru

Nyní připravíme YML soubor, který vložíš přímo do Portaineru jako nový Stack.

  1. Vytvoř soubor technitium-dns-stack.yml (např. na svém lokálním počítači nebo přímo na RPi5, pokud jsi připojen přes SSH):

nano /opt/stacks/technitium-dns/technitium-dns-stack.yml

Vlož následující obsah do souboru:

version: '3.8'

services:
  technitium_dns:
    image: technitium/dns-server:latest
    container_name: technitium_dns_server # Pojmenování kontejneru
    restart: unless-stopped
    hostname: dns1.zelina.eu # Hostname kontejneru
    ports:
      # Mapování portů z kontejneru na hostitele
      # Pokud je na hostiteli již obsazen port (např. 53), tento stack selže.
      # Zajišťuje, že hostitel bude naslouchat na těchto portech.
      - "53:53/udp"      # Standardní DNS dotazy (UDP)
      - "53:53/tcp"      # Standardní DNS dotazy (TCP)
      - "5380:5380/tcp"  # Webové administrační rozhraní Technitium
      - "443:443/tcp"    # DNS over HTTPS (DoH)
    volumes:
      # Trvalá data Technitium DNS serveru (konfigurace, zóny, logy)
      # Adresář na hostiteli: /opt/stacks/technitium-dns/data
      - /opt/stacks/technitium-dns/data:/etc/dns
      # Cache DNS serveru
      # Adresář na hostiteli: /opt/stacks/technitium-dns/cache
      - /opt/stacks/technitium-dns/cache:/var/cache/dns
      # SSL/TLS certifikáty pro DNS over HTTPS (DoH)
      # Adresář na hostiteli: /opt/stacks/technitium-dns/certs
      # Soubory uvnitř musí být: privkey.pem a fullchain.pem
      - /opt/stacks/technitium-dns/certs:/etc/ssl/certs:ro # :ro = read-only pro bezpečnost
    environment:
      # Základní doména serveru pro autoritativní zóny
      - DNS_SERVER_DOMAIN=zelina.eu
      # Vypnutí IPv6 uvnitř kontejneru
      - DOTNET_SYSTEM_NET_DISABLEIPV6=1
      - DNS_SERVER_IPV6_ENABLED=false
      # Preference IPv4 pro odchozí dotazy
      - DNS_SERVER_PREFER_IPV4=true
      # Nastavení rekurze
      - DNS_SERVER_RECURSION_TIMEOUT=2000
      - DNS_SERVER_RECURSION_RETRIES=3
      - DNS_SERVER_RECURSION_ALLOW_ONLY_PRIVATE_NETWORKS=false # Povoluje rekurzi odkudkoliv
      # Nastavení cache
      - DNS_SERVER_CACHE_ENABLED=true
      - DNS_SERVER_CACHE_MINIMUM_TTL=60
      - DNS_SERVER_CACHE_MAXIMUM_TTL=3600
      - DNS_SERVER_CACHE_NEGATIVE_TTL=60
      # Povolení DNSSEC validace pro zvýšení bezpečnosti
      - DNS_SERVER_DNSSEC_VALIDATION=true
      # Port pro webové administrační rozhraní
      - DNS_SERVER_WEB_ADMIN_PORT=5380
    sysctls:
      # Další zajištění vypnutí IPv6 na úrovni jádra pro tento kontejner
      - net.ipv6.conf.all.disable_ipv6=1
    networks:
      - dns_network # Připojení k definované Docker síti

networks:
  dns_network:
    name: technitium_dns_network # Pojmenování Docker sítě pro tento Stack
    driver: bridge
    # attachable: true - Tato volba je obvykle potřeba pro Portainer agenta,
    # ale pro standardní bridge network není nezbytně nutná.
    # Pro jednoduchost ji zde ponecháme.
    attachable: true
  1. Klíčové změny a vysvětlení:

    • Cesty k certifikátům: volumes: - /opt/stacks/technitium-dns/certs:/etc/ssl/certs:ro Tato řádka mountuje tvůj adresář s certifikáty z hostitelského systému do kontejneru na cestu /etc/ssl/certs. Technitium DNS Server bude později schopen tyto certifikáty načíst pro HTTPS.
    • DNS_SERVER_DNSSEC_VALIDATION=true: Důrazně doporučuji tuto hodnotu nechat na true pro zapnutí DNSSEC validace. To výrazně zvyšuje bezpečnost tvého DNS serveru.
    • DNS_SERVER_IPV6_ENABLED=false a sysctls: Toto zajistí, že IPv6 bude v kontejneru vypnuto, jak jsi si přál.
    • Port 443: Přidán 192.168.54.2:443:443/tcp pro mapování standardního HTTPS portu pro DNS over HTTPS.
    • Network dns_private_network: Pro lepší přehlednost jsem přejmenoval síť na dns_private_network. Ujisti se, že tato síť není v konfliktu s jinými sítěmi v tvém Dockeru.
    • Portainer Agent (zakomentováno): Ponechal jsem jej zakomentovaný. Typicky Portainer Agent běží jako samostatný kontejner nebo je nasazen přímo na hostiteli, nikoli jako součást každého stacku. Můžeš jej nechat tak, jak ho máš nainstalovaný.
  2. Ulož a zavři soubor (Ctrl+X, Y, Enter).


4. Nasazení Stacku v Portaineru

Nyní, když máš připravený YML soubor a adresáře, můžeš nasadit stack v Portaineru.

  1. Přihlas se do Portaineru ve svém webovém prohlížeči (např. http://192.168.54.2:9000 nebo kde máš Portainer).

  2. V levém navigačním panelu klikni na "Stacks".

  3. Klikni na tlačítko "Add stack" (nebo "New stack").

  4. Vyplň následující pole:

    • Name: technitium-dns-server (nebo libovolné smysluplné jméno pro tvůj stack)
    • Build method: Vyber "Web editor".
  5. Zkopíruj a vlož celý obsah souboru technitium-dns-stack.yml, který jsi vytvořil výše, do textového pole "Web editor".

  6. Klikni na tlačítko "Deploy the stack".

Portainer stáhne image technitium/dns-server:latest, vytvoří síť dns_private_network a spustí kontejner dns-technitium-server.


5. Prvotní konfigurace Technitium DNS Serveru (přes webové rozhraní)

Po spuštění kontejneru je potřeba Technitium DNS Server dokonfigurovat přes jeho webové rozhraní.

  1. Otevři webový prohlížeč a přejdi na adresu: http://192.168.54.2:5380

  2. První spuštění:

    • Při prvním spuštění tě Technitium vyzve k nastavení hesla pro administraci. Nastav si silné heslo.
  3. Konfigurace DNS over HTTPS (DoH):

    • Jakmile se přihlásíš do webového rozhraní, najdi sekci pro "DNS over HTTPS (DoH)" nebo "HTTPS (DoH)".
    • Zde budeš muset zadat cesty k tvým certifikátům. Vzhledem k tomu, že jsme je namountovali do /etc/ssl/certs uvnitř kontejneru, cesty budou:
      • Certificate File Path: /etc/ssl/certs/fullchain.pem
      • Certificate Key File Path: /etc/ssl/certs/privkey.pem
    • Ujisti se, že je DoH povoleno a že poslouchá na portu 443.
    • Ulož změny.
  4. Konfigurace autoritativních zón (zelina.eu):

    • Přejdi do sekce "Zones" nebo "Authoritative Zones".
    • Klikni na "Add Zone" a přidej zónu pro zelina.eu.
    • Zde můžeš vytvořit záznamy pro dns1.zelina.eu (A záznam na 192.168.54.2), dns2.zelina.eu (A záznam na 192.168.54.3), proxy.zelina.eu (A záznam na 192.168.54.6) a jakékoli další záznamy (např. pro www.zelina.eu).
    • NS záznamy: Nezapomeň nastavit NS záznamy pro zelina.eu ukazující na dns1.zelina.eu a dns2.zelina.eu. To je klíčové, pokud chceš být autoritativní pro tuto doménu.
  5. Ověření rekurze a DNSSEC:

    • V Technitiu bys měl mít sekci "Recursion" nebo "Forwarders". Ujisti se, že nemáš nastaveny žádné forwardery na Google nebo Cloudflare. Pokud je DNS_SERVER_RECURSION_ALLOW_ONLY_PRIVATE_NETWORKS=false, server by měl provádět rekurzi na kořenové servery.
    • Zkontroluj, zda je DNSSEC validace aktivní.

6. Testování DNS serveru

Po konfiguraci je čas otestovat, zda vše funguje, jak má.

  1. Test standardního DNS (UDP/TCP) z jiného zařízení v síti: Nastav DNS server pro tvé zařízení na 192.168.54.2 a zkus přeložit domény.

    • Na Windows: nslookup google.com 192.168.54.2
    • Na Linuxu/macOS: dig @192.168.54.2 google.com
    • Zkus přeložit i své vlastní domény, např. dig @192.168.54.2 dns1.zelina.eu a dig @192.168.54.2 proxy.zelina.eu. Měl bys vidět IP adresy, které jsi nastavil.
  2. Test DNS over HTTPS (DoH):

    • Pomocí curl (z počítače, který má povolený přístup k dns1.zelina.eu):
curl -H 'accept: application/dns-json' 'https://dns1.zelina.eu/dns-query?name=google.com&type=A' --cacert /cesta/k/tvemu/certifikatu/zelina.eu.crt
      • Poznámka: Parametr --cacert je potřeba, pokud tvůj systém nezná tvůj vlastní certifikát. Pokud jsi Certifikát řádně nainstaloval do trust store tvého systému, nemusí být nutný.
    • Konfigurace prohlížeče (Firefox/Chrome): Nakonfiguruj Firefox nebo Chrome (jak jsem popsal dříve) pro použití tvého DoH serveru s URL: https://dns1.zelina.eu/dns-query. Poté zkontroluj, zda se webové stránky načítají a zda prohlížeč používá tvůj DoH server.

Další důležité body

  • Záložní DNS server (192.168.54.3): Pro druhý RPi5 postupuj obdobně. Zkopíruj stejný stack, jen změň container_name a hlavně mapování portů na 192.168.54.3:53:53, 192.168.54.3:443:443 a 192.168.54.3:5380:5380. Také budeš potřebovat mít stejné certifikáty a zóny v datovém adresáři. Technitium podporuje DNS zónové transfery (AXFR/IXFR), což bys mohl nastavit pro automatickou synchronizaci zón mezi dns1.zelina.eu a dns2.zelina.eu.
  • Portainer Agent: Pokud již máš Portainer Agenta spuštěného jako samostatný kontejner (což je doporučený způsob), pak jej nemusíš vkládat do tohoto stacku.
  • Obnova certifikátů: Pamatuj, že wildcard certifikáty se časem expirují. Budeš je muset pravidelně obnovovat a po obnově aktualizovat soubory fullchain.pem a privkey.pem v /opt/stacks/technitium-dns/certs/. Po aktualizaci budeš muset restartovat kontejner dns-technitium-server (nebo stack) v Portaineru, aby se načetly nové certifikáty.
  • Monitoring a logy: Pravidelně kontroluj logy Technitium DNS serveru přes Portainer (v sekci "Containers" klikni na kontejner a pak na "Logs") pro případné chyby nebo varování.

S tímto nastavením bys měl mít plně funkční autoritativní DNS server s rekurzí a DoH, který spravuje tvé domény a nepoužívá externí forwardery.

Kořenové DNS adresáře (Root Hints) v Technitium DNS Serveru

Skvělá zpráva: U Technitium DNS Serveru se o stažení a správu kořenových DNS adresářů stará samotný software automaticky. Nemusíš je stahovat ručně jako u Unboundu. Technitium si je stáhne při prvním spuštění (nebo kdykoli je to potřeba) a aktualizuje je samo.

Kde jsou uloženy? Tyto soubory, stejně jako veškerá konfigurace serveru (autoritativní zóny, nastavení cache, logy, atd.), se ukládají do adresáře, který jsi namountoval do kontejneru jako /etc/dns. Tedy na tvém hostitelském RPi to bude v adresáři:

  • /opt/stacks/technitium-dns/data

Nemusíš se o ně tedy starat, systém Technitium je udržuje aktuální.


Důležité adresáře a soubory pro Technitium DNS Server

Provoz Technitium DNS Serveru v Dockeru s Portainerem vyžaduje dva hlavní adresáře na hostitelském systému RPi, které se mapují do kontejneru:

  1. Datový adresář:

    • Hostitelská cesta: /opt/stacks/technitium-dns/data
    • Cesta v kontejneru: /etc/dns
    • Účel: Toto je nejdůležitější adresář. Ukládají se zde všechna konfigurace, nastavení zón, cache, logy, a také automaticky stažené kořenové hinty. Vše, co Technitium potřebuje pro svůj provoz a persistentní uložení dat, je zde.
    • Co v něm budeš vidět: Po spuštění kontejneru a konfiguraci serveru přes webové rozhraní se zde objeví soubory jako config.json, zones.json, adresáře pro cache a další data.
  2. Adresář pro SSL/TLS certifikáty:

    • Hostitelská cesta: /opt/stacks/technitium-dns/certs
    • Cesta v kontejneru: /etc/ssl/certs (nebo jiná cesta, pokud bys to chtěl namountovat jinak, ale toto je doporučená a obecně používaná konvence pro certifikáty)
    • Účel: Zde se ukládají tvé soubory certifikátu (fullchain.pem) a privátního klíče (privkey.pem) pro zajištění HTTPS komunikace pro webové rozhraní a hlavně pro DNS over HTTPS (DoH).
    • Důležité: Jak jsem zmínil, tyto soubory tam musíš zkopírovat ručně ze zdroje tvého wildcard certifikátu a po každé obnově certifikátu je aktualizovat a restartovat kontejner.