Host ohne aktiven Service auf Verfügbarkeit überprüfen
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:
1# nmap -PN HOSTNAME-DES-ROUTERS
2
3Starting Nmap 5.00 ( http://nmap.org ) at 2012-01-26 22:14 CET
4Interesting ports on hostname-des-routers (ip-adresse-des-routers):
5Not shown: 999 filtered ports
6PORT STATE SERVICE
75060/tcp closed sip
8
9Nmap 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:
1# telnet HOSTNAME-DES-ROUTERS 5060
2Trying xx.yy.zz.iii...
3telnet: 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:
1# nano commands.cfg
2...
3define command{
4 command_name check-host-alive-by-voip-refused
5 command_line $USER1$/check_tcp -H $HOSTADDRESS$ -p 5060 -r ok
6}
...dannach folgt der Host mit oben genannter Anpassung:
1# nano router-blah.cfg
2
3define host{
4 use linux-server
5 host_name router-blah
6 alias blah
7 address HOSTNAME-DES-ROUTERS
8 check_command check-host-alive-by-voip-refused
9 check_interval 30
10 max_check_attempts 2
11 }
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:
1# service nagios reload
Mal schauen, wie lange es dauert, bis der ISP mir Stress macht. 😄