2025-08-19 00:36:46 +02:00
2025-08-19 00:12:56 +02:00
2025-08-19 00:28:11 +02:00
2025-08-19 00:36:46 +02:00

DNS-Watch

Ein Bash-Skript zur Überwachung von DNS-Einträgen (A/AAAA-Records) für definierte Hosts. Bei Änderungen werden Benachrichtigungen per E-Mail und/oder ntfy ausgelöst. Beide Benachrichtigungen sind als Funktionen implementiert und können separat aktiviert/deaktiviert werden.


Features

  • Überwachung beliebiger Hosts/Subdomains
  • Record-Typen: A und AAAA (konfigurierbar)
  • Speicherung des letzten Zustands (Dateien je Host/Typ)
  • Benachrichtigungen:
    • Mail (konfigurierbar; nutzt ein mail-Binary)
    • ntfy mit Bearer-Token-Auth
  • Optionales Logging und Lockfile gegen Parallelstarts
  • Eigener DNS-Resolver optional (z. B. 1.1.1.1)

Voraussetzungen

  • bash (>= 4.0)
  • dig (Paket: dnsutils bzw. bind9-dnsutils)
  • curl (für ntfy)
  • mail-Binary, z. B. über mailutils oder msmtp-mta (nur nötig, wenn Mail genutzt wird)

Installation

  1. Skript ablegen und ausführbar machen:

    sudo cp dns-watch.sh /usr/local/bin/dns-watch.sh sudo chmod +x /usr/local/bin/dns-watch.sh

  2. Optional: Verzeichnisse für State und Log vorab anlegen (werden sonst beim ersten Lauf erstellt):

    sudo mkdir -p /var/lib/dns-watch sudo mkdir -p /var/log && sudo touch /var/log/dns-watch.log


Konfiguration

Öffne den Kopfbereich der Datei dns-watch.sh und passe die Variablen an:

  • Hosts (Beispiele):

    HOSTS=( "domain.com" "sub.domain.com" )

  • Record-Typen:

    RECORD_TYPES=("A" "AAAA")

  • Optionaler Resolver:

    DNS_RESOLVER="1.1.1.1" # leer lassen für System-Resolver

  • State/Log:

    STATE_DIR="/var/lib/dns-watch"
    LOG_FILE="/var/log/dns-watch.log" # leer lassen, um nur stdout zu nutzen

  • Mail:

    MAIL_ENABLED=true
    MAIL_TO="mail@domain.com"
    MAIL_FROM="noreply@domain.com"
    MAIL_SUBJECT_PREFIX="[DNS-Watch]"
    MAIL_BIN="/usr/bin/mail"

  • ntfy:

    NTFY_ENABLED=true
    NTFY_SERVER="https://ntfy.sh"
    NTFY_TOPIC="dns-watch"
    NTFY_TOKEN="DEIN_NTFY_BEARER_TOKEN"
    NTFY_TITLE_PREFIX="[DNS-Watch]"
    NTFY_PRIORITY="default" # min | low | default | high | max
    NTFY_TAGS="satellite,dns"

Hinweis: Setze MAIL_ENABLED=false oder NTFY_ENABLED=false, um einzelne Kanäle zu deaktivieren.


Test

Manueller Testlauf:

/usr/local/bin/dns-watch.sh

Beim ersten Lauf wird bewusst eine Änderung erzeugt (da noch kein Altzustand existiert) und direkt eine Test-Benachrichtigung versendet.


Automatisierung

Cron

Alle 10 Minuten prüfen:

*/10 * * * * /usr/local/bin/dns-watch.sh

Systemd (optional)

Dienstdatei /etc/systemd/system/dns-watch.service:

[Unit]
Description=DNS Watch - monitor DNS record changes
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/dns-watch.sh
Nice=5

Timer /etc/systemd/system/dns-watch.timer:

[Unit]
Description=Run DNS Watch every 10 minutes

[Timer]
OnBootSec=2m
OnUnitActiveSec=10m
AccuracySec=1m
Unit=dns-watch.service

[Install]
WantedBy=timers.target

Aktivieren:

sudo systemctl daemon-reload
sudo systemctl enable --now dns-watch.timer

Verzeichnisse

  • Zustände: /var/lib/dns-watch/
  • Logdatei (optional): /var/log/dns-watch.log
  • Lockfile: /tmp/dns-watch.lock

Beispielausgabe

DNS-Änderung erkannt

Host:    sub.domain.com
Typ:     A
Zeit:    2025-08-18T12:34:56+02:00

Alt:
192.0.2.10

Neu:
192.0.2.55

Diese Meldung wird (je nach Konfiguration) per Mail und/oder ntfy verschickt.


Troubleshooting

  • mail: command not found: Ein Mailer-Paket installieren (z. B. sudo apt install mailutils oder msmtp-mta).
  • dig: command not found: sudo apt install dnsutils (oder passendes Paket für deine Distribution).
  • Keine Benachrichtigung per ntfy: Prüfe NTFY_SERVER, NTFY_TOPIC, NTFY_TOKEN und Netzwerkzugang.
  • Rechteproblem beim Schreiben in /var/lib/dns-watch oder /var/log/dns-watch.log: Skript als root ausführen oder Verzeichnisse mit passenden Rechten anlegen.

Sicherheit

  • Lege sensible Daten (z. B. NTFY_TOKEN) nach Möglichkeit nicht im Git ab. Alternativ kannst du das Skript so erweitern, dass es Tokens aus Umgebungsvariablen lädt.
  • Achte auf sichere Mail- und ntfy-Endpunkte.

Lizenz

MIT License

License License | Matrix Matrix | Matrix Mastodon

Description
Überwacht IP Änderungen von DNS/Domains und benachrichtigt per Ntfy & Email
Readme MIT 35 KiB
Languages
Shell 100%