PRTG QoS mit UDP-Mirror

PRTG ist eine überschaubare aber leistungsfähige Software zur Überwachung von Diensten und Netzwerken und kann weit mehr als nur die Auslastung von ein paar Switchports zu loggen, wie diverse Beispielskripte von mir für Exchange und Lync sicher zeigen. PRTG basiert auf einem zentralen Server zur Datensammlung und Visualisierung und mindestens einer oder mehrerer Probes, die letztlich Aktionen ausführen. Die leistungsfähigen Probes sind nur auf Windows einsetzbar und überwachen das lokale System. Es ist aber auch möglich entfernte Systeme remote im Rahmen der Möglichkeiten zu überwachen. Das nutze ich gerne um die Anzahl der Probe-Installationen gering zu halten. für einige Sensoren, z.B. PRTG:QoS Sensor sind aber zwei Probes erforderlich. Das Senden und Zurücksenden von UDP-Paketen für QoS erforderte eine PRTG-Probe auf der Gegenseite.

Warum UDP, Reicht nicht auch ein ICMP (PING)
Nur Messung von Latenzzeiten etc. kann auch ein ICMP-PING reichen. Aber ICMP ist kein UDP und insbesondere mit QoS auf WAN-Leitungen macht es Sinn mit UDP-Paketen auch genau die Ports zu nutzen, die per QoS priorisiert werden.

Mini Probe mit UDP

Ich habe im November 2012 (http://kb.paessler.com/en/topic/43963) schon den Vorschlag gemacht, dass die Gegenstelle auch einfach ein UDP-Echo-Device sein könnte. Damals wurde das als Feature-Request aufgenommen. Seit der PRGT-Version 14.x.10 scheint hier Bewegung rein zu kommen. Zuerst in Form einer "MiniProbe" auf Basis von Android. Damit kann man nun erstmals z.B. alte Smartphones als "Remote Probe" in der Fläche verteilen um z.B. die Erreichbarkeit per WiFi zu "messen". Viel interessanter fand ich aber, als ich wieder mal beim Einrichten es QoS-Sensor eine neue Auswahlbox gesehen habe:

Neben der "empfohlenen" PRTG Probe" kann man nun ein "Custom Target" angeben und in der Hilfe ist der Link zu GITHUB (https://github.com/PaesslerAG/QoSReflect) schon enthalten, mit dem ein kleines Python-Skript als Spiegel dient.

PRTG Python Echo

Wenn man sich den Source Code anschaut und man vereinfacht die Filterungen und Parameter mit NAT etc. weg lässt, dann besteht der Kern aus folgenden Funktionen (Hinweis: Bei Python gibt es keine Blockklammern o.ä.. Die Einrückung bestimmt den Block)

while 1:
    d = s.recvfrom(4096)
    if d and not restrict_answer:
        data = d[0]
        reply = data
        s.sendto(reply, addr)

Das Skript reserviert einen 4096 Byte Puffer und wartet einfach auf Daten, um diese dann 1:1 wieder zum Absender zurück zu senden. Eigentlich kein Hexenwerk aber doch effektiv. Das ist sicher einfach für Unix-Administratoren, das Skript auf einem Unix-System einfach mitlaufen zu lassen. Das kann ja auch ein RaspberryPI oder anderer Minicomputer sein. Ein UDP-Mirror ist sehr einfach umgesetzt.

Windows "Simple TCP Dienste" als Echo ?

Bei meinen Kunden sind aber "Windows Systeme" und hier die Desktops etc. Natürlich omnipräsent. In kleinen Niederlassungen gibt es nicht immer einen Unix-Server oder Platz für einen kleinen Computer. Während der Arbeitszeit könnte ja ein Windows Client diese Funktion übernehmen. Schon viele Jahre gibt es von Microsoft ebenfalls die "Einfachen TCP/IP-Dienste, die Echo, CharGen, Daytime etc. vereinen und auch bei Windows 2012 immer noch über die Features installiert werden können:

Installiert wird dabei genau ein Dienst, der später auch automatisch gestartet wird.:

Wenn man aber genauer im Ressource Manager nachschaut, dann lauscht dieser Dienst auch auf den UDP-Ports. Interessant ist hier der Port 7 ECHO, der ziemlich genau unter Windows das tut, was die Probe brauchen könne.

Leider kann man dennoch nicht diesen Dienst auf einem Windows PC nutzen, da PRTG nur Port >1024 zulässt. Sollte PRTG auch einmal "UDP=7" zulassen, dann müssten Sie nur noch die Windows Firewall ggfls. öffnen um so viel mehr QoS-Sensoren in der Welt zu verteilen.

QoS UDP-Mirror mit anderen Devices

Es ist ja nun nicht so, dass man eine UDP-Echo Probe erst aufsetzen muss. Mit etwas Glück unterstützen ihre Router sogar diese Funktion.  Ich denke es gibt durchaus viel mehr Systeme, die einen UDP-Mirror für PRTG bereitstellen können, so dass Sie keinen Windows Server oder Service benötigen. Leider ist der Lync Client selbst kein UDP-Mirror und kann auch nicht dazu missbraucht werden. Ich versuche dennoch hier mal eine Liste der Geräte zu pflegen, die für PRTG als UDP-Mirror genutzt werden können:

Gerät Typ Anleitung

Cisco IOS11 Router

Router

HP 6600

Router

RaspBerry

Kleincomputer

  • RaspberryPI
    Kann direkt das Python-Script von PRTG ausführen

Ardunio Ethernet

Kleincomputer

Man kann damit UDP empfangen und senden. Allerdings sehr langsam !.  Die RAW Sendeperformance ist unter 1 MBit und wenn man noch empfängt und sendet, dann dürfte das deutlich runter gehen. Aber für vielleicht 10 Pakete/Sek als Dauertest könnte es schon ausreichend sein.

?

?

Ich addiere gerne weitere Geräte, die mit PRTG als UDP-Spiegel agieren können.

Als Lync und VoIP-Admin warte ich eigentlich nur noch darauf, dass auch VoIP-Gateways diese Funktion integriert haben, damit UDP-Tests als Dauertest genutzt werden können.

Schade aktuell, dass PRTG nur UDP-Ports >1024 unterstützt, denn damit entfällt die Nutzung des Standard UDP ECHO Dienstes (7/UDP). Aus Sicherheitsaspekten ist es natürlich besser diesen Port zu meiden und beim Echo-System auch eine Whiteliste der Absender zu addieren.

UDP Mirror mit PowerShell

Leider können ja die Windows Bordmittel kein UDP-Mirror auf "hohen Ports" und PRTG aktuell noch keinen UDP-Mirror gegen Port 7/UDP. Sie könne aber natürlich z.B. mit einem einfachen PowerShell einen einfachen UDP-Mirror aufsetzen, wie ich auf der "PowerShell und UDP" beschreibe und ein Skript dazu bereitgestellt habe:

Achtung: Dieser Samplecode hat keine IP-Filterung. Das könnten sie aber sicher schnell addieren.

Weitere Links