This commit is contained in:
scriptos 2025-03-18 20:27:31 +01:00
commit bf8ed3e263
2 changed files with 114 additions and 0 deletions

52
Readme.md Normal file
View File

@ -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

62
customdnscheck.v1.ps1 Normal file
View File

@ -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 "<prtg><error>1</error><text>Fehlende Parameter! Nutzung: -Domain example.com -RecordType A -DNSServer ns1.example.com</text></prtg>"
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 "<prtg><error>1</error><text>DNS-Server $DNSServer nicht erreichbar!</text></prtg>"
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 = @"
<prtg>
<result>
<channel>$RecordType Record</channel>
<value>$Status</value>
<valueLookup>prtg.standardlookups.yesno.stateyesok</valueLookup>
</result>
<text>$RecordType for ${Domain}: ${RecordData}</text>
</prtg>
"@
Write-Output $xml