Raspberry Pi 4

Zwei DNS-Server im Homelab mit AdGuard

adguard

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.

Wir benötigen Ihre Zustimmung um den Inhalt von YouTube laden zu können.

Mit dem Klick auf das Video werden durch den mit uns gemeinsam Verantwortlichen Youtube [Google Ireland Limited, Irland] das Video abgespielt, auf Ihrem Endgerät Skripte geladen, Cookies gespeichert und personenbezogene Daten erfasst. Damit kann Google Aktivitäten im Internet verfolgen und Werbung zielgruppengerecht ausspielen. Es erfolgt eine Datenübermittlung in die USA, diese verfügt über keinen EU-konformen Datenschutz. Weitere Informationen finden Sie hier.

Jmx0O2lmcmFtZSB0aXRsZT0mcXVvdDtBZEd1YXJkIEhvbWUgU3luYyEgU3luY2hyb25pemUgc2V0dGluZ3MgYmV0d2VlbiB0d28gb3IgbW9yZSBBZEd1YXJkIFNlcnZlcnMuJnF1b3Q7IHdpZHRoPSZxdW90OzEyMDAmcXVvdDsgaGVpZ2h0PSZxdW90OzY3NSZxdW90OyBzcmM9JnF1b3Q7aHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvS0FCV3BBZnlxc3M/ZmVhdHVyZT1vZW1iZWQmcXVvdDsgZnJhbWVib3JkZXI9JnF1b3Q7MCZxdW90OyBhbGxvdz0mcXVvdDthY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgY2xpcGJvYXJkLXdyaXRlOyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlOyB3ZWItc2hhcmUmcXVvdDsgcmVmZXJyZXJwb2xpY3k9JnF1b3Q7c3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbiZxdW90OyBhbGxvd2Z1bGxzY3JlZW4mZ3Q7Jmx0Oy9pZnJhbWUmZ3Q7

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

Joachim

Aus Leidenschaft für Technik. Aktuelle Themen sind Datensicherheit, Software für Datenschutz, Mobile Geräte, Smartphone Sicherheit und Anwendungen, Raspberry Pi Geek.

Alle Beiträge ansehen von Joachim →