Switch Monitoring mit Netdisco

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.

netdisco01

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.

netdisco02

Vor der Partitionierung und Formatierung fragt der Assistent netterweise nochmal nach und man muß explizit „Ja“ auswählen (TAB).

netdisco03

netdisco04

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.

netdisco05

Der Linux Server braucht nicht viel. Lediglich die Standardtools und eine PostgreSQL Datenbank sollten vorhanden sein. Eine GUI ist nicht notwendig.

netdisco06

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.

Quelle: xkcd.com

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

netdisco08

Der Zugriff auf die Webseite lautet:

http://myhost.mydomain.com:5000

netdisco10

Die Seite ist recht übersichtlich und beim ersten Start meist noch leer. Sie füllt sich nach den ersten erfolgreichen Scans des Netzwerks.

netdisco07Unter dem Menü Reports finden sich zahlreiche Tools zur Inventarisierung und zur Erkennung von Netzwerkproblemen.

netdisco09

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.