Work and Progress
netbox migration
zielserver: SLES 15 SP7, kein direkter internetzugang -> nur über proxy mit einzeln freigeschalteten adressen.
setup
- postgresql 17 (datenbank)
- valkey 8 (redis-kompatibel, caching/background jobs)
- nginx (reverse proxy davor)
- gunicorn (wsgi server für die django-app)
→ das ist die von netbox offiziell empfohlene stack-kombi für native installs (kein docker)
warum kein podman/container? hatte ich erst überlegt, aber:
- plugins gehen über pip → bei container müsste ich bei jedem plugin ein neues image bauen
- hätte den proxy-freigabeprozess (siehe unten) nur noch mehr belastet → native installation gewählt
python versions-ärger
server hatte schon python 3.14 drauf (SLES bringt das mit). netbox braucht offiziell min. 3.10, aber:
strawberry-graphql(graphql dependency von netbox) ist mit 3.14 nicht kompatibel- migration bricht mit laufzeitfehler in der feld-initialisierung ab
→ fix: einfach die von SLES mitgelieferte python 3.11 genommen statt 3.14. lief dann sauber durch.
lesson learned: neueste version =! automatisch die beste
proxy shit
server ist nicht air-gapped --> proxy (freischaltung durch ticket)
genehmigungsprozess:
- ticket an proxy-team → quellsystem, zieladresse, port 443 ohne auth
- weil proxy SSL terminiert: zusätzliches ticket an infosec → SSL-bypass + freischaltung für
application/zipundapplication/gzipmime-types- dazu noch nen risikobogen ausfüllen (auswirkung bei nichtverfügbarkeit, alternativen geprüft etc.)
konkrete probleme die aufgetreten sind:
| problem | ursache | fix |
|---|---|---|
407 bei pip install, curl ging aber |
proxy-var nicht dauerhaft gesetzt / sudo killt env | in /etc/environment eintragen + sudo -E nutzen |
| 407 bei internen suse-manager repos | interne adressen liefen fälschlich über externen proxy | intern in no_proxy aufnehmen |
| podman pull auf ghcr.io scheitert trotz freigabe | freigabe deckte nur registry-api ab, nicht den separaten blob-storage (pkg-containers.githubusercontent.com) |
extra domain nachbeantragt |
| netbox source code nicht über pypi verfügbar | netbox gibt's nur als github release, kein pypi paket | einmal extern von jemandem mit internet geladen, per datenträger über sprungserver + SynaMan reingebracht |
→ takeaway: jedes neue plugin = potenziell neues ticket
installation
psycopg(postgres adapter) will kompilieren, brauchtpg_config→ fehlte, nachinstalliert:postgresql17-server-devel- Pillow braucht jpeg dev-header →
libjpeg8-develnachinstalliert - postgres/valkey wollten nicht auf
localhosthören → server hat das erst auf::1(ipv6) aufgelöst, dienste lauschten aber nur auf ipv4 loopback → fix: überall127.0.0.1stattlocalhostin der config - postgres auth:
identmethode ging nicht (mein domänen-user ≠ db-usernetbox) → aufmd5umgestellt - valkey config datei war gar nicht da, musste ich selbst minimal anlegen (nur loopback)
systemd service unter netbox.service angelegt → hat ausversehen die schon vorhandene datei vom netzwerkdienst wicked überschrieben. nach neustart → server komplett weg vom netz, nur noch über physische konsole erreichbar. 🙃
→ merke: bei eigenen systemd units immer eindeutige namen die nicht mit bestehenden diensten kollidieren können
plugins
dns (F1)
- erst falsches paket installiert (
netbox-dns) → passt nicht zur plugin-api von netbox 4.2, nutzt noch das alteextras.pluginsmodul das es nicht mehr gibt - richtiges paket:
netbox-plugin-dnsv1.2.14 → überPLUGINSaktiviert - microsoft-typische namen mit unterstrich (z.b.
_msdcs.domain.de) sind nach RFC 1034 eigentlich nicht erlaubt → musstetolerate_underscores_in_labelssetzen
octoDNS test:
- externes tool, liest zonen aus netbox (via
NetBoxDNSProvider/octodns-netbox-dnspaket) und kann die an andere systeme syncen - testzone
test.lokalangelegt (ns + a record), erfolgreich als yaml exportiert - nicht getestet: gegen echten microsoft-dns server, dafür hätte ich nen provider gebraucht den's für das ökosystem nicht gab + schreibzugriff auf produktive windows infra → F1 = architektur-mäßig belegt, aber nicht produktiv verifiziert
dhcp (F2) - hat einfach nicht geklappt
drei anläufe, alle gescheitert:
netbox-plugin-dhcp(offiziell) → braucht netbox 4.5 + python 3.12, hab aber 4.2/3.11netbox-kea-dhcp→ gibt's nicht mehr auf pypinetbox-kea-ng→ installiert sich, aber migration bricht ab, weil'score.exceptions.JobFailedimportiert, was's in 4.2.6 noch nicht gibt
→ fazit: DNS-plugin-ökosystem ist für die netbox version ok, DHCP ist einfach noch nicht reif genug. kein grundsätzliches "geht nicht", eher momentaufnahme.
was ich sonst noch getestet hab
- rechte (F5): testgruppe mit constraint (
tenant__name) → nur präfixe vom zugewiesenen mandanten sichtbar. funktioniert. - vlan (F6): gleiche VID (100) in zwei verschiedenen vlan-groups → geht problemlos. gleiche VID nochmal in derselben group → wird zurückgewiesen. genau wie erwartet.
- custom fields (F9): 3 felder angelegt (
domaene,sicherheitsbereichs_id,svn_id) auf präfix-objekte. domaene erstmal als textfeld statt choice-set, weil ich die vollständige werteliste aus infoblox nicht hatte. - filter/export (F8): präfixliste nach mandant/status gefiltert, als csv exportiert. läuft.
- ldap (F7):
django-auth-ldapinstalliert,REMOTE_AUTH_BACKENDkonfiguriert, verbindungsparameter vorbereitet — aber nicht live getestet, hatte keinen service-account und keinen zugriff aufs AD. offener punkt.
datenimport
- 572 standorte aus infoblox importiert (region/site group/site mapping)
- 4.262 präfixe importiert, über eigenes python-skript + netbox REST API
- standortzuordnung war nervig weil netbox numerische IDs will, infoblox hatte klartext-kurzbezeichnungen
- direkt eindeutig zuordenbar: 63,1%
- über zusatzmatching (kurzbezeichnung ↔ beschreibungsfeld): +17,0% → macht 80,1% insgesamt
- rest (15,9%) ohne standort importiert, 4,1% hatten gar keine standort-id im quelldatensatz
- encoding-ärger: teile vom datensatz waren windows-1252 statt utf-8 → umlaute in ortsnamen kaputt, musste nachbearbeiten
- ~500 nameserver-einträge + ein paar dns-zonen mit importiert
- nicht importiert: einzelne IP-adressen (nur die präfixe/subnetze als ganzes). infoblox hat da schätzungsweise 10.000er bis 100.000er einträge, hätte entweder direkten API-zugriff aufs produktive infoblox gebraucht oder manuellen export pro subnetz — beides nicht machbar im rahmen der arbeit.
offene punkte
- ldap gegen echtes AD testen (braucht service-account)
- einzelne IP-adressen importieren für vollständige skalierbarkeits-aussage
- die ~16% unzugeordneten präfixe manuell nacharbeiten
- DHCP nochmal probieren sobald netbox 4.5 + python 3.12 möglich ist, oder netbox labs enterprise variante anschauen (soll DHCP vorkonfiguriert für offline-betrieb haben)
No comments to display
No comments to display