fbpx

Netbox – Graal inżyniera sieciowego?

Jako administrator sieci i systemów musisz zarządzać adresacją IP. Nie ważne czy jest to adresacja IPv6, czy IPv4, czy są to adresy publiczne lub „prywatne (RFC1918). Musisz ten cenny zasób kontrolować i mieć pełny wgląd w to, co się z nim dzieje. Dzisiejszy wpis będzie o Netbox.

Co to jest Netbox?

Netbox to narzędzie prawie idealne. Zawiera wszystko, co jest potrzebne do zarządzania dokumentacją sieci.

Podstawową funkcjonalnością Netbox jest ipam, czyli zarządzanie przestrzenią adresową, numerami vlan-ów i vrf-ów.

Oprócz ipam administrator dostaje narzędzie do dokumentowania części fizycznej sieci. Możesz opisać zawartość szaf typu rack. Inwentaryzować połączeń sieciowe oraz mieć pod kontrolą nad połączeniami dzierżawionymi. Dzieki kontroli zmian, wiesz kiedy i kto dodał lub zarezerwował port lub adres IP.

Skoro jest taki fajny, to czego nie potrafi?

Czego ta aplikacja nie umie?

Netbox nie jest systemem monitoringu sieci, nie powie czy coś działa lub, który port się położył. Jeśli szukasz, prostego systemu monitoringu to polecam ten artykuł.

Nie jest też serwerem RADIUS i DNS. Nie będzie monitorował zmian w konfiguracji.

ale

Zawsze jest jakieś ALE. 😉

Netbox ma API, który można wykorzystać do połączenia się z innymi narzędziami np.: Ansible, aby rozszerzyć jego możliwości.

Wystarczy teorii, przejdźmy do instalacji.

Instalacja i konfiguracja Netbox

Instalacje przeprowadzimy na Ubuntu Linux 16.04 LTS.

Opis instalacji zakłada, że na maszynie nie ma innych usług. Przed instalacją sprawdź, czy nie jest to maszyna produkcyjna, aby nie zrobić sobie problemów.

 

W pierwszym kroku instalujemy Python 3 i Postgresql

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

Po zainstalowaniu PostgreSQL musisz utworzyć bazę danych. Zadanie proste, ale pamiętaj o średniku na końcu polecenia.

sudo -u postgres psql
postgres=# CREATE DATABASE netbox;
CREATE DATABASE
postgres=# CREATE USER netbox WITH PASSWORD 'jakies_trudne_haslo_ktorego_nikt_nie_zna';
CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE netbox TO netbox;
GRANT
postgres=# \q

W kolejnym kroku klonujemy repozytorium z github.

Przechodzimy do /opt i wydajemy polecenie:

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

Po sklonowaniu repozytorium z github, musimy doinstalować wymagane przez Netbox pakiety. Aby to zrobić musisz, wydać polecenie:

pip3 install -r requirements.txt

Instalacja NAPALM

NAPALM to biblioteka Pythona, pozwalająca na zbieranie informacji o urządzeniach za pomocą REST API.

pip3 install napalm

Podczas instalacji NAPALM za pomocą pip3 możesz napotkać na taki błąd:

Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-k6rp13mr/pynacl/

Wydaj następujące polecenie, zaktualizuj setuptools:

pip3 install --upgrade setuptools

Po instalacji przechodzimy do konfiguracji Netbox

Konfiguracja Netbox

Musimy zlokalizować plik configuration.example.py. Powinien się znajdować w:

cd /opt/netbox/netbox/netbox

Kopiujemy configuration.example.py do configuration.py

cp configuration.example.py configuration.py

Po wykonaniu kopii musimy zmienić zawartość pliku configuration.py.  Zajmiemy się trzema sekcjami:

ALLOWED_HOSTS – podajemy adres IP lub adres domenowy, na jaki będziemy mogli się zalogować do Netbox.

DATABASE – konfiguracja bazy danych

SECRET_KEY – klucz, minimum 50 znaków (litery/cyfry/znaki specjalne). Jeśli nie chcesz sam generować 50 znaków, możesz wykorzystać skrypt generate_secret_key.py, który znajduje się katalog wyżej.
Przykład uzupełnionych paramterów:

#########################
#                       #
# Required settings     #
#                       #
#########################

# This is a list of valid fully-qualified domain names (FQDNs) for the NetBox server. NetBox will not permit write
# access to the server via any other hostnames. The first FQDN in the list will be treated as the preferred name.
#
# Example: ALLOWED_HOSTS = ['netbox.example.com', 'netbox.internal.local']
ALLOWED_HOSTS = ['10.10.50.4']
# PostgreSQL database configuration.
DATABASE = {
 'NAME': 'netbox', # Database name
 'USER': 'netbox', # PostgreSQL username
 'PASSWORD': 'dlugie_i_trudne_haslo', # PostgreSQL password
 'HOST': 'localhost', # Database server
 'PORT': '', # Database port (leave blank for default)
}
# This key is used for secure generation of random numbers and strings. It must never be exposed outside of this file.
# For optimal security, SECRET_KEY should be at least 50 characters in length and contain a mix of letters, numbers, and
# symbols. NetBox will not run without this defined. For more information, see
# https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-SECRET_KEY
SECRET_KEY = 'tajny_klucz_skladajacy_sie_z_50_zn@kow'

Gdy skonfigurujesz configuration.py, możesz przystąpić do migracji schematu bazy danych. Aby to zrobić, musisz wydać polecenie:

python3 manage.py migrate

Następnie wydaj polecenie, które zbiera wszystkie statyczne pliki:

python3 manage.py collectstatic --no-input

Instalacja Netbox jest zakończona. Sprawdźmy, czy działa:

python3 manage.py runserver 0.0.0.0:8000 --insecure

Po wydaniu polecenia, otworz adres w przeglądarce, który podałeś w ALLOWED_HOSTS z portem 8000.

Instalacja Nginx

Działanie Netbox w powyższej formie jest niezalecane. Aby aplikacja działa stabilnie zainstalujemy Nginx, który będzie działał jako proxy serwer.

apt-get install -y nginx

Po instalacji serwera Nginx, musimy go skonfigurować. Utwórz plik netbox w /etc/nginx/sites-available/

Plik powinien wyglądać tak:

server {

    listen 80;
    server_name 10.10.50.4;
    client_max_body_size 25m;
    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"';
}
}

Adres w parametrze server_name  musi pokrywać się z wartością ALLOWED_HOSTS z pliku configure.py

Mamy zainstalowany serwer HTTP, w naszym przypadku Nginx. Musimy jeszcze zainstalować i skonfigurować:

Gunicorn – Python Web Server Gateway Interface

pip3 install gunicorn

Po instalacji tworzymy plik gunicorn_config.py w głównym katalogu Netbox.

Plik gunicorn_config.py musi zawierać:

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

supervisord – aplikacja pozwalająca na zarządzanie procesami w stylu unixa

apt-get install -y supervisor

Następnie tworzymy plik netbox.conf w /etc/supervisor/conf.d/

Plik musi zawierać:

[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

Po zakończeniu edycji musimy zrestartować supervisord:

service supervisor restart

Jeśli wszystko jest poprawnie skonfigurowane, to powinieneś w przeglądarce zobaczyć ekran główny Netbox. Gdy dostajesz błąd 502, sprawdź konfiguracje gunicorn i nginx.

Co dalej?

Testuj, wprowadź kilka prefiksów, dodaj dwie lokalizacje, kilka łącz i sprawdź czy, ci się podoba.

Moim zdaniem, jest to jeden z najlepszych systemów do zarządzania dokumentacją sieci, który ma bardzo duże możliwości rozbudowy dzięki API.

Podobne wpisy

Adresacja IPv6 – jak dostać?

W listopadzie RIPE ogłosił, że “skończyły” się adresy IPv4. Z dzisiejszego wpisu dowiesz się jak za darmo dostać się do świata IPv6, tzn. jak uzyskać adresacje IPv6. Nawet, wtedy gdy Twój dostawca Internetu wspiera tylko IPv4.Inżynier sieciowy lubiący dzielić się...

czytaj dalej

Instalacja i konfiguracja Smokeping

Smokeping to proste narzędzie służące do monitorowania i wizualizacji opóźnień w sieci. Do przechowywania i wizualizacji danych wykorzystuje RRDtool. Bez zbędnego przedłużania przejdźmy do instalacji Smokeping.Instalacja Smokeping Zainstalujemy Smokeping na Ubuntu...

czytaj dalej

Iperf3 – testowanie przepustowości łącza

     Jako administrator lub architekt sieci często dostajesz zgłoszenia lub sam zgłaszasz, że łącze nie ma przewidywanej umową przepustowości. Co wtedy robisz? Przeprowadzasz testy. Ok, ale czym? Speedtest? Pobieranie i wysyłanie pliku? Monitorowanie...

czytaj dalej
Tomasz Mikołajek

Tomasz Mikołajek

Założyciel Showroute.pl

Inżynier sieciowy lubiący dzielić się wiedzą i pomagać innym zrozumieć zawiłości działania sieci i Internetu.