196 lines
4.9 KiB
Markdown
196 lines
4.9 KiB
Markdown
# 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
|
|
|
|
|
|
|
|
<p align="center">
|
|
<img src="https://assets.techniverse.net/f1/git/graphics/gray0-catonline.svg" alt="">
|
|
</p>
|
|
|
|
<p align="center">
|
|
<img src="https://assets.techniverse.net/f1/logos/small/license.png" alt="License" width="15" height="15"> <a href="./dns-watch/src/branch/main/LICENSE">License</a> | <img src="https://assets.techniverse.net/f1/logos/small/matrix2.svg" alt="Matrix" width="15" height="15"> <a href="https://matrix.to/#/#community:techniverse.net">Matrix</a> | <img src="https://assets.techniverse.net/f1/logos/small/mastodon2.svg" alt="Matrix" width="15" height="15"> <a href="https://social.techniverse.net/@donnerwolke">Mastodon</a>
|
|
</p> |