IPAM und DCIM mit Netbox -Alleskönner

Lesezeit
8 Minuten
Bis jetzt gelesen

IPAM und DCIM mit Netbox -Alleskönner

02.12.2019 - 12:13
Veröffentlicht in:

In Rechenzentren gilt es, jederzeit den Überblick über Ressourcen und IP-Adressen zu haben. Gerade bei den IP-Adressen ist es zudem notwendig, diese nicht nur zu kennen, sondern auch flexibel verwalten zu können. Dieses Feature kombiniert Netbox mit der Dokumentation des RZ-Inventars und wird so zu einem wertvollen IT-Helfer. Wir zeigen, wie Sie das Universal-Tool für DCIM und IPAM installieren und konfigurieren.

Netbox [1] bietet IP-Adressmanagement (IPAM) und Data Center Infrastrukturmanagement (DCIM):

- IPAM: Verwaltung von IP-Netzwerken und -adressen, Network Address Translation (NAT), Virtual Routing and Forwarding (VRF) und VLANs.

- Serverschränke organisiert nach Gruppen und Standorten.

- Gerätetypen wie Server und Switches sowie der Ort der Installation.

- Verbindungen: Netzwerk, Konsolen, Netzanschlüsse zwischen Geräten.

- Virtualisierung: Verwaltet virtuelle Maschinen und Cluster.

- Datenverbindungen für optische Weitverkehrsnetze (Long-Haul-Netzwerke) und Provider.

- Verschlüsselter Speicher für sensible Zugangsdaten.

Im Bereich IPAM kann Netbox verschiedene IP-Adressen definieren, etwa eine IPv4-, eine IPv6- und eine Management-IP-Adresse auf einer BNC-Schnittstelle. Beim DCIM bildet das Tool Abhängigkeiten zwischen IP-Adressen auf Interfaces, Hosts und Standorte ab.

Netbox-Betrieb vorbereiten

Netbox läuft auf dem Django-Python-Framework mit einer PostgreSQL-Datenbank, die lokal oder auf einem entfernten Rechner installiert sein kann. Andere Datenbanken wie etwa MariaDB oder MySQL werden nicht unterstützt, weil Netbox die Netzwerkadresstypen von PostgreSQL nutzt. Mindestvoraussetzung für die aktuelle Netbox-Version ist PostgreSQL 9.4. Die komplette Netbox-Dokumentation finden Sie unter [2]. In Ubuntu 18.04 ist die PostgreSQL-Version 10+190 enthalten, die Sie mit sudo apt-get install postgresql installieren. Außerdem benötigen Sie noch die Header-Dateien für die PostgreSQL-C-Client-Bibliothek, die Sie im Paket "libpq-dev" finden.

Unter CentOS 7.5 installieren Sie die Datenbank per

yum install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

yum install postgresql96 postgresql96-server postgresql96-devel
/usr/pgsql-9.6/bin/postgresql96-setup initdb

Bei CentOS müssen Sie die PostgreSQL-Konfigurationsdatei /var/lib/pgsql/9.6/data/pg_hba.conf" so ändern, dass passwortbasierte Authentifizierung möglich ist. Dazu tauschen Sie für alle Host-Einträge "ident" gegen "md5", etwa so:

host      all      all      127.0.0.1/32      md5

host      all      all           ::1/128      md5

Anschließend wird der Dienst so gestartet, dass er nach dem Booten läuft:

systemctl start postgresql-9.6
systemctl enable postgresql-9.6
Bild 1: Beim Anlegen der Netbox-Datenbank in PostgreSQL sollten Sie auf ein sicheres Passwort achten und anschließend die Authentifikation testen.
Bild 1: Beim Anlegen der Netbox-Datenbank in PostgreSQL sollten Sie auf ein sicheres Passwort achten und anschließend die Authentifikation testen.

Datenbank anlegen

Nachdem das erledigt ist, müssen wir eine Datenbank für Netbox erzeugen sowie dafür ein Passwort und einen Nutzernamen vergeben:

sudo -u postgres psql

Und in PostgreSQL nutzen Sie:

postgres=# CREATE DATABASE netbox;

postgres=# CREATE USER <netbox> WITH PASSWORD <password>;
postgres=# GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;
postgres=# \q

Nun prüfen Sie, ob die Authentifikation funktioniert:

# psql -U netbox -W -h <localhost> netbox

Ersetzen Sie dabei "localhost" durch den Datenbankserver, falls dieser remote verbunden ist. Klappt die Authentifikation, erhalten Sie einen Netbox-Prompt. Mit "\q" verlassen Sie die Datenbank wieder.

Installation und Konfiguration von Netbox

Im nächsten Schritt installieren Sie Netbox. Zunächst spielen Sie alle Systempakete ein, die Netbox benötigt. In unserem Fall für Ubuntu:

apt-get install -y python3 python3-pip python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev graphviz libpq-dev libssl-dev redis-server zlib1g-dev

Unter CentOS gehen Sie analog folgendermaßen vor:

yum install -y epel-release
yum install -y gcc python36 python36-devel python36-setuptools libxml2-devel libxslt-devel libffi-devel graphviz openssl-devel redhat-rpm-config redis
easy_install-3.6 pip
ln -s /usr/bin/python36 /usr/bin/python3

Nun installieren Sie Netbox. Hier haben Sie zwei Möglichkeiten: Sie laden die aktuelle stabile Version aus Github herunter oder klonen das Github-Repository. Das Herunterladen und Installieren geschieht mit diesen Befehlen:

wget https://github.com/netbox-community/netbox/archive/vX.Y.Z.tar.gz
tar -xzf vX.Y.Z.tar.gz -C /opt
cd /opt/
ln -s netbox-X.Y.Z/ netbox cd /opt/netbox/

Um Netbox direkt aus dem Github-Repository zu klonen, legen Sie zunächst das Basisverzeichnis für Netbox an (in unserem Beispiel "/opt/netbox"):

mkdir -p /opt/netbox/ && cd /opt/netbox/

Sollte git noch nicht installiert sein, erledigen Sie das jetzt mit apt-get install -y git (Ubuntu) beziehungsweise yum install y git (CentOS). Danach klonen Sie den Master-Zweig des Github-Repositorys in das aktuelle Verzeichnis "/opt/ netbox":

git clone -b master https://github. com/netbox-community/netbox.git

Stellen Sie außerdem sicher, dass der Netbox-Nutzer in das Media-Verzeichnis "/opt/netbox/netbox/media/" und alle Unterverzeichnisse schreiben kann; anderenfalls scheitert der Upload von Dateien:

chown -R netbox:netbox /opt/netbox/netbox/media/

Hierbei ist zu beachten, dass Netbox je nach System einen anderen Usernamen haben kann.

Bild 2: Die Konfigurationsdatei benötigt die richtigen Parameter für ALLOW_HOSTS, DATABASE und SECRET_KEY.
Bild 2: Die Konfigurationsdatei benötigt die richtigen Parameter für ALLOW_HOSTS, DATABASE und SECRET_KEY.

Python-Pakete installieren

Jetzt installieren Sie die erforderlichen Python-Pakete mit dem Python-Paketinstaller "pip":

pip3 install -r requirements.txt

Sollten während der Installation Fehler auftreten, nutzen Sie eventuell eine falsche pip-Version. Benötigt wird mindestens die Version 9.0.1. Kontrollieren können Sie das mit pip3 -V. Nutzen Sie die Netzwerksysteme Arista EOS, Cisco IOS, Cisco IOS-XR, Cisco NX-OS oder Juniper JunOS, installieren Sie optional noch "Napalm" . Diese Python-Bibliothek ist eine vereinheitlichte API mit Funktionen, um mit verschiedenen Routern zu interagieren. Um Napalm einzurichten, installieren Sie das Paket mit

pip3 install napalm

Konfiguration von Netbox

Wechseln Sie nun in das Netbox-Konfigurationsverzeichnis und erstellen Sie eine Kopie der Beispielkonfiguration:

cd netbox/netbox/

cp configuration.example.py configuration.py

Öffnen Sie anschließend die Datei "configuration.py" mit einem Editor und setzen die Variablen "ALLOWED_HOSTS", "DATABASE", "REDIS" und "SECRET_ KEY". Die Variable "ALLOWED_HOSTS" enthält eine Liste gültiger Hostnamen, für die der Server erreichbar ist. Sie müssen mindestens einen Namen oder eine IP-Adresse eintragen, also etwa:

ALLOWED_HOSTS = ['netbox.example.com', '192.0.2.123']

Der DATABASE-Parameter enthält die Konfigurationsdetails der Datenbank. Hier müssen Sie den Nutzernamen samt Passwort für PostgreSQL angeben:

DATABASE = {
           'NAME': 'netbox',
      # Database name
           'USER': 'netbox',
      # PostgreSQL username
           'PASSWORD': 'password',
      # PostgreSQL password
           'HOST': 'localhost',
      # Database server
           'PORT': '',
      # Database port (leave blank for default)
}

Läuft der Server auf einem entfernten Host, ersetzen Sie außerdem "localhost" durch die entsprechende Adresse. In der Dokumentation [3] finden Sie Details.

Redis speichert Schlüssel und wird als Teil der Netbox-Installation für beispielsweise Webhooks und Caching benötigt. Redis unterstützt verschiedene Datenstrukturen, unter anderen Strings, Hashes und Listen. Details der Redis-Parameter liefert [4]. Es braucht nur eine minimale Konfiguration, die folgende sollte ausreichen:

REDIS = {
           'HOST': 'localhost',
           'PORT': 6379,
           'PASSWORD': '',
           'DATABASE': 0,
           'CACHE_DATABASE': 1,
           'DEFAULT_TIMEOUT': 300,
           'SSL': False,
}

Nun benötigen Sie noch einen geheimen Schlüssel. Sie erzeugen ihn mithilfe des Python-Skripts "generate_secret_key.py" im Netbox-Verzeichnis. Der Schlüssel muss einzigartig für diese Installation sein und sollte das lokale System nicht verlassen. Für den Fall, dass Sie eine hochverfügbare Installation mit mehreren Webservern planen, muss der Schlüssel auf allen Servern identisch sein, um persistente Nutzersitzungen zu gewährleisten.

Databankschema, Superuser und weitere Abschlussarbeiten

Bevor Netbox starten kann, installieren Sie noch das Datenbankschema. Das machen Sie, indem Sie "python3 manage.py migrate" aus dem Netbox-Verzeichnis starten:

cd /opt/netbox/netbox/
python3 manage.py migrate

Sollte PostgreSQL an dieser Stelle einen Authentifikationsfehler liefern, überprüfen Sie den Nutzernamen und das Passwort in der Datei "configuration.py".

Netbox selbst kommt ohne vordefinierte Nutzerzugänge. Sie benötigen für Netbox also zumindest einen Superuser. Den erzeugen Sie so:

python3 manage.py createsuperuser

Das Skript fragt nach Nutzername, E-Mail-Adresse und einem Passwort. Anschließend richtet es einen Nutzer ein. Danach sammeln Sie alle statischen Daten mit:

python3 manage.py collectstatic --no-input

Diese werden dann in das Verzeichnis eingefügt, das Sie in der Konfiguration angegeben haben, also beispielsweise in "/opt/netbox/netbox/static". Das Skript weist darauf hin, dass vorhandene Dateien gleichen Namens überschrieben werden. Bestätigen Sie den Vorgang mit "Yes".

Um Ihnen den Start im Umgang mit der Software zu erleichtern, bietet Netbox schließlich bereits ein paar vorgefertigte Daten wie RIR-Definitionen (Regional Internet Registries) und allgemeinübliche Geräterollen. Wenn Sie diese nutzen wollen, erzeugen Sie sie mit dem Kommando

python3 manage.py loaddata initial_data

Sie können diese Daten jederzeit löschen, wenn Sie sie nicht mehr benötigen. Netbox lässt sich aber auch ohne diese Daten starten, wenn Sie lieber alles von Grund auf selbst machen möchten.

Netbox testen

Jetzt sollten Sie Netbox starten können. Prüfen Sie das, indem Sie eine Development-Instanz starten:

python3 manage.py runserver 0.0.0.0:8000 --insecure

Das System führt einige Tests durch und meldet sich dann betriebsbereit. Den Server können Sie mit der Tastenkombination Strg+C beenden.

Als Nächstes verbinden Sie sich in einem Browser mit dem Namen oder der IP-Adresse des Servers, die Sie in der Variable "ALLOWED_HOSTS" angegeben haben. Wichtig dabei: Der Server horcht auf dem Port 8000, also: http://127.0.0.1:8000/. Daraufhin sollte die Netbox-Homepage erscheinen. Falls nicht, ist während der Installation oder Konfiguration etwas schiefgegangen. Überprüfen Sie dann noch einmal die komplette Installation wie in diesem Artikel beschrieben.

Webserver installieren

Der in Netbox eingebaute Webservice dient nur für die Entwicklung und für Testzwecke, nicht für Produktionsumgebungen. Für Letztere sollten Sie auf Apache oder nginx zurückgreifen. Achten Sie bei der Installation von Apache auch darauf, das Webserver-Gateway-Interface (WSGI) zu installieren, um Python-Programme in Apache hosten zu können. Der entsprechende Befehl in Ubuntu lautet:

apt-get install -y apache2 libapache2-mod-wsgi-py3

Nach der Installation von Apache erzeugen Sie die Datei "/etc/apache2/sites-available/netbox.conf" mit dem Inhalt wie in Listing 1.

Listing 1: Apache-Konfigurationsdatei

<VirtualHost *:80>
ProxyPreserveHost On
# bei "ServerName" den richtigen Namen eintragen.
ServerName netbox.example.com
# /static verweist auf das entsprechende Verzeichnis von Netbox
Alias /static /opt/netbox/netbox/static
# Needed to allow token-based API authentication
WSGIPassAuthorization on
<Directory /opt/netbox/netbox/static>
           Options Indexes FollowSymLinks MultiViews
           AllowOverride None
           Require all granted
</Directory>
<Location /static>
           ProxyPass !
</Location>
           RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
           ProxyPass / http://127.0.0.1:8001/
           ProxyPassReverse / http://127.0.0.1:8001/
</VirtualHost>

Jetzt sichern Sie die Datei, aktivieren Sie die Apache-Module "proxy" und "proxy_ http" und starten Apache neu:

a2enmod proxy
a2enmod proxy_http
a2enmod headers
a2ensite netbox
service apache2 restart

Wollen Sie statt Apache den Webserver nginx einsetzen, ist das schnell erledigt:

apt-get install -y nginx

Erzeugen Sie danach die Datei "/etc/ nginx/sites-available/netbox" entsprechend Listing 2.

Listing 2: nginx-Konfigurationsdatei

server {
           listen 80;
           # bei "ServerName" den richtigen Namen eintragen.
           server_name netbox.example.com;
           client_max_body_size 25m;
           # /static/ verweist auf das entsprechende Verzeichnis von Netbox
           location /static/ {
                alias /opt/netbox/netbox/static/;
           }
           location / {
                proxy_pass http://127.0.0.1:8001;
                proxy_set_header X-Forwarded-Host $server_name;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-Proto $scheme;
                add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
           }
}
Bild 3: Nach der Installation zeigt das Netbox-Dashboard im Browser einen Überblick über Ressourcen und Aktivitäten.
Bild 3: Nach der Installation zeigt das Netbox-Dashboard im Browser einen Überblick über Ressourcen und Aktivitäten.

Anschließend löschen Sie die Datei "/etc/nginx/sites-enabled/ default" und erzeugen einen Symlink im Verzeichnis "sites-enabled" für die aktuelle Netbox-Konfigurationsdatei:

 

cd /etc/nginx/sites-enabled/

rm default
ln -s /etc/nginx/sites-available/netbox

Starten Sie nginx erneut, um die neue Konfiguration zu nutzen:

service nginx restart

Hinter dem Frontend-Server (nginx oder Apache) benötigen wir noch einen Python-WSGI-HTTP-Server, zum Beispiel "Gunicorn". Installieren Sie Gunicorn mit pip3 install gunicorn. Erzeugen Sie dann im Netbox-Installationspfad die Datei "gunicorn_config.py", also "/opt/netbox/ gunicorn_config.py" in unserem Beispiel:

command = '/usr/bin/gunicorn'
pythonpath = '/opt/netbox/netbox'
bind = '127.0.0.1:8001'
workers = 3
user = 'www-data'

Tragen Sie bei "command" den Ort der Gunicorn-Executable ein (zu ermitteln mit which gunicorn) und passen Sie die pythonpath-Variable falls notwendig an. Unter CentOS ändern Sie den Nutzernamen von "www-data" nach "nginx" oder "apache".

Nun brauchen Sie noch einen "Supervisor", ein System zur Steuerung und Pflege von Prozesszuständen. Es ähnelt in seiner Funktion "init", ist aber nicht als dessen Ersatz gedacht. Das System verwaltet einzelne Prozesse oder Gruppen von Prozessen, die in einer bestimmten Reihenfolge gestartet und gestoppt werden müssen. Es kann auch den Zustand einzelner Prozesse über einen RPC-Mechanismus steuern, sodass normale Benutzer Prozesse neu starten können. Die Installation starten Sie mit dem Befehl

apt-get install -y supervisor

Erzeugen Sie die Datei "/etc/supervisor/ conf.d/netbox.conf" wie in Listing 3 zu sehen. Passen Sie die Verzeichnisse eventuell an und nehmen als User anstelle von "www-data" für CentOS entweder "nginx" oder "apache". Danach starten Sie den Supervisor-Service neu, damit dieser den Gunicorn-Server sucht und startet:

service supervisor restart

Jetzt sollten Sie in der Lage sein, sich in nginx oder Apache über den Servernamen oder die IP-Adresse zu verbinden. Sollte das nicht klappen, überprüfen Sie, ob der entsprechende Webserver läuft und korrekt konfiguriert ist. Erhalten Sie den Fehlercode "502 (bad gateway)", deutet das hingegen darauf hin, dass Gunicorn falsch konfiguriert ist oder nicht läuft.

Listing 3: Netbox-Konfigurationsdatei

[program:netbox]
command = gunicorn -c /opt/netbox/gunicorn_config.py netbox.wsgi
directory = /opt/netbox/netbox/
user = www-data
[program:netbox-rqworker]
command = python3 /opt/netbox/netbox/manage.py rqworker
directory = /opt/netbox/netbox/
user = www-data

Einfach in der Praxis

Nun haben wir Netbox mit einer Minimalkonfiguration ins Laufen gebracht, die Sie selbstverständlich an die Anforderungen Ihrer Umgebung anpassen müssen. Doch der schwerste Teil ist erledigt, denn im Betrieb zeigt sich Netbox unkompliziert. Als Nächstes können Sie beispielsweise eine LDAP-Authentifikation mit einem entfernten Server einrichten, die Details beschreibt die Netbox-Dokumentation [5].

Sie können aber auch direkt loslegen: Dazu öffnen Sie Netbox im Browser, also etwa über "http://127.0.0.1:8000/". Wichtig ist es hier, den Port anzugeben. Anschließend erscheint das Dashboard. Hier erhalten Sie einen Überblick über Standorte, Racks, Geräte und IP-Adressen. Ein Klick darauf öffnet die jeweilige Kategorie und Sie können dort alle Einträge für einen Typ sehen oder einen neuen Eintrag hinzufügen.

Fazit

Netbox ist ein mächtiges Tool fürs Netzwerkmanagement. Die Installation geht nicht out-of-the-box, sollte aber für erfahrene Administratoren kein Hindernis darstellen. Einziger Nachteil: Es wird als Datenbankserver nur PostgreSQL unterstützt, weil Netbox die Netzwerkadresstypen von PostgreSQL nutzt.

(jp) Author: Thomas Hümmler

Aus dem IT-Administrator Magazin Ausgabe 12/2019: Rechenzentrum & Infrastruktur Seite 62-66

 

Ähnliche Beiträge

Im Test: Sunbird DCIM

Das DCIM-Werkzeug Sunbird verspricht die umfassende Verwaltung von Assets im Rechenzentrum mit vielen nützlichen Funktionen, ansprechender Oberfläche und maximalem Komfort. Dies gelingt mit der Software auch in geografisch verteilten Landschaften. Dabei liefert Sunbird wertvolle Daten zum Zustand und Energieverbrauch, und schafft somit einen guten Einblick in das RZ-Geschehen.

Zero-Touch-Provisionierung von aktiven Netzwerkkomponenten (3)

Zero-Touch-Provisionierungsprozesse sind im Rollout von Client-PCs und Servern bereits lange Zeit Standard. Im Gegensatz dazu kommen diese Prozesse bei aktiven Netzwerkkomponenten wie Routern und Switches nur selten zum Einsatz. Im dritten und letzten Teil gehen wir auf weitere Varianten ein, etwa die ZTP-Provisionierung ohne proprietären Server, die Boot-Loader-Variante iPXE oder das alte Verfahren AutoInstall.

Zero-Touch-Provisionierung von aktiven Netzwerkkomponenten (2)

Zero-Touch-Provisionierungsprozesse sind im Rollout von Client-PCs und Servern bereits lange Zeit Standard. Im Gegensatz dazu kommen diese Prozesse bei aktiven Netzwerkkomponenten wie Routern und Switches nur selten zum Einsatz. Im zweiten Teil der Workshopserie schildern wir den proprietären Cisco-Ansatz "Network-Plug-and-Play", der über eine GUI erfolgt und bei dem sich die ausgerollten Komponenten an die Gegebenheiten im Netzwerk anpassen lassen.