02. Fundação e Virtualização
A virtualização constitui a base de execução do LAB. Por meio do QEMU/KVM, diferentes dispositivos são representados por máquinas virtuais independentes, cada uma com recursos de hardware, sistema operacional e interfaces de rede definidos de acordo com sua função.
Essa abordagem permite construir uma infraestrutura composta por estações de trabalho, roteador, switch, estação administrativa e servidor, sem depender de equipamentos físicos individuais. Além da execução das máquinas, o LAB utiliza scripts para definir seus recursos, estabelecer conexões e controlar seu funcionamento.
Esta seção apresenta como essa estrutura foi desenvolvida, desde a preparação das imagens até os mecanismos utilizados para organizar e operar o conjunto de máquinas virtuais.
2.1. Ambiente de Virtualização
O QEMU é responsável pela emulação e virtualização dos dispositivos, enquanto o KVM utiliza os recursos de virtualização do processador para acelerar a execução dos sistemas convidados.
No LAB, cada máquina virtual é definida diretamente por parâmetros do QEMU. Isso permite especificar a quantidade de memória, os processadores virtuais, as imagens de disco, as interfaces de rede e os canais de controle sem depender de uma interface gráfica de gerenciamento.
As estações e os dispositivos de rede utilizam majoritariamente Alpine Linux, escolhido pelo baixo consumo de recursos. Essa característica é importante porque o host dispõe de 16 GB de memória RAM e precisa comportar um número elevado de máquinas.
Nos scripts , as estações, o roteador e o switch foram configurados com 256 MB de memória e um processador virtual. Já a estação administrativa e o servidor Proxmox possuem configurações distintas, adequadas às suas funções.
A configuração explícita desses recursos permite compreender o que cada máquina utiliza e modificar sua estrutura conforme as necessidades do LAB.

2.2. Imagens QCOW2
As máquinas virtuais do LAB utilizam imagens QCOW2 individuais, responsáveis por armazenar o sistema operacional e as configurações de cada dispositivo. Essa organização permite que roteador, switch, estações e demais máquinas mantenham seus próprios ambientes, enquanto os scripts QEMU executados no host definem os recursos de hardware e as conexões virtuais.
Inicialmente, o LAB utilizava uma imagem base Alpine e mecanismos de configuração externa. Com a evolução da infraestrutura, as configurações passaram a ser mantidas dentro das próprias imagens QCOW2, tornando cada máquina responsável pela persistência de seu sistema e serviços.
2.2.1. Snapshots e preservação das imagens
Os snapshots foram utilizados para preservar estados importantes durante a configuração dos sistemas, permitindo recuperar condições anteriores quando necessário.
O LAB também utiliza o parâmetro `--snapshot` em scripts de execução QEMU. Esse modo permite iniciar uma máquina sem gravar permanentemente no disco base as alterações realizadas durante aquela execução.
É importante distinguir os dois mecanismos: um snapshot interno do QCOW2 registra um estado recuperável da imagem, enquanto `--snapshot` determina como as alterações da execução são tratadas.
Essa combinação oferece flexibilidade para realizar testes, modificar configurações e preservar estados conhecidos durante a evolução do ambiente.

2.3. Scripts de Execução
Cada máquina virtual do LAB possui um script de execução responsável por informar ao QEMU os recursos e dispositivos necessários para sua inicialização.
Os scripts são escritos em Bash e permitem manter as configurações das máquinas de forma explícita. Em vez de configurar os recursos manualmente a cada execução, o script reúne os parâmetros necessários para iniciar o dispositivo.
Durante a evolução do LAB, esses arquivos foram reorganizados para utilizar arrays Bash. Essa estrutura facilitou a leitura dos argumentos, a inclusão de comentários e a manutenção das configurações.
Entre os parâmetros definidos pelos scripts estão:
- Aceleração por KVM e recursos de processamento.
- Imagem QCOW2 utilizada pela máquina.
- Interfaces de rede e dispositivos VirtIO.
- Endereços MAC e conexões por sockets.
- Modo de execução e canal QMP de controle.
Essa organização permite tratar cada dispositivo como uma unidade independente, mantendo suas características identificáveis e reproduzíveis.

2.4. Conectividade entre as Máquinas Virtuais
Além de executar os sistemas operacionais, o QEMU fornece os dispositivos virtuais necessários para estabelecer a comunicação entre as máquinas.
No LAB, as conexões de rede são construídas principalmente com interfaces virtuais associadas a sockets QEMU. Cada extremidade do enlace é configurada no script da máquina correspondente.
Uma das máquinas disponibiliza uma conexão em determinada porta, utilizando listen, enquanto a outra estabelece a conexão por meio de connect. O QEMU utiliza essa associação para transportar quadros Ethernet entre as interfaces virtuais.
Dessa forma, é possível representar enlaces individuais entre dispositivos, aproximando a organização da topologia da ligação entre interfaces de equipamentos físicos.
Os dispositivos de rede virtuais utilizam VirtIO, enquanto o mecanismo de socket estabelece o transporte entre as instâncias QEMU.

2.4.1. Expansão das interfaces virtuais
O SW01 foi desenvolvido para conectar um número elevado de dispositivos. Durante sua configuração, a quantidade de interfaces necessárias exigiu uma adaptação do hardware virtual.
Para acomodar essas interfaces, foi utilizado um dispositivo adicional pci-bridge na configuração QEMU do switch.
Essa solução permitiu ampliar a quantidade de dispositivos de rede associados à máquina virtual, mantendo a topologia construída com interfaces e conexões individuais.
A configuração da comutação e das VLANs sobre essas interfaces será apresentada na seção de infraestrutura de rede.
2.5. Padronização e Organização do LAB
Com o aumento da quantidade de máquinas, tornou-se necessário estabelecer convenções para identificar dispositivos, arquivos e conexões.
A organização do LAB passou a utilizar nomes associados à função de cada máquina, como RTR01, SW01, ADM01, SRV01 e os grupos de estações PC-A, PC-B, PC-C e PC-D.
Os arquivos também foram reorganizados sob o diretório /LAB, separando imagens de disco, scripts de execução e recursos utilizados durante o uncionamento das máquinas.

2.5.1. Identificação das Interfaces e Endereços MAC
Foi desenvolvido um padrão de endereços MAC para facilitar a identificação dos dispositivos e de suas interfaces virtuais.
A convenção atual utiliza a estrutura BA:AA:TT:VV:NN:II, na qual os campos representam o tipo de dispositivo, a VLAN associada, o número do equipamento e o número de sua interface de rede.
| Campo | Identificação |
|---|---|
| BA:AA | Prefixo adotado no LAB. |
| TT | Tipo de dispositivo: 01 roteador, 02 switch, 03 servidor e 04 PC, incluindo ADM01. |
| VV | Código da VLAN associada, ou 00 quando não existe uma VLAN exclusiva codificada. |
| NN | Número do equipamento dentro de sua categoria ou contexto. |
| II | Número da interface de rede do próprio equipamento, iniciado em 00. |
Por exemplo, o endereço BA:AA:04:10:01:00 identifica a primeira interface da PC-A01, associada à VLAN 10. Já BA:AA:02:10:01:01 identifica a interface nic01 do SW01, também associada à VLAN 10.
Os identificadores internos do QEMU seguem a convenção DISPOSITIVO-nicNN, como PC-A01-nic00 e SW01-nic01, mantendo correspondência entre a identificação da interface no script e o último campo do endereço MAC.
Dessa forma, cada MAC identifica a interface do próprio dispositivo, e não o equipamento conectado à outra extremidade. Essa padronização facilita a leitura dos scripts, a identificação das interfaces e o diagnóstico da infraestrutura.
2.5.2. Identificação dos Sockets
As conexões por sockets também seguem uma convenção de numeração.
Diferentemente dos endereços MAC, que identificam interfaces, a numeração dos sockets representa os enlaces estabelecidos entre os dispositivos virtuais.
Nos registros do LAB, o socket 1211 corresponde à conexão entre RTR01-nic01 e SW01-nic00, enquanto 24101 identifica o enlace entre SW01-nic01 e PC-A01-nic00.
Essa organização permite identificar o propósito de uma conexão sem depender exclusivamente da leitura completa dos scripts de cada máquina. A padronização dos MACs e dos IDs QEMU complementa esse mecanismo, mantendo separadas a identificação das interfaces e a identificação dos enlaces.

2.6. Sistema de Controle do LAB
A utilização de scripts individuais resolveu a definição e a inicialização das máquinas, mas a expansão do ambiente trouxe outra necessidade: administrar diversas instâncias QEMU de maneira centralizada.
Para isso, foi desenvolvido o LAB_ctl.sh, um sistema de controle em Bash que reúne operações de gerenciamento das máquinas virtuais.
O controlador utiliza os scripts individuais para iniciar os dispositivos e mecanismos de consulta para acompanhar seu estado de execução, evitando a necessidade de operar cada máquina manualmente.

2.6.1. Controle por QMP
O QEMU Machine Protocol (QMP) fornece um canal de comunicação destinado ao controle das instâncias QEMU.
No LAB, os scripts de execução configuram sockets Unix para esse canal. O LAB_ctl.sh utiliza o socat para estabelecer a comunicação com o QMP, consultar o estado de uma máquina e solicitar operações como o desligamento.
Essa comunicação ocorre diretamente com o processo QEMU e não depende de uma conexão SSH com o sistema operacional convidado.
Para o desligamento, é utilizada uma solicitação de system_powerdown. O funcionamento completo dessa operação depende de o sistema convidado responder ao evento ACPI, motivo pelo qual esse mecanismo também foi configurado nas máquinas Alpine.

2.6.2. Operação centralizado
A integração entre scripts Bash e QMP transformou o conjunto de máquinas individuais em um ambiente com uma camada própria de controle.
Os scripts continuam responsáveis pela configuração de cada dispositivo, enquanto o LAB_ctl.sh centraliza sua operação.
Durante o desenvolvimento, o controlador também passou por correções relacionadas ao gerenciamento dos processos QEMU, demonstrando a necessidade de separar o encerramento da interface de controle do ciclo de vida das máquinas virtuais.
Com essa estrutura, o LAB dispõe de mecanismos para definir, iniciar, acompanhar e desligar as máquinas de forma organizada, preservando o controle individual sobre cada dispositivo.
2.7. Integração da Camada de Virtualização
A combinação de QEMU/KVM, imagens QCOW2, scripts Bash, interfaces VirtIO, sockets e QMP estabelece a base sobre a qual os demais componentes do LAB são executados.
Essa estrutura permite representar dispositivos com funções distintas, conectar suas interfaces e administrar as instâncias virtuais por mecanismos próprios.
Com a camada de virtualização estabelecida, o próximo passo é compreender como essas máquinas passam a desempenhar funções de rede. A seção seguinte apresenta a infraestrutura formada pelo RTR01, SW01 e estações virtuais, aprofundando o endereçamento, a comutação, as VLANs, o roteamento e o controle de tráfego.