commit bf8ed3e26366fcfe24bd908319c41037698ed967 Author: scriptos Date: Tue Mar 18 20:27:31 2025 +0100 Initial diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..7b60d0d --- /dev/null +++ b/Readme.md @@ -0,0 +1,52 @@ +# PRTG Custom DNS Monitoring Script + +Dieses Skript ermöglicht es, DNS-Records (A, AAAA, MX, TXT, CNAME, NS) über PRTG zu überwachen. Es nutzt PowerShell zur DNS-Abfrage über einen spezifischen Nameserver und liefert die Ergebnisse im PRTG-XML-Format zurück. + +## 📌 Funktionen +✅ Unterstützt verschiedene DNS-Record-Typen: A, AAAA, MX, TXT, CNAME, NS +✅ Überprüfung eines spezifischen Nameservers +✅ Fehlererkennung bei nicht erreichbaren Nameservern oder fehlenden DNS-Records +✅ Ausgabe im PRTG-kompatiblen XML-Format +✅ Anpassbare Parameter für flexible Nutzung + +## 🛠 Einrichtung in PRTG +### 1️⃣ Skript speichern +Speichere die Datei als **`CustomDNSCheck.ps1`** unter: +```plaintext +C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\EXEXML\ +``` + +### 2️⃣ Neuen Sensor in PRTG erstellen +1. **Neuen Sensor hinzufügen** +2. **Sensor-Typ:** `EXE/Script Advanced` +3. **Skript auswählen:** `CustomDNSCheck.ps1` +4. **Parameter hinzufügen:** + ``` + -Domain "mail.techniverse.net" -RecordType "MX" -DNSServer "ns1.your-server.de" + ``` +5. **Sensor speichern & testen** + +### 3️⃣ Alternative: Platzhalter für dynamische DNS-Server +Falls du den DNS-Server aus dem Gerät übernehmen möchtest: +```plaintext +-Domain "mail.techniverse.net" -RecordType "MX" -DNSServer "%host" +``` + +## 🚦 Wann wird der Sensor rot? +🔴 **Sensor wird rot, wenn:** +- Der DNS-Server **nicht erreichbar** ist +- Der DNS-Server **keine Antwort gibt** +- Die **Domain nicht existiert** oder kein passender Record vorhanden ist +- Ein **falscher Record-Typ** abgefragt wird + +🟢 **Sensor bleibt grün, wenn:** +- Die DNS-Abfrage erfolgreich war und gültige Daten zurückliefert + +## 🔧 Erweiterungsmöglichkeiten +- Weitere DNS-Record-Typen hinzufügen +- Logging aktivieren +- Zusätzliche Fehlerbehandlung + +--- +**Autor:** Patrick Asmus +**Lizenz:** MIT diff --git a/customdnscheck.v1.ps1 b/customdnscheck.v1.ps1 new file mode 100644 index 0000000..32b7b95 --- /dev/null +++ b/customdnscheck.v1.ps1 @@ -0,0 +1,62 @@ +# Beschreibung: - +# Autor: Patrick Asmus +# Web: https://www.techniverse.net +# Version: 1.0 +# Datum: 18.03.2025 +# Modifikation: Initial +##################################################### + +param ( + [string]$Domain, + [string]$RecordType, + [string]$DNSServer +) + +# Sicherstellen, dass alle Parameter gesetzt sind +if (-not $Domain -or -not $RecordType -or -not $DNSServer) { + Write-Output "1Fehlende Parameter! Nutzung: -Domain example.com -RecordType A -DNSServer ns1.example.com" + exit 1 +} + +# Timeout-Handling: Prüfe, ob der DNS-Server erreichbar ist +$PingResult = Test-NetConnection -ComputerName $DNSServer -Port 53 -WarningAction SilentlyContinue -InformationLevel Quiet + +if (-not $PingResult) { + Write-Output "1DNS-Server $DNSServer nicht erreichbar!" + exit 1 +} + +# DNS-Abfrage ausführen +try { + $Result = Resolve-DnsName -Name $Domain -Type $RecordType -Server $DNSServer -ErrorAction Stop + + # Je nach Record-Typ unterschiedliche Rückgabe-Informationen extrahieren + switch ($RecordType.ToUpper()) { + "A" { $RecordData = $Result.IPAddress } + "AAAA" { $RecordData = $Result.IPAddress } + "MX" { $RecordData = $Result.NameExchange } + "TXT" { $RecordData = ($Result.Strings -join ", ") } + "CNAME" { $RecordData = $Result.NameHost } + "NS" { $RecordData = $Result.NameHost } + default { $RecordData = "Unbekannter Record-Typ: $RecordType" } + } + + $Status = 1 # Erfolgreich +} catch { + $RecordData = "Fehler: Keine Antwort von $DNSServer für $RecordType" + $Status = 0 # Fehler +} + +# XML-Ausgabe für PRTG +$xml = @" + + + $RecordType Record + $Status + prtg.standardlookups.yesno.stateyesok + + $RecordType for ${Domain}: ${RecordData} + +"@ + +Write-Output $xml