Descoberta Diode Multivendor
Introdução
Este laboratório simula uma rede com 3 roteadores de diferentes fabricantes (Juniper, Cisco e Huawei) configurados com OSPF e SNMP, integrando os componentes do Diode (plugin, server e agent) e o Netbox para importação e gerenciamento automatizado de dispositivos.
1. Descrição
1.1 Objetivo do Lab
O objetivo deste laboratório é demonstrar, de forma prática, o processo de descoberta e importação automatizada de dispositivos de rede multivendor, abrangendo diferentes modelos e fabricantes, e suas respectivas configurações para o Netbox, utilizando o diodo-plugin, o diode-server e o orb-agent.
1.2 Topologia do Lab
Abaixo está a topologia mostrando os três roteadores — Juniper, Cisco e Huawei — além dos servidores envolvidos na arquitetura.
Os roteadores estão configurados com as seguintes tecnologias:
- OSPF (Open Shortest Path First): Utilizado para roteamento dinâmico, permitindo que dispositivos (independentemente do fabricante) troquem informações sobre rotas e topologia.
- SNMP (Simple Network Management Protocol): Usado para coleta de telemetria e descoberta, garantindo compatibilidade com dispositivos Juniper, Cisco e Huawei.
2. Aplicações
Exemplos de Aplicações
Este laboratório demonstra uma arquitetura realista de descoberta automática de dispositivos em ambientes onde coexistem múltiplos fabricantes.
Possíveis Aplicações:
- Automação da descoberta multivendor: Detecção automática de dispositivos Juniper, Cisco e Huawei e registro de seus inventários no Netbox.
- Padronização de inventário heterogêneo: Criação de uma base unificada de dispositivos independentemente do fornecedor.
- Criação de repositório centralizado de dispositivos: Construção de uma base confiável de dados da rede em tempo real.
- Estudo prático de SNMP em ambientes híbridos: Comparação na prática entre diferentes MIBs e padrões dos fabricantes.
- Integração Diode + Netbox em cenários reais: Prática de coleta e integração de dados de rede.
3. Requisitos
3.1 Pré requisitos
Para iniciar o laboratório, é necessário a instalação e configuração dos seguintes componentes:
- Netbox
- Diode Plugin
- Diode Server
- Orb Agent
- Containerlab
- Docker
Caso o seu ambiente não esteja configurado, siga os passos Guia de Configuração
3.2 Tabela de Requisitos Computacionais
| Requisito | Detalhes |
|---|---|
| CPUs | 4 vCPUs (mínimo recomendado) |
| Memória RAM | 12 GB |
| Espaço em Disco | 10 GB |
| Containerlab | 0.64.0 |
| Rede Criada | br-lab |
Dica
Verifique se a versão do Docker e do Containerlab são compatíveis para evitar erros durante a implantação.
Atenção
Verifique se o seu processador possui suporte à virtualização por hardware e se essa funcionalidade está ativada na BIOS/UEFI.
- Em processadores Intel, essa tecnologia é chamada de VT-x (Intel Virtualization Technology).
- Em processadores AMD, é conhecida como AMD-V (AMD Virtualization).
Sem essa funcionalidade ativada, as imagens como o vJunos-router não funcionarão corretamente.
4. Instalação
4.1 Configurando a Rede Docker
Antes de iniciar os containers, crie a rede bridge que interligará os dispositivos:
docker network create \
--driver=bridge \
--opt com.docker.network.bridge.name=br-lab \
--subnet=172.10.10.0/24 \
br-lab
4.2 Clonando o Repositório do Lab
Execute o script abaixo para baixar e configurar o laboratório automaticamente:
curl -L -o get.sh "https://git.rnp.br/redes-abertas/labs/-/raw/main/discovery-lab-diode-multivendor/get.sh?ref_type=heads&inline=false" && sh get.sh && cd discovery-lab
curl -L -o get.bat "https://git.rnp.br/redes-abertas/labs/-/raw/main/discovery-lab-diode-multivendor/get.bat?ref_type=heads&inline=false" && call get.bat && cd discovery-lab
Dica
No Linux/Mac, use chmod +x get.sh antes de executar o script, caso ele não esteja com permissão de execução.
5. Implantação do Ambiente
5.1 Subindo os Roteadores com Containerlab
Aqui, os três dispositivos Juniper/Cisco/Huawei serão inicializados. O tempo de boot pode variar conforme o fabricante.
sudo clab deploy -t clab/discovery-lab.clab.yaml
Debug
Os dispositivos podem levar cerca de 10 minutos para estarem totalmente operacionais.
Caso ocorra algum erro, verifique a saída do comando para possíveis mensagens de erro. Use docker logs <container_name> para depurar.
5.2 Levantando o Diode Server
Dica
Caso você já possua o servidor do Diode configurado, basta pular esse passo.
-
Vamos criar uma nova pasta para armazenar os arquivos do diode-server:
mkdir diode-server cd diode-server -
Agora, vamos realizar o download do script de início rápido:
curl -sSfLo quickstart.sh https://raw.githubusercontent.com/netboxlabs/diode/release/diode-server/docker/scripts/quickstart.sh chmod +x quickstart.sh -
Então, basta executar o script passando a url do seu netbox:
./quickstart.sh https://<netbox-server> -
Por fim, basta iniciar os containers:
docker compose up -d -
Para extrair as credenciais necessárias na instalação do plugin, execute o comando abaixo:
echo $(jq -r '.[] | select(.client_id == "netbox-to-diode") | .client_secret' ./oauth2/client/client-credentials.json)
Dica
Armazene o token, você vai precisar adicioná-lo na configuração a seguir.
5.3 Instalando o Plugin no Netbox
Neste passo, vamos instalar o plugin do diode, responsável por estabelecer a conexão entre o diode-server e o Netbox.
5.3.1 Configurando a versão do Netbox:
- Primeiro, vamos clonar o repositório do Netbox Docker:
git clone -b release https://github.com/netbox-community/netbox-docker.git - Agora, vamos para a Release 3.2.1:
cd netbox-docker/ git checkout 3.2.1
Informação
Alteramos a branch do repositório para termos acesso à versão 4.2.4 do Netbox.
Dica
Todos os comandos abaixos serão executados dentro diretório raiz do netbox netbox-docker/.
5.3.2 plugin_requirements.txt
Este arquivo contém ama lista dos plugins do Netbox (como pacotes Python do PyPO) que devem ser instalados durante a construção da imagem Docker.
Execute o seguinte comando para escrever o pacote dentro do arquivo plugin_requirements.txt.
echo "netboxlabs-diode-netbox-plugin" >> plugin_requirements.txt
5.3.3 DockerFile-Plugins
Esse é o DockerFile usado para construir a imagem docker customizada.
-
Crie o arquivo e acesse com um editor:
nano DockerFile-Plugins -
Copie o conteúdo abaixo e cole no arquivo:
FROM netboxcommunity/netbox:v4.2.4 COPY ./plugin_requirements.txt /opt/netbox/ RUN /usr/local/bin/uv pip install -r /opt/netbox/plugin_requirements.txt
5.3.4. docker-compose.override.yml
Como o nome implica, esse arquivo contaim as configurações que vão sobrescrever o docker-compose.yml.
Caso você ainda não tenha configurado a rede br-lab. Acesse: Configurando a Rede Docker
-
Crie o arquivo e acesse com um editor:
nano docker-compose.override.yml -
Copie o conteúdo abaixo e cole no arquivo:
services: netbox: image: netbox:latest-plugins pull_policy: never ports: - 8000:8080 build: context: . dockerfile: Dockerfile-Plugins networks: - br-lab netbox-worker: image: netbox:latest-plugins pull_policy: never networks: - br-lab netbox-housekeeping: image: netbox:latest-plugins pull_policy: never networks: - br-lab postgres: networks: - br-lab redis: networks: - br-lab redis-cache: networks: - br-lab networks: br-lab: external: true
As alterações feitas foram:
- adicionar o Netbox na rede
br-lab. - alteração do dockerfile para o
Dockerfile-Plugins, criado anteriormente. - Também alterado a imagem dos serviços para:
netbox:latest-plugins.
5.3.5. plugins.py
Este arquivo é responsável por setar as configurações específicas de cada plugin.
-
Acesse o arquivo com o editor:
nano configuration/plugins.py -
Copie e cole o conteúdo no arquivo:
PLUGINS = [ "netbox_diode_plugin", ] PLUGINS_CONFIG = { "netbox_diode_plugin": { # Diode gRPC target for communication with Diode server "diode_target_override": "grpc://localhost:8080/diode", # Username associated with changes applied via plugin "diode_username": "diode", # netbox-to-diode client_secret created during diode bootstrap. "netbox_to_diode_client_secret": "..." }, }
Dica
O token armazenado na instalação do diode-server deve ser passado na opção: netbox_to_diode_client_secret.
5.3.6 Build e Deploy!
Agora seu Netbox está configurado e pronto para o deploy, siga os comandos abaixo e construa a nova instancia do Netbox!
-
Construa a imagem:
docker compose build --no-cache -
Suba os containeres:
docker compose up -d -
Crie as migrações necessárias com o comando abaixo:
docker compose exec -it netbox ./manage.py migrate netbox_diode_plugin
5.3.7. Gerando as credenciais para o agente
Precisamos criar as credenciais para que o agente do diode se comunique e repasse os dados coletados dos dispositivos para o diode-server
- Acesse seu Netbox e vá no menu lateral.
- Vá em
Diode>Client Credentials. - Clique no botão superior
Adicionar Credencial. - Digite um nome para sua credencial.
- Armazene o
Client Ide oClient Secret.
6. Orb-Agent
O orb-agent é um component do diode responsável por realizar a coleta dos dados nos dispositivos.
6.1 Configurando o agente
-
Acesse a pasta do
orb-agent:cd ./orb-agent -
No arquivo
.env, configure as variáveis de acordo com o seu ambiente.DOCKER_NETWORK=br-lab # Container Network DOCKER_SUBNET=172.10.10.0/24 # Devices Network DIODE_CLIENT_ID= # Diode Client Id DIODE_CLIENT_SECRET= # Diode Client Secret DIODE_HOST=<your-ip>:8080 # Diode Server Url AGENT_NAME=agent1 # Agent Name SITE_NAME=RNP # Netbox Site Name MULTIDEVICE_COMMUNITY="public" # Device Community
Aqui fica o Client Id e o Client Secret gerados no plugin do diode no Netbox.
- Agora, vamos aplicar as variáveis no template de importação do juniper com o comando:
set -o allexport && source .env && envsubst < agent.snmp.template.yaml > agent.yaml
6.2 Iniciando a coleta dos dados
Por fim, basta subir o container para iniciar a importação dos dispositivos para o Netbox!
docker compose up
✅ Acompanhe em tempo real no Netbox os dispositivos sendo coletados pelo agente.
⏱️ Além disso, você pode configurar um intervalo de coleta para que o agente realize a importação de forma automática e periódica, sem necessidade de intervenção manual.
7. Acesso
Após o laboratório ser iniciado, você poderá acessar os dispositivos e serviços configurados na rede.
7.1 Tabela de IPs e Portas de Serviço
Aqui está a tabela de dispositivos, IPs e portas de serviço disponíveis no laboratório.
| Dispositivo | Fabricante | IP | Porta | Serviço |
|---|---|---|---|---|
| node1 | Juniper | 172.10.10.201 | 22 | SSH |
| node2 | Cisco | 172.10.10.202 | 22 | SSH |
| node3 | Huawei | 172.10.10.203 | 22 | SSH |
| Diode | — | localhost | 8080 | API |
| Netbox | — | localhost | 8000 | Web UI |
| Graphite | — | 172.20.20.1 | 8081 | Web UI |
7.2 Senhas de Acesso
Aqui está a tabela com as senhas de acesso dos serviços configurados no laboratório.
| Serviço | Usuário | Senha |
|---|---|---|
| node1 (SSH) | admin | admin@123 |
| node2 (SSH) | clab | clab@123 |
| node3 (SSH) | admin | admin |
| Netbox (Web) | Admin | Admin |
Atenção
antes de acessar acesse o log de um dispositivo para verificar se ele foi iniciado e configurado corretamente.
8. Próximos Passos
Com o laboratório finalizado, você pode seguir algum passos abaixo como extra.
- Testar diferenças de coleta SNMP entre Juniper, Cisco e Huawei.
- Comparar estrutura de MIBs utilizadas na importação.
- Adicionar novos dispositivos de qualquer fabricante para verificar compatibilidade.
9. Conclusão
✅ Agora você aprendeu como utilizar os componentes do Diode para importar automaticamente uma rede composta por dispositivos Juniper, Cisco e Huawei, construindo um inventário completo no Netbox e possibilitando a criação do seu Digital Twin com o Netreplica.