In den letzten Wochen hatte ich immer wieder Probleme mit meinen internen DNS-Servern. Immer wenn der Proxmox-Server abgestürzt ist, war kein DNS-Server mehr verfügbar. Dadurch konnte ich weder auf meine eigene Infrastruktur noch auf externe Dienste zugreifen.
Um dieses Problem zu lösen, habe ich AdGuard auf einem Raspberry Pi mit einem CM4-Modul eingerichtet. Das lief zunächst eine Zeit lang sehr gut. Doch nach einem einfachen apt upgrade
hat der Raspberry Pi beim Kernel-Update den Dienst quittiert – aus welchem Grund auch immer. Der DNS-Server war damit erneut nicht mehr erreichbar.
Warum brauche ich überhaupt einen eigenen DNS-Server?
Einen Überblick gibt es hier: Let’s Encrypt SSL-Zertifikate im Homelab nutzen.
Kurz gesagt: Mit einem eigenen DNS-Server behält man die Kontrolle über das Netzwerk, verhindert Tracking und blockiert Werbung zuverlässig auf allen Endgeräten.
Die neue Lösung
Nach den wiederkehrenden Ausfällen habe ich überlegt, wie ich die DNS-Verfügbarkeit in Zukunft sicherstellen kann. Die Antwort: Zwei DNS-Server mit AdGuard. Diese sorgen nicht nur für Ausfallsicherheit, sondern auch für Lastverteilung und eine höhere Stabilität im Netzwerk.
Hab jetzt einen AdGuard (adguard.homelab.de) auf dem Proxmox-Server als Virtuellen Server mit Ubuntu laufen und der zweite DNS-Server läuft auf einem Raspberry Pi CM4 (adguard2.homelab.de) , ebenfalls mit AdGuard bestückt. Nun kam die Herausforderung, wie synchronisiere ich die beiden automatisiert?
Bin dann bei Youtube fündig geworden und hab diese Lösung für die Synchronisierung aufgebaut.
Hier ein Docker Script welches auf Anhieb funktioniert hatte:
--- services: adguardhome-sync: image: ghcr.io/bakito/adguardhome-sync container_name: adguardhome-sync command: run environment: LOG_LEVEL: "info" ORIGIN_URL: "https://adguard.homelab.de" # ORIGIN_WEB_URL: "https://some-other.url" # used in the web interface (default: <origin-url> ORIGIN_USERNAME: "benutzername" ORIGIN_PASSWORD: "benutzerpasswort" REPLICA1_URL: "https://adguard2.homelab.de" REPLICA1_USERNAME: "benutzername" REPLICA1_PASSWORD: "benutzerpasswort" #REPLICA2_URL: "http://192.168.1.4" #REPLICA2_USERNAME: "username" #REPLICA2_PASSWORD: "password" #REPLICA2_API_PATH: "/some/path/control" # REPLICA2_WEB_URL: "https://some-other.url" # used in the web interface (default: <replica-url> # REPLICA2_AUTO_SETUP: true # if true, AdGuardHome is automatically initialized. # REPLICA2_INTERFACE_NAME: 'ens18' # use custom dhcp interface name # REPLICA2_DHCP_SERVER_ENABLED: true/false (optional) enables/disables the dhcp server on the replica CRON: "0 */1 * * *" # run every 2 hours RUN_ON_START: "true" # CONTINUE_ON_ERROR: false # If enabled, the synchronisation task will not fail on single errors, but will log the errors and continue # Configure the sync API server, disabled if api port is 0 API_PORT: 0 # API_DARK_MODE: "true" # API_USERNAME: admin # API_PASSWORD: secret # the directory of the provided tls certs # API_TLS_CERT_DIR: /path/to/certs # the name of the cert file (default: tls.crt) # API_TLS_CERT_NAME: foo.crt # the name of the key file (default: tls.key) # API_TLS_KEY_NAME: bar.key # API_METRICS_ENABLED: "true" # Configure sync features; by default all features are enabled. # FEATURES_GENERAL_SETTINGS: "true" # FEATURES_QUERY_LOG_CONFIG: "true" # FEATURES_STATS_CONFIG: "true" # FEATURES_CLIENT_SETTINGS: "true" # FEATURES_SERVICES: "true" # FEATURES_FILTERS: "true" # FEATURES_DHCP_SERVER_CONFIG: "true" # FEATURES_DHCP_STATIC_LEASES: "true" # FEATURES_DNS_SERVER_CONFIG: "true" # FEATURES_DNS_ACCESS_LISTS: "true" # FEATURES_DNS_REWRITES: "true" # FEATURES_THEME: "true" # if false the UI theme is not synced ports: - 8080:8080 restart: unless-stopped
Hier ein Logauszug wie eine erfolgreiche Synchronisation aussieht:
adguardhome-sync | 2024-12-31T11:21:23.210Z INFO sync sync/sync.go:38 AdGuardHome sync {"version": "v0.6.17", "build": "2024-12-23T07:31:55Z", "os": "linux", "arch": "amd64"} adguardhome-sync | 2024-12-31T11:21:23.211Z INFO sync sync/sync.go:65 Setup cronjob {"cron": "0 */1 * * *", "next-execution": "2024-12-31T12:00:00.000Z"} adguardhome-sync | 2024-12-31T11:21:23.211Z INFO sync sync/sync.go:87 Running sync on startup adguardhome-sync | 2024-12-31T11:21:23.281Z INFO sync sync/sync.go:180 Connected to origin {"from": "adguard.homelab.de", "version": "v0.107.55"} adguardhome-sync | 2024-12-31T11:21:24.002Z INFO sync sync/sync.go:273 Start sync {"from": "adguard.homelab.de", "to": "adguard2.homelab.de"} adguardhome-sync | 2024-12-31T11:21:24.217Z INFO sync sync/sync.go:281 Connected to replica {"from": "adguard.homelab.de", "to": "adguard2.homelab.de", "version": "v0.107.55"} adguardhome-sync | 2024-12-31T11:21:25.527Z WARN sync sync/action-general.go:87 Skipping duplicated rewrite from source {"from": "adguard.homelab.de", "to": "adguard2.homelab.de", "domain": "passwd.homelab.de", "answer": "192.168.101.20"} adguardhome-sync | 2024-12-31T11:21:26.256Z INFO sync sync/sync.go:311 Sync done {"from": "adguard.homelab.de", "to": "adguard2.homelab.de"}
Das ist der ganze Aufbau um eine Synchronisation zwischen zwei DNS-Servern mit AdGuard auzubauen.
Bei Fragen wie immer die Kommentarfunktion nutzen.
Beste Grüße , Joachim