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.
-
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živatelepi
, 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
(neboprivkey.pem
,server.key
atd.) - Plný řetězec certifikátů:
*.zelina.eu.crt
(nebofullchain.pem
,server.crt
atd.) – tento soubor by měl obsahovat tvůj certifikát pro*.zelina.eu
a všechny mezilehlé CA certifikáty.
-
Zkopíruj tyto dva soubory do adresáře
/opt/stacks/technitium-dns/certs/
: Předpokládejme, že se tvé soubory jmenujízelina.eu.key
azelina.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
ls -l /opt/stacks/technitium-dns/certs/
-
Měly bys vidět
fullchain.pem
aprivkey.pem
.
3. Vytvoření Portainer Stack YML souboru
Nyní připravíme YML soubor, který vložíš přímo do Portaineru jako nový Stack.
-
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
-
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íť nadns_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ý.
- Cesty k certifikátům:
-
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.
-
Přihlas se do Portaineru ve svém webovém prohlížeči (např.
http://192.168.54.2:9000
nebo kde máš Portainer). -
V levém navigačním panelu klikni na "Stacks".
-
Klikni na tlačítko "Add stack" (nebo "New stack").
-
Vyplň následující pole:
- Name:
technitium-dns-server
(nebo libovolné smysluplné jméno pro tvůj stack) - Build method: Vyber "Web editor".
- Name:
-
Zkopíruj a vlož celý obsah souboru
technitium-dns-stack.yml
, který jsi vytvořil výše, do textového pole "Web editor". -
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í.
-
Otevři webový prohlížeč a přejdi na adresu:
http://192.168.54.2:5380
-
První spuštění:
- Při prvním spuštění tě Technitium vyzve k nastavení hesla pro administraci. Nastav si silné heslo.
-
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
- Certificate File Path:
- Ujisti se, že je DoH povoleno a že poslouchá na portu
443
. - Ulož změny.
-
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ř. prowww.zelina.eu
). - NS záznamy: Nezapomeň nastavit NS záznamy pro
zelina.eu
ukazující nadns1.zelina.eu
adns2.zelina.eu
. To je klíčové, pokud chceš být autoritativní pro tuto doménu.
-
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í.
- V Technitiu bys měl mít sekci "Recursion" nebo "Forwarders". Ujisti se, že nemáš nastaveny žádné forwardery na Google nebo Cloudflare. Pokud je
6. Testování DNS serveru
Po konfiguraci je čas otestovat, zda vše funguje, jak má.
-
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
adig @192.168.54.2 proxy.zelina.eu
. Měl bys vidět IP adresy, které jsi nastavil.
- Na Windows:
-
Test DNS over HTTPS (DoH):
- Pomocí
curl
(z počítače, který má povolený přístup kdns1.zelina.eu
):
- Pomocí
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ý.
- Poznámka: Parametr
- 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ů na192.168.54.3:53:53
,192.168.54.3:443:443
a192.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 mezidns1.zelina.eu
adns2.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
aprivkey.pem
v/opt/stacks/technitium-dns/certs/
. Po aktualizaci budeš muset restartovat kontejnerdns-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:
-
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.
- Hostitelská cesta:
-
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.
- Hostitelská cesta:
No comments to display
No comments to display