Netzwerk-Infrastrukturen sind komplex und es bedarf strenger Disziplin, dabei den Überblick zu behalten.
- Welche Geräte habe ich im LAN und wieviele davon?
- Welches Device ist mit welchem Nachbarn verbunden?
- Wie ist der Status der Firmware?
- Wo gibt es Probleme?
Natürlich kann man jedes Gerät zyklisch prüfen, indem man sich auf der CLI oder WebGUI einloggt, aber das ist mühsam, zeitintensiv und fehleranfällig. Denn leicht vergisst man ein Gerät. Wie gut, dass mit dem Simple Network Management Protokoll (SNMP) eine Fernabfrage möglich ist. Die Möglichkeit der Abfrage allein genüngt natürlich nicht, man braucht auch Werkzeuge, die diese Daten vernünftig visualisieren.
Es gibt eine recht große Produktpalette auf diesem Gebiet. Darunter kommerzielle und freie Produkte. Einige davon sind sehr einfach, andere mächtig und komplex.
Ich möchte heute ein Produkt vorstellen, welches recht einfach und übersichtlich in der Handhabung ist, aber dennoch sehr funktional ist. Es heisst Netdisco und wird unter der BSD-Licencse verbreitet. Netdisco eignet sich für kleinere und große Infrastrukturen, wie z.B. universitäre Netze. Es arbeitert auf SNMP Basis, indem es ARP- und MAC-Tabellen von Layer2-Switches und Routern ausliest, diese in Verbindung setzt und lokal in einer Postgres Datenbank ablegt. Die Darstellung erfolgt über den integrierten Webserver.
Installation
Für einen Netdisco Server benötigt man im Prinzip nur ein aktuelles Linux System (Debian, Ubuntu, Redhat, Fedora, CentOS, etc.) mit Postges Datenbank. Auf den Geräten sollte unter SNMP eine readonly Community eingerichtet sein. Nach Möglichkeit nicht “public”, denn die ist default immer vorhanden.
Ich habe mich für einen Ubuntu 16.04 LTS Server entschieden, da mir persönlich APT als Paketverwaltung gut gefällt. Das Linux läuft hier in einer VM, kann aber natürlich auch auf “Blech” installiert werden.
Zunächst wird vom ISO gebootet, Keymap und Sprache eingestellt.
Die Festplattenanforderungen sind nicht groß. Die Installation der Software beansprucht nur wenige hundert Megabyte. Eine VM mit 64GB vDisk ist also mehr als ausreichend.
Bei der Partitionierung wählte ich die geführte Installation mit LVM.
Vor der Partitionierung und Formatierung fragt der Assistent netterweise nochmal nach und man muß explizit “Ja” auswählen (TAB).
Man sagt zwar “never touch a running system”, aber in der heutigen Zeit kann dieses Motto aus der guten alten Zeit fatale Folgen haben. Sicherheitspatches sollte das System auf jeden Fall zeitnah installieren.
Der Linux Server braucht nicht viel. Lediglich die Standardtools und eine PostgreSQL Datenbank sollten vorhanden sein. Eine GUI ist nicht notwendig.
Noch vor der eigentlichen Instalation wird ein User angelegt, der anstatt root das System verwaltet, Ich habe hier gleich den User netdisco erstellt, der später ohnehin gebraucht wird.
Falls ein anderer Defaultuser erstellt wurde, muss der netdisco user später manuell erstellt werden.
sudo useradd -m -p x -s /bin/bash netdisco
SUDO
Unter Ubuntu 16.04 müssen alle Kommandos, die das System betreffen mit sudo ausgeführt werden. Das ist übrigens die wichtigste Abweichung der von der offiziellen Netdisco Dokumentation.
Was sudo macht, lässt sich am schönsten mit einem Comic von xkcd erklären.
Statische IP vergeben
Das Serversystem startet zunächst mit dynamischer IP und DHCP. Zur Umstellung auf statische IP Adresse (empfohlen) muss die Einstellung auf dem Netzwerk Interface verändert werden.
sudo vi /etc/network/interfaces
Das Interface mit der DHCP Einstellung suchen. In meinem Fall war das Interface ens160.
iface ens160 inet dhcp
Ändern in inet static. Die Parameter sind natürlich der individuellen Umgebung anzupassen.
iface ens160 inet static address 10.1.1.100 netmask 255.255.255.0 network 10.1.1.0 gateway 10.1.1.1 dns-nameservers 10.1.1.2
VI Editor verlassen mit [Esc] [:wq!]
Netzwerkdienst neu starten
sudo service networking restart
Falls das nicht hilft, kann der ganze Server neu gestartet werden
sudo init 6
Notwendige Pakete installieren
Die Anleitung lehnt sich ab hier weitestgehend an die Original Dokumentation an (mit Unterschied von sudo).
sudo apt-get update sudo apt-get install libdbd-pg-perl libsnmp-perl build-essentials
Datenbank vorbereiten
Der User postgres hat default kein Kennwort. Damit der Kontext des Users postgres deutlich wird, habe ich dem Kommando den Promt postgres:~$ vorangestellt. Das ist nicht Teil des Kommandos!
sudo su - postgres postgres:~$ createuser -DRSP netdisco
Enter Password for new role: Enter it again:
Hier wurde auf der Datenbank ein User netdisco eingerichtet. Im nächsten Schritt wird eine Datenbank mit Namen netdisco erstellt mit Owner (-O) netdisco.
postgres:~$ createdb -O netdisco netdisco
Damit ist die Postges DB Vorbereitung abgeschlossen. Wir kehren zurück in ten Kontext von User netdisco. Hier ist kein sudo notwendig!
su - netdisco
Installation der Netdisco Umgebung
curl -L http://cpanmin.us/ | perl - --notest --local-lib ~/perl5 App::Netdisco
Symlink zu den Dateien im nedisco home Verzeichnis erstellen
mkdir ~/bin ln -s ~/perl5/bin/{localenv,netdisco-*} ~/bin/
Es folgt ein Test der Pfadangabe, indem wir den Status des netdisco Daemons abfragen. Keine Sorge, er läuft nicht und das ist in Ordnung so.
~/bin/netdisco-daemon status
Konfiguration
mkdir ~/environments cp ~/perl5/lib/perl5/auto/share/dist/App-Netdisco/environments/deployment.yml ~/environments
Rechte auf deployments.yml setzen.
chmod 600 ~/environments/deployment.yml
deployment.yml editieren
cd ~/environments sudo vi deployment.yml
Unter Essential settings die Parameter “name”, “User” und “Pass” anpassen. Hier dreht es sich um den Postgres-User netdisco, nicht den Systemuser.
# --------------------- # ESSENTIAL SETTINGS # --------------------- database: name: 'netdisco' user: 'netdisco' pass: 'mypassword'
In gleichen File muss auch der Community Strig auf die lokale Umgebung angepasst werden. Die meisten Geräte haben default “public”, dies ist aber nicht zu empfehlen. Besser ist auf allen Geräten eine Readonly Community zu definieren, die nicht public heisst.
Der Kommentar # vor schedule sollte auch entfernt werden, damit die Datenbank regelmäßig mit aktuellen Gerätedaten aktualisiert wird.
Anwendung starten
~/bin/netdisco-deploy
Der Zugriff auf die Webseite lautet:
http://myhost.mydomain.com:5000
Die Seite ist recht übersichtlich und beim ersten Start meist noch leer. Sie füllt sich nach den ersten erfolgreichen Scans des Netzwerks.
Unter dem Menü Reports finden sich zahlreiche Tools zur Inventarisierung und zur Erkennung von Netzwerkproblemen.
Troubleshooting
Ich hatte nach mehreren Durchläufen einen Switch, der nicht bei Netdisco auftauchte. Die Community Einstellungen waren richtig, aber das Gerät wurde nicht erkannt. Ich testete zunächst , ob das Gerät prinzipiell auf SNMP Anfragen antworten kann. Dafür gibt es ein kleines, kostenloses Tool von Praessler (den Machern von PRTG). Es heisst snmptester. Damit konnte ich zeigen, dass der gesuchte Switch ordnungsgemäß auf SNMP Anfragen antwortete.
Warum Netdisco das Gerät nicht alleine fand, kann ich nicht sagen, aber man kann den Server aktiv mit einer Komponente bekannt machen. Dazu logt man sich als User netdisco auf die CLI des Netdisco Servers.
cd ~ ~/bin/netdisco-do -D discover -d <device-IP>
Das Kommando netdisco-do spricht ein Gerät direkt über die mitgelieferte IP Adresse an, liest Daten über SNMP aus und fügt diese der Datenbank hinzu. Das funktionierte gut und seither ist der Switch auf der Netdisco Webseite zu finden.