Netzwerk-Discovery mit NoDi

Allgemeines

Die Netzwerk-Discovery- und Management-Suite NeDi dient innerhalb der ITSM-Integrationsplattform als zentrale Komponenten zur smarten Discovery der IT-Infrastruktur unserer Kunden. Mit NoDi steht seit einiger Zeit eine zusätzliche Engine zum Auslesen von WMI- und SSH-Geräten zur Verfügung. Zielsetzung bei der von FREICON vorangetriebenen Entwicklung von NoDi war es, von nicht-SNMP-fähigen Geräten ebenso detaillierte Informationen gewinnen zu können. Im Gegensatz zur SNMP-basierten Discovery mit NeDi erfolgt der Netzwerk-Scan in der Regel über einen Bereich von IP-Adressen oder eine Datenbankabfrage. Die Konfiguration und die Zugangsdaten für WMI und SSH werden in einer Konfigurationsdatei gepflegt. NeDi erlaubt es, Zugangsdaten mit Hilfe der Option usrsec verschlüsselt abzulegen. Diese Möglichkeit sollte in NoDi genutzt werden, da der Benutzer für WMI-Abfragen auf dem Zielsystem erhöhte Privilegien benötigt.

Bei Unix / Linux-Systemen kann auch die Anmeldung / Abfrage durch einen Austausch von SSH-Keys erfolgen. Ggf. muss allerdings der Prompt (Umgebungsvariable $PS1) auf dem Zielsystem angepasst werden. Sonst funktioniert es nicht mit der Anmeldung. Alternativ können die SSH-Zugangsdaten in der Konfigurationsdatei hinterlegt werden.

Speichern von Zugangsdaten für NoDi
# Credentials to be used (e.g. a domain admin)
# Override with -u
# 1. WMI credentials
# 2. SSH credentials
usrsec  domain/service  0a1a0115030a0007
usrsec  serviceuser     0a1a0815030a0007
usr     lazyAdmin       verySecret

Die gehashten Kennwörter können in der Weboberfäche von NeDi  auf der Seite System-Files oder auf der Kommandozeile erzeugt werden. Dies bietet zusätzlich den Vorteil, dass Sonderzeichen in den Kennwörter, die manchmal Probleme bereiten, entfernt werden.Hier ein Ausschnitt aus der Konfigurationsdatei für NoDi. Derzeit unterstützt NoDi lediglich ein Set von Credentials für WMI-Abfragen. Bei Bedarf kann man allerdings für die Node-Discovery verschiedene Konfigdateien nutzen.

Passwort für usrsec verschlüsseln
$ nedi.pl -Z PASSWORD

Mit Hilfe der Option „-Z“ können die Kennwörter durch nedi.pl gehasht werden.

Das NeDi-Modul System-NoDi

Nach der Ersteinrichtung (beispielsweise durch den Assistenten System-Setup) kann im Webinterface von NeDi direkt die erste NoDi -Discovery gestartet werden. Die Darstellung auf der Seite lehnt sich stark an das Modul System-NeDi an. Zur Steuerung der Discovery stehen verschiedene Optionen zur Verfügung. Diese werden im Folgenden weiter beschrieben.

Nach dem Start des Moduls System-NoDi wird der Hilfetext von NoDi angezeigt. Die verschiedenen Optionen erlauben eine flexible Konfiguration der Discovery-Jobs.

WMI-Discovery mit NoDi

Einen ersten Überblick über die zur Verfügung stehenden Optionen bietet die oben gezeigte Hilfe des Plugins. Im einfachsten Fall wird zunächst eine einzelne IP-Adresse ausgelesen. Dazu selektiert man die Option „Adresse“ und gibt die gewünschte IP im Feld daneben ein. Im Hauptfenster unterhalb des Headers zeigt NoDi  netterweise direkt an, mit welchen Optionen das eigentliche Discovery-Skript nodi.pl aufgerufen wird. Nach Klick auf Ausführen wird die direkt Discovery gestartet.

Nach dem Start kann der Fortschritt fortlaufend im Webinterface von NeDi beobachtet werden. Nach einem Doppelklick im Hauptfenster wird dieses gelb hinterlegt. Der Umfang der dargestellten Informationen hängt davon ab, ob die Option Nicht leise ausgewählt wurde.

Discovery auf Basis von IP-Adress-Bereichen

Hier nun nochmal der oben dargestellte Job wie er auf der Kommandozeile von monitos ausgeführt würde.

Scan eines einzelnen Hosts
$ nodi.pl -v -a 192.168.1.11

Wie man leicht erkennen kann, verknüpft NoDi auf pfiffige Art mächtige Perl-Skripte für die eigentliche Discovery mit einem komfortablen Webinterface, dass dem Benutzer eine direkte Interaktion ermöglicht. Im Folgenden werden alle weiteren Beispiele als Kommandozeilen-Aufruf dargestellt. Für das Testen der Optionen (und auch sonst) empfiehlt es sich dennoch die Webseiten von NeDi zu nutzen.

Die Option -a unterstützt natürlich auch Bereiche von IP-Adressen.

Einen einfachen IP-Bereich scannen
$ nodi.pl -a192.168.1.1-254

Hier fehlt nun die Option -v . Dadurch werden im Output weniger Informationen zum Verlauf dargestellt. Für alle Adressen in dem IP-Bereich überprüft nodi.pl  zunächst, ob der TCP-Port 135 (WMI) oder 22 (SSH) erreichbar sind. Erst danach wird die Anmeldung am Zielsystem versucht.

Aber NeDi  hat noch ein paar weitere Tricks auf Lager.

Einen komplexeren IP-Bereich als Liste scannen
$ nodi.pl -a192.168.1,2,3,4.1-254

Bereiche von IP-Adressen können kommasepariert als Listen übergeben werden. Größere Netze können auch als Bereiche von Bereichen übergeben werden.

Einen komplexeren IP-Bereich scannen
$ nodi.pl -a192.168.1-224.100-200

Durch den vorgeschalteten Port-Scan bietet NoDi bereits eine im Vergleich zu anderen Lösungen beachtliche Geschwindigkeit. Bei sehr großen Netzen kann man aber weiter optimieren.Dieser Aufruf ist beispielsweise praktisch, wenn  alle Windows-Server (oder Clients) IP-Adressen aus einem bestimmten Abschnitt zugewiesen bekommen (hier 100-200).

Einen komplexeren IP-Bereich scannen
$ nodi.pl -a192.168.1.0/24

In der allerneusten Version unterstützt NoDi die Option -a in Kombination mit einem IP-Bereich in der CIDR Schreibweise (https://de.wikipedia.org/wiki/Classless_Inter-Domain_Routing). Praktischerweise kann man die korrekte Netzwerk-Maske für sein Netz direkt in NeDi anzeigen oder auch berechnen lassen (Modul Other-Calculator). Bei Nutzung dieser Syntax verwendet NoDi  aber nun zunächst das Programm fping, um in dem Bereich alle IP-Adressen zu finden, die per ICMP (PING) erreichbar sind. Diese werden dann automatisch als seedlist für den Discover-Lauf benutzt. Dadurch kann die für das Scannen von großen Netzen benötigte Zeit deutlich reduziert werden.

Discovery auf Basis von Node-Informationen

Mit Hilfe von NoDi werden nicht-SNMP-fähige Geräte ausgelesen. Diese sogenannte Nodes sind aber typischerweise NeDi über ihre MAC-Adresse bereits bekannt. Nun kann man mit NoDi diese bereits vorhandenen Informationen nutzen, um aus diesen Nodes (MAC-Adressen) Devices zu generieren.

Einen IP-Bereich auf Basis von Node-Informationen scannen
$ nodi.pl -O192.168.1.1/24

Diese Form der Discovery verwendet die Option -O. Sie unterstützt ebenfalls die CIDR-Schreibweise für Bereiche von IP-Adressen. Bei dieser Variante basiert die seedlist von NoDi auf den IP-Adressen der Nodes, die NeDi in diesem IP-Bereich bereits kennt. Die in NeDi gespeicherten Informationen über die Nodes umfassen die MAC-Adresse (Key), die IP-Adresse (per ARP) und ggf. den Namen (per DNS ermittelt) des Nodes. Mit diesen Informationen kann NoDi  nun gezielt detailliertere Informationen per WMI oder SSH auslesen. Die Discovery ist dabei in der Regel schnell, da nicht jede IP in dem Netzwerk-Bereich getestet werden muss. Der Erfolg dieser Form der Discovery hängt allerdings davon ab, dass NeDi durch das Auslesen der Netzwerkkomponenten alle Nodes mit ihrer IP-Adresse kennt. Zusätzlich ist es erforderlich, dass die Datenbank für NeDi und NoDi nicht getrennt wurden.

Discovery auf Basis von Abfragen

Mit Hilfe von Datenbank-Abfragen können beispielsweise die bereits erkannten NoDi-Devices regelmäßig aktualisiert werden.

Alle NoDi-Devices aktualisieren
$ nodi.pl -Aall

Der Aufruf entspricht dabei der bekannten Option aus NeDi. Gestartet wird er mit der Option -A.

Auch komplexere Aufrufen lassen sich so umsetzen.

"Alte" NoDi-Devices aktualisieren
$ nodi.pl -A "lastdis < UNIX_TIMESTAMP(NOW() - INTERVAL 2 DAY)"

Hier werden alle NoDi -Devices, die seit zwei Tagen nicht ausgelesen werden konnten, aktualisiert. Der Aufruf basiert auf einer SQL-Abfrage gegen die NeDi Datenbank. Das macht das ganze nicht einfacher, bietet aber flexible Möglichkeiten für spezifische Discovery-Jobs (so wie in NeDi).

Überspringen von Informationen

Gerade das Auslesen der Daten von Windows-Geräten per WMI benötigt viel Zeit. Die Windows Manangement Instrumentation hat den Vorteil, dass sie agent-less funktioniert. Auf der anderen Seite sind die Abfragen nicht besonders schnell. Um die Dauer der Scans zu optimieren gibt es daher in NoDi die sogenannte Skipping-Option -S.

WMI überspringen
$ nodi.pl -a192.168.1.1-254 -Sw

In dem IP-Bereich sind keine Windows-Hosts; der Scan per WMI wird komplett übersprungen. Es wird nur die Discovery per SSH getestet.

Kein Scan per SSH
$ nodi.pl -a192.168.1.1-254 -Su

In diesem IP-Bereich finden sich keine Unix/Linux-Hosts; die Discovery per SSH wird komplett übersprungen.
Gerade das Auslesen der installierten Software benötigt viel Zeit. Auf der anderen Seite sollte sich diese Informationen nicht in kurzen Intervallen ändern.

Auslesen der Software überspringen
$ nodi.pl -a192.168.1.1-254 -Ss

Das Auslesen der installierten Software kann man mit dem o. g. Aufruf überspringen.

Auch die verbaute Hardware sollte sich in der Regel nicht permanent ändern.

Auslesen der Hardware überspringen
$ nodi.pl -a192.168.1.1-254 -Sh

Last but not least kann man bei der Discovery auch die Netzwerk-Interfaces der Geräte ignorieren.Mit Hilfe dieses Aufrufs wird das Auslesen der Hardware übersprungen.

$ nodi.pl -a192.168.1.1-254 -Si

Weitere Skipping-Optionen findet man in der Hilfe zu NoDi (siehe oben). Bei allen Optionen sollte man berücksichtigen, dass die Discovery-Jobs in den allermeisten Fällen regelmäßig und im Hintergrund ausgeführt werden. Durch die auf die IT-Infrastruktur des Kunden abgestimmte Formulierung von Cron-Jobs im NeDi-Modul System-Files kann man die beschriebenen Optionen flexibel kombinieren, um die optimale Discovery zu implementieren.

Ausblick

Bereits jetzt stellt NoDi  ein wertvolles Tool für die Discovery von Geräten im Netzwerk dar. Seit der ersten verfügbaren Version wurden schon viele Bugs gefixt und Verbesserung eingebaut. Aber die Ideen gehen uns nicht aus. Gemeinsam mit Remo Rickli, dem Entwickler von NeDi, planen wir bereits die nächsten Erweiterungen. Haben auch Sie Ideen oder Anforderungen an die Discovery. Dann nehmen Sie doch gerne Kontakt mit uns auf. Wir freuen uns auf Ihr Feedback.

Sie möchten keinen Blog-Beitrag mehr verpassen?
Werden Sie Teil unserer Xing-Community!

Zur Xing-Gruppe