Net Box
Net Box
especialização
Resumo executivo
NetBox é uma plataforma “network source of truth” (fonte autoritativa) para modelar, documentar e
automatizar redes modernas, combinando disciplinas clássicas como DCIM e IPAM com APIs (REST e
GraphQL), extensibilidade (plugins) e mecanismos de automação orientados a eventos (event rules,
webhooks, scripts). A filosofia de design enfatiza refletir o mundo real (por exemplo, IPs vinculados a
interfaces, não ao “dispositivo” abstrato), representar o estado desejado (ideal state) e manter o núcleo
simples, delegando outras funções (monitoramento, DNS, RADIUS etc.) para ferramentas externas
integradas. 1
Do ponto de vista arquitetural, o NetBox (Community) é uma aplicação Django/Python executada como
serviço WSGI atrás de um servidor HTTP (nginx/Apache) e um servidor WSGI (gunicorn/uWSGI),
persistindo dados em PostgreSQL e usando Redis/django-rq para cache e filas de tarefas (jobs,
webhooks, sincronizações etc.). Isso cria uma separação clara entre: camada web (HTTP/WSGI), camada
transacional (PostgreSQL) e camada assíncrona (Redis + workers). 2
Na camada de integração, a REST API é o ponto central para CRUD e automação; a documentação
interativa, gerada via OpenAPI, fica disponível no próprio NetBox em /api/schema/swagger-ui/ , e
a API pode ser explorada via interface navegável em /api/ . A autenticação evoluiu com tokens v2
(padrão “Bearer”) e melhorias de segurança; há também endpoint específico para provisionamento
inicial de token e endpoint para validação de credenciais. 3
Para virar especialista, o domínio prático passa por: (a) modelagem correta do seu ambiente (DCIM/
IPAM/serviços/circuitos/VPN/wireless/virtualização), (b) governança operacional (permissões baseadas
em objetos, change logging, retenções e backups), (c) performance e escalabilidade (tuning WSGI/
workers/limites de paginação/filtragem eficiente), e (d) automação avançada (config rendering,
synchronized data, scripts, webhooks/event rules, Ansible/SDKs/plugins). 4
Papel (o que é e o que não é). A documentação posiciona o NetBox como repositório do estado
pretendido (desired state), desencorajando importação automatizada do estado operacional “ao vivo”
sem validação humana — justamente para preservar integridade da fonte de verdade. Também
delimita escopo: NetBox não é ferramenta de monitoramento, servidor DNS, servidor RADIUS, sistema
de configuração (config management) nem gestão predial (facilities management), mas é altamente
eficaz em alimentar ferramentas externas com dados confiáveis. 8
1
Stack do NetBox Community (auto-hospedado). O NetBox é construído sobre Django (Python), utiliza
PostgreSQL (v14+) como banco, e roda como serviço WSGI atrás de um servidor HTTP (nginx/Apache) e
um servidor WSGI (gunicorn/uWSGI). Redis (v4+) com django-rq é usado para cache e enfileiramento/
execução assíncrona de tarefas. 2
flowchart LR
U[Usuários & ferramentas] -->|HTTPS| H[Servidor HTTP<br/>(nginx/Apache)]
H -->|WSGI| W[WSGI server<br/>(gunicorn/uWSGI)]
W --> A[Aplicação NetBox<br/>(Django/Python)]
A -->|SQL| P[(PostgreSQL)]
A -->|cache/queues| R[(Redis)]
R --> Q[Workers RQ<br/>(rqworker)]
Q -->|tarefas assíncronas| T[Jobs: webhooks, scripts, sync datasources,
etc.]
2
Mapa comparativo: módulos, foco e objetos centrais
Superfícies de
Foco
Domínio Exemplos de objetos (modelos) automação
operacional
“nativas”
REST/
GraphQL;
Presença física, [Link] , [Link] ,
webhooks/
racks, [Link] , [Link] ,
event rules;
DCIM dispositivos, [Link] , [Link]/
scripts/jobs;
cabeamento, PowerFeed , [Link]/
SVG
energia ModuleType
(elevations/
trace)
API + “next
Prefixos, IPs, available”;
[Link] , [Link] ,
VRFs, VLANs, filtros;
IPAM [Link] , [Link] , [Link] ,
ASNs, serviços templates/
[Link]
L7 dados de
contexto
API;
integração
Clusters e VMs [Link] ,
Virtualização com IPAM;
junto do físico [Link]
scripts;
integrações
API; eventos;
WLANs e [Link] ,
Wireless associação
enlaces PTP [Link]
com VLAN
API +
Config
OpenAPI;
rendering, [Link]/DataFile ,
Provisionamento/ synchronized
dados extras (templates, scripts, webhooks,
Extensões data;
sincronizados, config contexts)
webhooks;
scripts, plugins
jobs; plugins
3
DCIM (infra física, conexões e energia)
Facilities (hierarquia física). O módulo de Facilities estrutura desde regiões e grupos de sites até sites,
locations e racks, permitindo hierarquias recursivas (ex.: continente → país → estado → cidade) e
separação entre agrupamento geográfico (Regions) e funcional (Site Groups). 14
Racks e elevações. O modelo Rack representa racks 2-post/4-post e exige associação a um site (e
opcionalmente a uma location). A documentação também destaca elevações de rack com renderização
SVG, inclusive com endpoints dedicados para elevação/visualização em API (histórico e melhorias
aparecem em release notes). 15
Devices, device types e cabeamento. Device types definem atributos físicos e os componentes
(console/power/interfaces etc.), e o NetBox modela cabos como conexões entre terminais compatíveis,
aplicando validações para impedir conexões incoerentes. Há suporte à modelagem modular (módulos/
line cards) e a renomeação automática de componentes “templated” conforme o slot/baia onde um
módulo é instalado. 16
Energia (power panels/feeds). O recurso de Power Tracking permite modelar painéis de energia e
feeds (circuitos), além de conexões com portas de energia; também suporta topologias de energia
primária vs redundante. 17
O IPAM é descrito como um núcleo do NetBox, com paridade IPv4/IPv6, VRFs, hierarquia automática e
recursos associados. 18
Virtualização
O NetBox modela clusters e máquinas virtuais ao lado do inventário físico; VMs se comportam de forma
semelhante a devices em termos de interfaces e atribuições de IP/VLAN, mas sem atributos físicos e
sem cabeamento físico. 21
Circuits
4
VPN e overlays
O módulo VPN cobre túneis privados (GRE, IP-in-IP, IPSec), topologias peer-to-peer e hub-and-spoke,
além de políticas IKE/IPSec. Há também suporte a L2VPN/overlays (VXLAN/EVPN etc.) conectando
VLANs/interfaces ao overlay para rastrear relações overlay ↔ underlay. 23
Wireless
Wireless LANs (SSIDs e parâmetros de autenticação), grupos hierárquicos e wireless links ponto-a-ponto
são suportados; wireless links exigem exatamente duas interfaces wireless (lado A e B) e possuem
status operacional. 24
Config rendering e context data. O NetBox pode renderizar configurações via templates Jinja2 e
dados de contexto (config contexts), com o objeto-alvo exposto como device / virtualmachine .
Config contexts podem ser combinados/“sobrepostos” por peso e critérios (site/region/role/tenant/tag
etc.), viabilizando governança de parâmetros (ex.: syslog servers por região e exceções por role). 25
Webhooks + event rules + execução assíncrona. Webhooks são emitidos sob controle de Event Rules;
payload pode ser customizado via Jinja2 com contexto rico (evento, timestamp, object_type, username,
request_id, data e snapshots). A entrega é enfileirada no Redis e processada pelo rqworker ,
permitindo que a requisição do usuário finalize sem esperar o HTTP outbound do webhook. 26
Plugins e extensão do modelo/das APIs. Plugins são apps Django instaladas ao lado do NetBox,
podendo adicionar modelos, views, conteúdo de UI, endpoints REST/GraphQL e middleware; porém, a
própria documentação alerta que a API de plugins é “limitada por escopo” e que elementos internos
não documentados podem mudar sem aviso, exigindo disciplina para evitar breaking changes. 28
A REST API viabiliza CRUD sobre a maioria dos modelos e é descrita como principal meio de integração/
automação. A documentação interativa (OpenAPI) é disponibilizada no próprio NetBox em /api/
schema/swagger-ui/ , e a navegação “browsable API” pode ser explorada em /api/ . 29
5
Autenticação por tokens (v1 e v2) e controles de segurança
Tokens como identidade do cliente. Tokens mapeiam clientes a contas de usuário e permissões.
Tokens não podem ser recuperados em plaintext após criação, exigindo armazenamento seguro
imediato. 31
Restrições e hardening. Tokens podem ser “write enabled” ou restritos a leitura e podem ser limitados
por IPs/Prefixos permitidos. Em mecanismos que “isenta” view permissions
( EXEMPT_VIEW_PERMISSIONS ), leituras podem ser liberadas sem token, mas isso é uma decisão
explícita de segurança. 33
A organização por “apps” é refletida tanto na API quanto em SDKs: DCIM, IPAM, circuits, virtualization,
tenancy, extras, users, wireless, core e vpn (entre outros). Em pyNetBox, por exemplo, isso aparece
como [Link] , [Link] , [Link] , [Link] , [Link] , [Link] ,
[Link] , [Link] , [Link] , [Link] . 35
• Mudanças/auditoria: /api/extras/object-changes/ 39
Quando houver dúvida de campos obrigatórios/serializers e filtros válidos, a fonte mais confiável é a
documentação OpenAPI no /api/schema/swagger-ui/ da instância em execução. 41
CRUD e bulk operations. A documentação descreve criação via POST no endpoint “list”, bulk delete
via DELETE no endpoint “list” com lista de IDs, e alerta que bulk delete é “all-or-none”. 31
Changelog messages por API. Objetos suportam campo changelog_message para registrar
justificativa/histórico em change logging durante create/update/delete. 42
6
Headers úteis. O header X-Request-ID pode ser usado para correlacionar requisições com change
records, e API-Version reporta a versão de API (alinhada à versão do NetBox). 42
32
curl -s -X POST \
-H "Authorization: Token $TOKEN" \
-H "Content-Type: application/json" \
[Link] \
--data '{
"name": "Site A",
"slug": "site-a",
"changelog_message": "Adding a site for ticket #4137"
}'
31
curl -s -X DELETE \
-H "Authorization: Token $TOKEN" \
-H "Content-Type: application/json" \
[Link] \
--data '[{"id": 10}, {"id": 11}, {"id": 12}]'
31
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json; indent=4" \
[Link] \
--data '{"username":"<user>","password":"<pass>"}'
31
7
Upload de arquivo (image attachment) via form-data (exige endpoint e campos apropriados):
curl -X POST \
-H "Authorization: Token $TOKEN" \
-H "Accept: application/json; indent=4" \
-F "object_type=[Link]" \
-F "object_id=2" \
-F "name=[Link]" \
-F "image=@local_file.png" \
[Link]
43
Erros de filtragem e “full table scan”. O NetBox não valida filtros em GET ; filtros incorretos podem
retornar tabelas inteiras silenciosamente (efeito: lentidão inesperada). pyNetBox oferece validação
( strict_filters ) usando a especificação OpenAPI. 44
A documentação define “modelo” como objeto discreto (ex.: device, IP address), implementado como
classe Django com tabela própria em PostgreSQL, e usa content types para referenciar modelos na
forma app_label.model (ex.: [Link] ). A combinação de content type e primary key
forma um identificador global (ex.: [Link] ). 45
O índice de modelos também apresenta uma “features matrix”, na qual capacidades (change logging,
event rules, tags, jobs, journaling etc.) são habilitadas por mixins e, desde v4.4, plugins podem registrar
features próprias. 46
• Nested group models: hierarquias recursivas (Region, SiteGroup, Location, TenantGroup etc.).
47
8
Diagrama ER (mermaid) de relacionamentos centrais
Observação: o modelo completo do NetBox é amplo; abaixo está um recorte “core” para
raciocínio arquitetural e automação. O site não fornece um ERD único consolidando
todos os modelos; este diagrama é uma síntese baseada nas descrições e índices oficiais.
50
erDiagram
REGION ||--o{ SITE : contains
SITEGROUP ||--o{ SITE : groups
SITE ||--o{ LOCATION : contains
LOCATION ||--o{ RACK : contains
RACK ||--o{ DEVICE : houses
9
Os relacionamentos apresentados refletem: hierarquia física (facilities), modelagem de VMs/clusters,
terminação de circuitos e conexões, VPN tunelada com múltiplos endpoints, wireless LANs/links e
atribuição de “tenancy” a múltiplos objetos. 51
Instalação (Community)
Plataforma e dependências. O guia de instalação foi testado em Ubuntu 24.04 e lista versões
suportadas: Python 3.12–3.14, PostgreSQL 14+, Redis 4.0+. Em outras distros, comandos e
dependências podem variar. 52
PostgreSQL. NetBox requer PostgreSQL 14+ e não suporta MySQL nem outros RDBMS. O guia inclui
criação de DB/usuário e recomenda senha forte e encoding UTF8 (evitando SQL_ASCII ). 53
Redis. Redis é usado para cache e filas (queuing) e o guia sugere validação simples ( redis-cli ping
→ PONG ). 54
Servidor WSGI/HTTP. O HTTP server (nginx/Apache) faz o front-end e repassa para o WSGI server
(gunicorn/uWSGI). A documentação alerta que algumas partes (como elevações de rack) dependem de
objetos embutidos e que o reverse proxy não deve sobrescrever X-Frame-Options . 55
Backup e restauração
Itens além do banco: no processo de upgrade, a documentação lembra de replicar mídia (uploads),
scripts e reports, e isso também se aplica a backups: além do dump do banco, garanta cópia
consistente de MEDIA_ROOT , scripts e reports conforme configuração. 57
Upgrade
O procedimento recomendado enfatiza: revisar release notes, fazer backup antes de iniciar, observar
regra de upgrade de major versions (somente a partir do minor mais recente da major anterior),
atualizar dependências, instalar nova versão (mantendo método original), rodar [Link] (rebuild
venv, dependências, migrations, build docs, collectstatic etc.) e reiniciar serviços ( netbox e netbox-
rq ). 59
Segurança
10
CORS/CSRF e superfícies web. Parâmetros como CORS_ORIGIN_ALLOW_ALL , whitelists e CSRF_*
são expostos, reforçando que o NetBox opera como aplicação web completa e deve ser alinhado ao seu
modelo de ameaça. 60
Permissões baseadas em objetos (OBP). O framework de permissões permite ações por subconjunto
arbitrário de objetos usando constraints em JSON (Django query filters), inclusive OR via lista e token
$user . Isso é central para separar “quem pode ver/modificar o quê” em instalações multi-times/multi-
tenancy. 61
Desempenho e escalabilidade
• WSGI workers: 2 * CPUs + 1 ; limitar lifetime e definir timeout (sugestão: 120s); usar Unix
socket quando HTTP frontend e WSGI estão no mesmo host. 64
• Limites e paginação: ajustar MAX_PAGE_SIZE ; usar brief e fields ; empregar paginação
corretamente (default PAGINATE_COUNT 50; máximo limitado por MAX_PAGE_SIZE ). 30
• GraphQL: pedir apenas campos necessários, evitar queries complexas e usar filtros/paginação.
65
• Workers assíncronos: separar filas e dedicar worker para fila high quando necessário;
QUEUE_MAPPINGS permite mapear tipos de tarefa (webhook/report/script) para filas
específicas. 30
Mudanças em versões recentes. Em v4.5, release notes indicam que webhooks não incluem mais a
chave model no payload (usar object_type ), e que /api/extras/object-types/ foi removido
em favor de /api/core/object-types/ . Isso é relevante para integrações que faziam parsing do
payload/metadata. 68
11
Custom scripts (Jobs) como motor de automação interna
Scripts são Python “fora do core” executáveis via UI, capazes de manipular dados, validar integridade e
até importar de fontes externas. Há aviso explícito: scripts têm acesso irrestrito ao banco e só devem
ser instalados/rodados de fontes confiáveis, com permissões bem controladas. 69
Alguns recursos (configuration templates, config context data, export templates) suportam
sincronização automática de dados a partir de fontes remotas (ex.: repositório git, bucket S3, diretório
local), materializando arquivos como “data files” no banco e impedindo modificação local (apenas
delete). Há permissão específica ( core.sync_datasource ) e campo sync_interval para
sincronização periódica (agendada via RQ worker). 71
A documentação do “NetBox Ansible Collection – Quick Start” descreve duas abordagens típicas:
• Definição do estado pretendido (“intended state”) em NetBox usando módulos que criam/
atualizam/removem objetos (ex.: criar aggregate prefix). 73
A doc explicita requisitos: rodar uma das duas versões mais recentes do NetBox, usar token write-
enabled para módulos (ou read-only para plugins de lookup/inventory), e dependências (Python/Ansible
+ pynetbox). 74
O guia do pyNetBox mostra como criar conexão, espelha a estrutura de apps/endpoints e exemplifica
.all() , .filter() , .get() e .create() . Também destaca que .all() / .filter()
retornam geradores (iteráveis consumíveis uma vez) e que objetos possuem atributos acessíveis e
serialização. 75
• Threading para buscar múltiplas páginas em paralelo (útil em grandes datasets), com
recomendação de não zerar MAX_PAGE_SIZE . 76
• Strict filters para validar filtros contra OpenAPI e evitar retornos inesperados (tabelas inteiras).
77
12
Plugins: instalação, ciclo de vida e limites
Instalação (Community). O processo padrão: instalar pacote Python dentro do venv do NetBox,
habilitar em PLUGINS , configurar em PLUGINS_CONFIG , rodar migrate , executar
collectstatic e reiniciar WSGI + RQ workers. 78
Não conecta no HTTP/HTTPS / erro 502 (bad gateway). O guia do servidor HTTP recomenda verificar:
nginx/Apache em execução e porta correta; firewall; e, para 502, conferir se gunicorn está ativo
( systemctl status netbox ), se reverse proxy aponta para a porta do gunicorn (default 8001) e se
SELinux não bloqueia a conexão (ex.: setsebool -P httpd_can_network_connect 1 ). 81
API responde 403 “Authentication credentials were not provided.” A doc explica que token pode ser
exigido exceto em views isentas por EXEMPT_VIEW_PERMISSIONS ; também descreve formato correto
do header para tokens v1/v2 e sugere uso de endpoint de autenticação-check (v4.5) para testar
credenciais. 83
Filtros errados retornam “tudo” e travam cliente. A doc do pyNetBox alerta que NetBox não valida
filtros e pode retornar tabela inteira silenciosamente; para mitigar, usar validação via OpenAPI
( strict_filters ) e práticas de performance ( brief , fields , paginação). 84
Logs e observabilidade
Logging (console/arquivo). Por padrão, mensagens INFO+ vão ao console; com DEBUG=False e e-
mail configurado, ERROR/CRITICAL podem ser enviados aos administradores ( ADMINS ). A
13
documentação mostra como configurar LOGGING para arquivo (ex.: /var/log/[Link] ) e lista
namespaces de loggers (ex.: [Link].* , netbox.event_rules , [Link].* ,
[Link].* ). 86
Error reporting (Sentry). Existe integração nativa com Sentry habilitável via SENTRY_ENABLED e
SENTRY_DSN . Em instalação do NetBox, o uso do sentry-sdk é descrito como opcional (mudança
em relação a versões anteriores). 87
Abaixo um checklist orientado a sinais (saúde, fila, auditoria, capacidade), alinhado aos pontos cobertos
explicitamente na documentação.
Revisar tuning:
Performance handbook orienta parâmetros e
Mensal MAX_PAGE_SIZE , workers,
separação de workers/filas. 30
timeouts, fila high
A cada Revisar release notes + Upgrade guide exige leitura de release notes e
release caminho de upgrade ressalta restrições em major versions. 92
psql -V
sudo -u postgres psql
# dentro do psql:
# CREATE DATABASE netbox;
14
# CREATE USER netbox WITH PASSWORD '<SENHA_FORTE>';
# ALTER DATABASE netbox OWNER TO netbox;
93
Backup/restore do banco:
94
redis-cli ping
# esperado: PONG
95
Upgrade (Community):
sudo ./[Link]
sudo systemctl restart netbox netbox-rq
96
64
97
15
Limitações conhecidas e versões
A própria documentação explicita limites de escopo (não faz monitoramento, DNS, RADIUS, config
management, facilities management), reforçando o papel do NetBox como fonte de verdade e
plataforma de integração. 1
A API GraphQL é explicitamente read-only (complementar à REST) e pode ser desabilitada via
GRAPHQL_ENABLED . 98
O guia de plugins alerta que o “plugins API” é limitado ao que está documentado; uso de componentes
internos fora da documentação pode quebrar em releases futuras sem aviso. 28
• v4.5 introduz tokens v2 e reforça migração, com depreciação futura de v1; adiciona endpoint /
api/authentication-check/ . 99
A página de release notes define categorias (major/minor/patch) e informa cadência: minors em abril,
agosto e dezembro; patches “as needed”, tipicamente a cada 1–2 semanas. Isso funciona como
“roadmap temporal” oficial de distribuição. 101
Quanto a roadmap de features específico (lista futura priorizada), não há no domínio [Link]
uma página única de roadmap detalhado para NetBox Community; o que há são releases notes e
posts de anúncios/betas (ex.: beta 4.5) que indicam direção e destaques, mas sem garantir backlog
completo. Nesse sentido, “roadmap” formal e granular fica não especificado sob a restrição de
domínio, e deve ser inferido apenas via release notes/anúncios. 102
16
Milestone de fundamentos e modelagem
• VRFs, Prefixes, VLANs e IP ranges (incluindo decisões sobre mark_populated quando fizer
sentido). 106
• Pipeline de alocação “next available” via API para IPs (e, quando aplicável, prefixes/ASNs), com
evidência de uso em automação. 107
17
• Biblioteca de custom scripts (jobs) com logging, modo commit controlado, agendamento e
versionamento operacional. 115
• Synchronized data (DataSource/DataFile) para templates/contextos/export templates e
sincronização periódica ( sync_interval ). 116
• Integração com Ansible: inventário dinâmico e playbooks que escrevem estado pretendido em
NetBox. 73
Tempo total estimado para “nível especialista operacional + automação”: 8–12 semanas (com
prática real, integração com ferramentas internas e disciplina de governança). A documentação enfatiza
que o valor do NetBox emerge quando ele é o núcleo da automação e da integridade do estado
pretendido; portanto, o “capstone” recomendado é implementar 1–2 fluxos completos (ex.: evento →
webhook → automação externa → retorno de inventário/estado → auditoria via change log), com
observabilidade e controles de acesso. 121
4 61 91 113 [Link]
[Link]
5 35 75 [Link]
[Link]
7 26 62 66 67 82 97 114 [Link]
[Link]
18
9 119 120 [Link]
[Link]
10 [Link]
[Link]
13 45 46 47 48 49 50 [Link]
[Link]
15 [Link]
[Link]
16 [Link]
[Link]
18 106 [Link]
[Link]
19 107 [Link]
[Link]
20 [Link]
[Link]
28 79 [Link]
[Link]
30 55 64 65 [Link]
[Link]
34 [Link]
[Link]
37 38 [Link]
[Link]
40 69 70 115 [Link]
[Link]
19
44 76 77 84 [Link]
[Link]
52 103 [Link]
[Link]
53 93 [Link]
[Link]
54 95 [Link]
[Link]
57 59 92 96 [Link]
[Link]
58 85 [Link]
[Link]
60 117 [Link]
[Link]
63 [Link]
[Link]
68 99 NetBox v4.5
[Link]
71 116 [Link]
[Link]
72 73 74 [Link]
[Link]
78 [Link]
[Link]
81 89 [Link]
[Link]
86 [Link]
[Link]
98 [Link]
[Link]
20