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