Initial
This commit is contained in:
commit
bf8ed3e263
52
Readme.md
Normal file
52
Readme.md
Normal 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
62
customdnscheck.v1.ps1
Normal 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
|
Loading…
x
Reference in New Issue
Block a user