Page:
Personalización
Clone
1
Personalización
groales edited this page 2025-12-04 10:20:42 +01:00
Table of Contents
Personalización
Configuración avanzada de NetBox: LDAP, plugins, scripts y más.
Configuración de Archivos
NetBox usa /config/ para almacenar configuración personalizada.
Acceder a Configuración
# Entrar al contenedor
docker exec -it netbox bash
# Navegar a config
cd /config
# Ver archivos
ls -la
Archivos importantes:
configuration.py- Configuración principalldap_config.py- Autenticación LDAP (si usas LDAP)plugins/- Directorio de pluginsreports/- Scripts de reportes personalizadosscripts/- Scripts ejecutables desde UI
Autenticación LDAP
Configurar LDAP
Edita /config/ldap_config.py:
import ldap
from django_auth_ldap.config import LDAPSearch, GroupOfNamesType
# Servidor LDAP
AUTH_LDAP_SERVER_URI = "ldap://ldap.example.com"
# Credenciales para bind
AUTH_LDAP_BIND_DN = "CN=netbox,OU=Services,DC=example,DC=com"
AUTH_LDAP_BIND_PASSWORD = "password"
# Búsqueda de usuarios
AUTH_LDAP_USER_SEARCH = LDAPSearch(
"OU=Users,DC=example,DC=com",
ldap.SCOPE_SUBTREE,
"(sAMAccountName=%(user)s)"
)
# Mapeo de atributos
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "givenName",
"last_name": "sn",
"email": "mail"
}
# Grupos
AUTH_LDAP_GROUP_SEARCH = LDAPSearch(
"OU=Groups,DC=example,DC=com",
ldap.SCOPE_SUBTREE,
"(objectClass=group)"
)
AUTH_LDAP_GROUP_TYPE = GroupOfNamesType()
# Permisos basados en grupos
AUTH_LDAP_USER_FLAGS_BY_GROUP = {
"is_staff": "CN=NetBox Admins,OU=Groups,DC=example,DC=com",
"is_superuser": "CN=NetBox Superusers,OU=Groups,DC=example,DC=com"
}
# Sincronización automática
AUTH_LDAP_ALWAYS_UPDATE_USER = True
AUTH_LDAP_FIND_GROUP_PERMS = True
AUTH_LDAP_MIRROR_GROUPS = True
Reinicia NetBox: docker restart netbox
Plugins
Instalar Plugin
# Ejemplo: NetBox Topology Views
docker exec -it netbox bash
pip install netbox-topology-views
# Editar configuration.py
nano /config/configuration.py
# Añadir a PLUGINS
PLUGINS = ['netbox_topology_views']
# Configuración específica del plugin (opcional)
PLUGINS_CONFIG = {
'netbox_topology_views': {
'static_image_directory': '/opt/netbox/netbox/media/topology_views'
}
}
# Salir y reiniciar
exit
docker restart netbox
Plugins Recomendados
| Plugin | Descripción |
|---|---|
| netbox-topology-views | Visualización de topología de red |
| netbox-secrets | Gestión segura de credenciales |
| netbox-bgp | Gestión de sesiones BGP |
| netbox-documents | Adjuntar documentos |
Scripts Personalizados
Crear Script
# Crear script en /config/scripts/
docker exec -it netbox bash
nano /config/scripts/example_script.py
Ejemplo de script:
from dcim.models import Device
from extras.scripts import Script
class DeviceAudit(Script):
class Meta:
name = "Device Audit"
description = "Genera reporte de dispositivos sin IP asignada"
def run(self, data, commit):
devices_without_ip = Device.objects.filter(
primary_ip4__isnull=True,
primary_ip6__isnull=True
)
self.log_info(f"Dispositivos sin IP: {devices_without_ip.count()}")
for device in devices_without_ip:
self.log_warning(f" - {device.name} ({device.site.name})")
return f"Auditados {devices_without_ip.count()} dispositivos"
El script aparecerá en Scripts en la UI de NetBox.
Configuración Avanzada
configuration.py
Opciones comunes en /config/configuration.py:
# Banner personalizado
BANNER_TOP = 'NetBox Producción - ICT Iberia'
BANNER_BOTTOM = ''
BANNER_LOGIN = 'Acceso Restringido - Solo Personal Autorizado'
# Paginación
PAGINATE_COUNT = 50
MAX_PAGE_SIZE = 1000
# Preferencias de sesión
LOGIN_REQUIRED = True
SESSION_COOKIE_AGE = 1209600 # 2 semanas
# Timeout de cambios
CHANGELOG_RETENTION = 90 # días
# Enforcement de nombres únicos
ENFORCE_GLOBAL_UNIQUE = True
# Webhooks y jobs
QUEUE_NAMES = ['default', 'high', 'low']
# Métricas
METRICS_ENABLED = True
# GraphQL
GRAPHQL_ENABLED = True
Personalizar Plantillas
# Crear override de plantilla
docker exec -it netbox mkdir -p /config/templates/dcim/device
docker exec -it netbox cp /app/netbox/templates/dcim/device/base.html /config/templates/dcim/device/
Edita /config/templates/dcim/device/base.html para personalizar la UI.
Integración con Herramientas
Ansible
- name: Get devices from NetBox
hosts: localhost
tasks:
- name: Query NetBox API
uri:
url: "https://netbox.example.com/api/dcim/devices/"
headers:
Authorization: "Token {{ netbox_token }}"
return_content: yes
register: devices
- name: Show devices
debug:
var: devices.json.results
Terraform
provider "netbox" {
server_url = "https://netbox.example.com"
api_token = var.netbox_token
}
resource "netbox_prefix" "example" {
prefix = "10.0.0.0/24"
status = "active"
description = "Example prefix"
}
Python
import pynetbox
nb = pynetbox.api(
'https://netbox.example.com',
token='tu_token_aqui'
)
# Obtener dispositivos
devices = nb.dcim.devices.all()
for device in devices:
print(f"{device.name} - {device.primary_ip}")
# Crear IP
new_ip = nb.ipam.ip_addresses.create(
address='192.168.1.100/24',
status='active',
dns_name='server.example.com'
)
Próximos Pasos
- Backup - Protege tu configuración
- API Docs - Explora la API
- Plugins Wiki - Más plugins