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.

Exemplo dos parâmetros utilizados para definir memória, processador, disco e interfaces de uma máquina virtual.

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.

Organização dos discos virtuais e exemplo dos estados preservados durante o desenvolvimento do LAB.

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.

Trecho de um script Bash mostrando a definição dos recursos e a inicialização da máquina pelo QEMU.

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.

Representação da conexão entre duas interfaces VirtIO por meio de um socket QEMU, identificando as extremidades listen e connect.

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.

Visão dos diretórios utilizados para organizar imagens QCOW2, scripts e arquivos de execução.

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.

CampoIdentificação
BA:AAPrefixo adotado no LAB.
TTTipo de dispositivo: 01 roteador, 02 switch, 03 servidor e 04 PC, incluindo ADM01.
VVCódigo da VLAN associada, ou 00 quando não existe uma VLAN exclusiva codificada.
NNNúmero do equipamento dentro de sua categoria ou contexto.
IINú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.

Exemplo do enlace entre PC-A01 e SW01, relacionando os identificadores das interfaces, seus endereços MAC e o socket QEMU utilizado na conexão.

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.

Interface do controlador apresentando as máquinas virtuais e os recursos disponíveis para sua operação.

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.

Exemplo da comunicação com o socket Unix de uma máquina virtual e da resposta retornada pelo QEMU.

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.