Inhaltsverzeichnis
Letzte Aktualisierung am 12.10.2024, 09:10:02 Uhr
Wer eine eigene DNS-Infrastruktur betreibt, möchte natürlich auch wissen was die einzelne DNS-Server den ganzen Tag „zu tun“ haben. Interessant ist natürlich auch welche Typen von Records (un)regelmäßigen Abständen abgefragt werden. In meiner Testumgebung nutze ich BIND9 unter Ubuntu Serever 22.04 LTS. Für das Monitoring kommt die kostenlose Variante von Paessler PRTG zum Einsatz.
Konfiguration BIND9
BIND9 bringt standardmäßig einen Statistik Channel, welcher die Werte als XML als auch JOSN zurückgibt.
URL | Typ |
http://sns01.lab03.daniel.wydler.eu:8053/ | XML Ausgabe |
http://sns01.lab03.daniel.wydler.eu:8053/json | JSON Ausgabe |
Damit dieser verwendet werden kann, muss die Konfiguration (/etc/bind/named.conf.options) des Nameservers ergänzt werden.
options { ... statistics-file "/var/log/named/named.stats"; }; statistics-channels { inet * port 8053 allow { any; }; };
Somit lauscht der Port 8053 auf 0.0.0.0 und jede IP-Adresse (any) dürfen auf die Seite zugreifen. Die Konfiguration speichern und schließend.
Der gewählte Pfad für die Statistikdatei wurde auf Grund der Standard Konfiguration von AppArmor gewählt (/etc/apparmor.d/usr.sbin.named). Dort ist nämlich definiert, dass auf /var/log/named/ Dateien erstellt und geschrieben werden dürfen.
Den BIND9 Dienst neu laden:
systemctl reload named.service
Prüfen, ob der Socket erstellt worden ist:
netstat -tulpen | grep ":8053" tcp 0 0 0.0.0.0:8053 0.0.0.0:* LISTEN 114 21935 937/named
An dieser Stelle empfehle ich, dass der Zugriff auf die Statistik Informationen an der lokalen Firewall des DNS-Server reglementiert wird. Somit wird dies nicht anwendungsspezifisch, sondern zentral an einer Stelle verwaltet. Was auch eine mögliche Fehlersuche vereinfacht.
Konfiguration lokale Firewall
Ich nutze inzwischen auch auf diesen Server nftables und habe in der Datei /etc/nftables.conf folgende Zeile ergänzt:
... ip saddr 192.168.200.18 tcp dport 8053 counter packets 0 bytes 0 accept ...
Danach die Änderungen speichern und den Editor schließen.
Änderungen übernehmen:
nft -f /etc/nftables.conf
Prüfen, ob die Firewall Regeln geladen bzw. aktiv sind:
nft list ruleset
Einrichtung einer Cronjobs
Damit die Statistik Datei regelmäßig aktualisiert wird, ist leider eine weitere Konfiguration möglich. Hierzu ergänze ich die Datei /etc/crontab um folgende Zeile:
* * * * * root rndc stats
Somit wird die Datei rund um die Uhr, jede Minute aktualisiert. Das ist dahin gehend wichtig, weil später in PRTG jeder Sensor auch einen Prüfintervall hat. Somit kann dieser im besten Fall ebenfalls jede Minute Daten abrufen.
Ob die Aufgabe erfolgreich ausgeführt wird, kann in der Datei /var/log/syslog jederzeit geprüft werden.
tail /var/log/syslog | grep "rndc" Oct 22 10:37:01 sns01 CRON[1118]: (root) CMD (rndc stats) Oct 22 10:38:01 sns01 CRON[1131]: (root) CMD (rndc stats) Oct 22 10:39:01 sns01 CRON[1146]: (root) CMD (rndc stats) Oct 22 10:40:01 sns01 CRON[1151]: (root) CMD (rndc stats) Oct 22 10:41:01 sns01 CRON[1155]: (root) CMD (rndc stats) Oct 22 10:42:01 sns01 CRON[1185]: (root) CMD (rndc stats) Oct 22 10:43:01 sns01 CRON[1209]: (root) CMD (rndc stats) Oct 22 10:44:01 sns01 CRON[1213]: (root) CMD (rndc stats) Oct 22 10:45:01 sns01 CRON[1218]: (root) CMD (rndc stats)
Custom Sensor in PRTG erstellen
Zuerst muss auf der PRTG Probe der Custom Sensor abgelegt werden. In meinen Fall ist das korrekte Verzeichnis „D:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\EXEXML“.
Dort habe ich eine neue Datei mit dem Namen „paessler-prtg_bind-stats-dns-queries.ps1“ erstellt. In diese Datei die aktuelle Version des Sensors einfügen, speichern und schließen. Alternativ kann die Datei natürlich auch direkt von meinem Git Repository geklont werden.
Zuerst lege ich in der PRTG WebUI ein neues Gerät mit dem FQDN des DNS-Servers an. In meinem Fall ist der Gerätenamen und DNS-Namen identisch: sns01.lab03.daniel.wydler.eu.
Danach füge ich dem Gerät einen neuen Sensor hinzu:
Wie man sieht, muss dem Skript drei Parameter übergeben werden.
Parameter | Beschreibung |
http://sns01.lab03.daniel.wydler.eu:8053/ | Der FQDN sowie Port, auf dem das Statistik Modul von BIND9 erreichbar ist. |
IncomingRequests | Der Bereich, welcher aus dem BIND9 XML Datei ausgelesen werden soll. |
%sensorid | Die ID des PRTG Sensors wird übergeben, damit auf dem Dateisystem die gespeicherten XML Dateien von BIND9 einen eindeutigen Dateinamen haben. |
Das Statistik Modul von BIND9 bietet eine Vielzahl von Informationen, welche unmöglich in einem Sensor vernünftig dargestellt werden kann. Daher muss dem Sensor den Bereich/Typ angegeben werden, welcher überwacht werden soll.
Aktuell gibt es folgende Parameter/Bereiche:
Parameter | Screenshot |
IncomingRequests | |
IncomingQueries | |
ResponseCode | |
NameserverStat | |
ZoneStat | |
OutgoingQueries |
Es gibt natürlich noch weitere Statistiken in der XML Datei von BIND9. Freue mich natürlich, wenn jemand weitere Bereiche dem Skript hinzufügt.
Die ID des PRTG Sensors wird übergeben, damit auf dem Dateisystem die gespeicherten XML Dateien von BIND9 einen eindeutigen Dateinamen bekommen. Das sieht dann so aus:
Nachstehend exemplarisch meine PRTG Sensoren, wie sowas aussehen kann:
Ich freue mich natürlich im Feedback und natürlich auch Verbesserungsvorschläge.
Viel Spaß beim Ausprobieren. 🙂
Falls jemand mehere Binds überwachen möchte:
# Determine the file name based on the server’s IP or hostname
$prevStatsFile = „C:\Program Files (x86)\PRTG Network Monitor\Custom Sensors\EXEXML\bind9stats_“ + $args[0] + „.xml“
$prevStats = New-Object System.Xml.XmlDocument
# Load the previous statistics only if the file exists
if (Test-Path $prevStatsFile) {
$prevStats.Load($prevStatsFile)
}
# … [rest of the script remains the same]
# Save BIND Stats in XML file
$curStats.Save($prevStatsFile)
Hallo Alexander,
Danke für den Hinweis.
Der initialen Beitrag habe ich vor über 6 Jahren geschrieben. In der Zwischenzeit hat sich der Sensor natürlich weiterentwickelt. Leider habe es immer wieder versäumt, den Beitrag zu aktualisieren – Rahmenbedingungen, Inhalte, Skript, etc.
Das habe ich heute endlich nachgeholt und damit auch die neuste Version meines Sensors hochgeladen. Dieser unterstützt auch deinen Wunsch, mehrere BIND9 Server auf der selben PRTG Probe zu überwachen.
Gruß,
Daniel