New Structure: - 01-NETWORK-MAP.md - Network topology, IPs, Docker networks, services - 02-SERVICES-CRITICAL.md - DNS, Auth, Routing (P0/P1 services) - 03-SERVICES-OTHER.md - All non-critical services - 04-HARDWARE-INVENTORY.md - Physical devices and specs - 05-CHANGELOG.md - Major events only New Folders: - docs/archive/ - Legacy docs (read-only reference) - docs/wip/ - Planned changes and ideas - UPGRADE-2026-HARDWARE.md - N5 Air + N100 migration plan - GITOPS-CONTAINERS.md - Phase 2 container GitOps Changes: - Moved all 22 legacy docs to archive/ - Consolidated container IPs, physical map, and services into single network map - Extracted critical vs non-critical service classification - Simplified changelog to major events only Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
6.4 KiB
Phase 8: NetDisco Integration with NetBox
Status: ✅ COMPLETED (Enhanced) Priority: Medium Created: 2026-01-19 Last Updated: 2026-01-19
Overview
Deploy NetDisco for enterprise-grade network discovery using SNMP, and integrate it with NetBox for a unified "Fing-like" network management experience.
Goal: Automatic device discovery, switch port mapping, and L2/L3 topology tracking synchronized to NetBox IPAM/DCIM.
Task Status Summary
| Task | Description | Status |
|---|---|---|
| 8.1 | Enable SNMP on MikroTik Devices | ✅ COMPLETED |
| 8.2 | Deploy NetDisco on Unraid | ✅ COMPLETED |
| 8.3 | Configure NetDisco Discovery | ✅ COMPLETED |
| 8.4 | Traefik Ingress for NetDisco | ✅ COMPLETED |
| 8.5 | NetBox Integration | ✅ COMPLETED |
| 8.6 | Testing & Validation | ✅ COMPLETED |
| 8.7 | Enhanced Network Mapping | ✅ COMPLETED |
Current State
| Tool | Status | Purpose |
|---|---|---|
| NetAlertX | Running | ARP/ICMP-based device discovery |
| NetBox | Running | IPAM/DCIM with Slurpit plugin |
| NetDisco | ✅ Running | SNMP-based discovery |
Discovered Devices: 4 (hAP ax³, cAP ac, CSS326, Unraid)
Deployment Details
Database
- Host: postgresql17
- Database: netdisco_db
- User: netdisco_user
- Password: NetD1sc0_M0stW4nt3d@db
Containers
| Container | Image | Port | Status |
|---|---|---|---|
| netdisco-web | netdisco/netdisco:latest-web | 5000 | Running |
| netdisco-backend | netdisco/netdisco:latest-backend | - | Running |
| netbox | netbox-custom:latest (with slurpit) | 8090 | Running |
Access URLs
| URL | Purpose |
|---|---|
| https://netdisco.xtrm-lab.org | External access (Authentik SSO) |
| http://192.168.31.2:5000 | Internal NetDisco access |
| https://netbox.xtrm-lab.org | External NetBox access |
| http://192.168.31.2:8090 | Internal NetBox access |
Task 8.7: Enhanced Network Mapping (COMPLETED)
1. MikroTik DHCP → NetBox Sync
Script: /mnt/user/appdata/netdisco/scripts/mikrotik_dhcp_to_netbox.sh
Syncs DHCP leases from MikroTik router to NetBox IP addresses with:
- Hostname
- MAC address
- Comments/notes from DHCP
Run Command:
/mnt/user/appdata/netdisco/scripts/mikrotik_dhcp_to_netbox.sh
Result: 29 devices synced (26 created, 3 updated)
2. Slurp'it NetBox Plugin
Plugin Version: 1.2.7
NetBox Version: 4.5.0
Custom Image: netbox-custom:latest
Plugin Configuration: /mnt/user/appdata/netbox/config/plugins.py
PLUGINS = ["slurpit_netbox"]
PLUGINS_CONFIG = {
"slurpit_netbox": {}
}
Note: Slurp'it requires a separate Slurp'it server for full network discovery. The plugin provides NetBox integration once the server is configured.
3. Enhanced NetDisco → NetBox Sync
Script: /mnt/user/appdata/netdisco/scripts/sync_to_netbox.py
Enhanced version syncs:
- Device info (serial, OS, model, vendor)
- IP addresses from device_ip table
- ARP table entries (MAC to IP mappings)
- System MAC addresses
- Uptime information
Run Command:
PG17_IP=$(docker inspect postgresql17 --format "{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}")
docker run --rm \
--network dockerproxy \
-e NETDISCO_DB_HOST=$PG17_IP \
-e NETBOX_URL=http://192.168.31.2:8090 \
-v /mnt/user/appdata/netdisco/scripts:/scripts \
python:3.11-slim python /scripts/sync_to_netbox.py
SNMP-Enabled Devices
| Device | IP | Type | Communities |
|---|---|---|---|
| hAP ax³ | 192.168.31.1 | Router | netdisco, public |
| cAP ac | 192.168.31.6 | AP | netdisco, public |
| CSS326 | 192.168.31.9 | Switch | public |
| XTRM-Unraid | 192.168.31.2 | Server | netdisco, public |
Unraid SNMP Configuration
Config File: /etc/snmp/snmpd.conf
rocommunity netdisco
rocommunity public
syslocation XTRM Home Lab
syscontact admin@xtrm-lab.org
sysname XTRM-Unraid
disk /mnt/disk1
disk /mnt/cache
extend cpumhz /usr/local/emhttp/plugins/snmp/cpu_mhz.sh
extend diskfree /usr/local/emhttp/plugins/snmp/disk_free_space.sh
extend disktemp /usr/local/emhttp/plugins/snmp/disk_temps.sh
extend meminfo /usr/local/emhttp/plugins/snmp/mem_info.sh
extend sharefree /usr/local/emhttp/plugins/snmp/share_free_space.sh
Plugin: kubedzero/unraid-snmp
Sync Scripts Summary
| Script | Purpose | Trigger |
|---|---|---|
| sync_to_netbox.py | NetDisco → NetBox device sync | Manual / cron |
| mikrotik_dhcp_to_netbox.sh | MikroTik DHCP → NetBox IPs | Manual / cron |
Scheduling (Cron Examples)
# NetDisco sync - hourly at :45
45 * * * * docker run --rm --network dockerproxy -e NETDISCO_DB_HOST=172.18.0.13 -e NETBOX_URL=http://192.168.31.2:8090 -v /mnt/user/appdata/netdisco/scripts:/scripts python:3.11-slim python /scripts/sync_to_netbox.py >> /mnt/user/appdata/netdisco/logs/sync.log 2>&1
# MikroTik DHCP sync - hourly at :50
50 * * * * /mnt/user/appdata/netdisco/scripts/mikrotik_dhcp_to_netbox.sh >> /mnt/user/appdata/netdisco/logs/dhcp-sync.log 2>&1
NetBox Credentials
| Item | Value |
|---|---|
| URL | http://192.168.31.2:8090 |
| Admin User | admin |
| Admin Password | M0stW4nt3d@xtrm |
| API Token (v1) | kI2HiUD8Bb53KfdkOTaiWYxZuERjhGU30CgGdYxm |
| Secret Key | 56537576d25051987077c7270c876099fe44ad83bc7695a7f4531904fce5678e |
Troubleshooting
session_cookie_key Error
If NetDisco web UI shows "session_cookie_key must be defined":
SELECT * FROM sessions WHERE id = 'dancer_session_cookie_key';
INSERT INTO sessions (id, a_session) VALUES ('dancer_session_cookie_key', md5(random()::text));
NetBox Plugin Not Loading
Check container logs:
docker logs netbox 2>&1 | grep -i plugin
Verify plugins.py is mounted:
docker exec netbox cat /etc/netbox/config/plugins.py
SNMP Not Responding
snmpwalk -v2c -c netdisco 192.168.31.1 system
Phase 8 Summary
Status: ✅ COMPLETED
All tasks completed with enhanced capabilities:
- 4 devices discovered via SNMP (MikroTik + Unraid)
- NetDisco → NetBox sync with device details
- MikroTik DHCP → NetBox sync (29 devices/IPs)
- Slurp'it plugin installed for future discovery expansion
- ARP table sync for MAC-to-IP mapping
Data Flow:
MikroTik Devices ─SNMP─> NetDisco ─sync─> NetBox
│ │ ↑
└──────DHCP──────────sync────────────┘