Hosts lassen sichmit einem Trick auch dann auf Verfügbarkeit überprüfen, wenn sie keine offenen Dienste anbieten. Ich verwende den folgenden Trick beispielsweise um mitzubekommen, wenn in meiner alten Heimat das Internet ausfällt. Da ich dort keinen Server hinter der Firewall im Router hängen habe, gehe ich also direkt an den Router. Dieser benötigt dringend die Dyndns-Funktion, damit er nach jedem Reconnect seine IP auf einen Hostname mappt.
Wenn dies gegeben ist, schaut man mit einem NMAP-Scan einfach mal, welche Ports der Router zur Verfügung stellt – hierbei werden auf nicht offene Ports angezeigt:
# nmap -PN HOSTNAME-DES-ROUTERS Starting Nmap 5.00 ( http://nmap.org ) at 2012-01-26 22:14 CET Interesting ports on hostname-des-routers (ip-adresse-des-routers): Not shown: 999 filtered ports PORT STATE SERVICE 5060/tcp closed sip Nmap done: 1 IP address (1 host up) scanned in 76.13 seconds
In diesem Fall ist der Router über den Port 5060 (VoIP) erreichbar (typisch für aktuelle Router mit VoIP-Funktionalität) – ein Verbindungsversuch wird abgewiesen:
# telnet HOSTNAME-DES-ROUTERS 5060 Trying xx.yy.zz.iii... telnet: Unable to connect to remote host: Connection refused
Wenn der Router nicht zur Verfügung steht, kommt es hier zum Timeout anstatt zur Ablehnung der Anfrage – diesen Effekt kann man sich zunutze machen und herauszufinden, ob der Router am Netz hängt. Es wird also einfach ein Host für den Router in Nagios definiert. Normalerweise überprüft Nagios definierte Hosts erstmal anhand der hinterlegten IP und PING auf Verfügbarkeit – da dies hier ja nicht möglich ist, wird ein dediziertes Check-Kommando und ein höherer Überprüfungsintervall definiert. Als Folge hiervon wird der Host z.B. alle 30 Minuten überprüft und als Online markiert, wenn die Verbindungsanfrage abgewiesen wird.
Zunächst einmal wird das Kommando definiert:
# nano commands.cfg ... define command{ command_name check-host-alive-by-voip-refused command_line $USER1$/check_tcp -H $HOSTADDRESS$ -p 5060 -r ok }
…dannach folgt der Host mit oben genannter Anpassung:
# nano router-blah.cfg
define host{ use linux-server host_name router-blah alias blah address HOSTNAME-DES-ROUTERS check_command check-host-alive-by-voip-refused check_interval 30 max_check_attempts 2 }
Die Zuordnung check_interval 30 steht hier für eine Überprüfung im Abstand von 30 Minuten. Ich persönlich würde hier nicht den Standard-Wert von 5 Minuten übernehmen – ich kann mir vorstellen, dass der ISP hier vielleicht einen Angriff vermutet und Gegenschritte unternimmt (wenn einer der Admins wirklich mal auf die Leitung schauen sollte 😛 ).
Nach einem erneuten Einlesen der Nagios-Konfiguration sollte das Ganze ohne Probleme funktionieren:
# service nagios reload

Mal schauen, wie lange es dauert, bis der ISP mir Stress macht. 😀