Skip to main content

Work and Progress

netbox migration

zielserver: SLES 15 SP7, kein direkter internetzugang -> nur über proxy mit einzeln freigeschalteten adressen.

Export der Daten aus Infobloxsetup

  • CNP-UNpostgresql 17 (default)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 --> Toggle hierarchical viewproxy (X)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/zip und application/gzip mime-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 Togglenutzen flat view 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, braucht pg_config → fehlte, nachinstalliert: postgresql17-server-devel Pillow braucht jpeg dev-header → libjpeg8-devel nachinstalliert postgres/valkey wollten nicht auf localhost hören → server hat das erst auf ::1 (ipv6) aufgelöst, dienste lauschten aber nur auf ipv4 loopback → fix: überall 127.0.0.1 statt localhost in der config postgres auth: ident methode ging nicht (mein domänen-user ≠ db-user netbox) -> Pfeilauf md5 umgestellt 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 obenneustart → 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 (Export)F1)

              erst falsches paket installiert (netbox-dns) → passt nicht zur plugin-api von netbox 4.2, nutzt noch das alte extras.plugins modul das es nicht mehr gibt Alternativerichtiges perpaket: Infobloxnetbox-plugin-dns WAPIv1.2.14 → über PLUGINS aktiviert microsoft-typische namen mit unterstrich (z.b. https://ipam.illinois.edu/wapidoc/index.html_msdcs.domain.de) sind nach RFC 1034 eigentlich nicht erlaubt → musste tolerate_underscores_in_labels setzen

              octoDNS test:

                externes tool, liest zonen aus netbox (via NetBoxDNSProvider / octodns-netbox-dns paket) und kann die an andere systeme syncen testzone test.lokal angelegt (ns + a record), erfolgreich als yaml exportiert Mapping:nicht getestet: Networkgegen ->echten prefixmicrosoft-dns |server, Commentdafür ->hätte descriptionich 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.11 netbox-kea-dhcp → gibt's nicht mehr auf pypi netbox-kea-ng → installiert sich, aber migration bricht ab, weil's core.exceptions.JobFailed importiert, 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-ldap installiert, REMOTE_AUTH_BACKEND konfiguriert, 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)