# ============================================================================= # 02_stack-dns.yml – Phase 2 # DNS-Stack: unbound (rekursiver Resolver) + pihole (DNS-Filter) # ============================================================================= # # Starten in dieser Reihenfolge (depends_on erzwingt das bereits): # 1. unbound hoch + healthy abwarten # 2. dann pihole hoch # # WICHTIG vor dem Start: # - Wenn pihole dein einziger DNS-Server ist: # Router-DNS kurz auf 1.1.1.1 setzen, migrieren, zurücksetzen # - pihole macht bei dir kein DHCP → bridge (dns_net) ist korrekt # - Port 53 muss öffentlich bleiben (DNS-Dienst für LAN) # # ============================================================================= networks: dns_net: external: true services: # --------------------------------------------------------------------------- # UNBOUND – Rekursiver DNS-Resolver # Braucht Outbound ins Internet (rekursive Auflösung zu Root-Servern). # dns_net ist daher nicht internal:true. # Kein eingehender Host-Port — pihole erreicht unbound per DNS-Name. # --------------------------------------------------------------------------- unbound: image: kutzilla/unbound:latest container_name: unbound restart: unless-stopped security_opt: - no-new-privileges:true networks: dns_net: ipv4_address: 172.23.0.10 healthcheck: test: ["CMD-SHELL", "drill @127.0.0.1 cloudflare.com || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 10s labels: net.unraid.docker.managed: "dockerman" net.unraid.docker.icon: "https://raw.githubusercontent.com/kutzilla/unraid-templates/master/images/unbound.png" # --------------------------------------------------------------------------- # PIHOLE – DNS-Filter # Upstream: "unbound#53" → Docker-DNS löst "unbound" → 172.23.0.10 # Port 53 bleibt öffentlich (DNS-Dienst für LAN ist zwingend nötig). # Admin-UI auf Port 8155 bleibt direkt erreichbar (DNS muss auch ohne # Proxy funktionieren — Henne-Ei-Problem mit Traefik vermeiden). # --------------------------------------------------------------------------- binhex-official-pihole: image: pihole/pihole:2026.02.0 # gepinnt auf bekannte stabile Version container_name: binhex-official-pihole restart: unless-stopped depends_on: unbound: condition: service_healthy networks: dns_net: ipv4_address: 172.23.0.20 ports: - "53:53/tcp" - "53:53/udp" - "8155:80/tcp" volumes: - /mnt/user/appdata/official-pihole/pihole:/etc/pihole - /mnt/user/appdata/official-pihole/pihole/dnsmasq:/etc/dnsmasq.d environment: TZ: "Europe/Berlin" WEBPASSWORD: "${PIHOLE_WEBPASSWORD}" PIHOLE_DNS_: "unbound#53" DNSSEC: "true" DNSMASQ_LISTENING: "all" healthcheck: test: ["CMD", "curl", "-sf", "http://localhost/admin/"] interval: 30s timeout: 10s retries: 3 start_period: 20s labels: net.unraid.docker.managed: "dockerman" net.unraid.docker.icon: "https://raw.githubusercontent.com/binhex/docker-templates/master/binhex/images/official-pihole-icon.png" net.unraid.docker.webui: "http://[IP]:[PORT:8155]/admin"