Atividade 6 : Interfaces virtuais (veth,tap,tun), Bridges e Switchs virtuais
CritĂ©rios para entrega do exercĂcio
- Data de entrega: 18 de Novembro de 2025
- O objetivo Ă© perceber que, em todos os casos, processo local, container ou máquina virtual, os pacotes acabam sendo manipulados pelo kernel, mas o caminho e o nĂvel de isolamento da comunicação mudam conforme o ambiente. O exercĂcio mostra, na prática, como o kernel “costura” o tráfego entre mundos diferentes:
- Lembre-se de justificar e comprovar suas respostas no relatĂłrio.
- Relatório arquivo deverá ser em formato PDF
- Detalhes: Adicione screenshots e todos os comentários necessários sobre seu entendimento.
- Entregáveis: relatório. Regra para atribuição de nota: Relatório 100%
Atividade
Passos:
Vamos utilizar a instância vm-netlabs como "host" para virtualização. Para iniciar o "host" digite em um terminal o seguinte comando: vm-netlabs OBS: Todos os passos a seguir serão executados a partir da vm-netlabs.
-
Preparando o ambiente:
Abra um terminal e digite
sudo -ipara ter privilégios de administrador no ambiente, devemos rodar a maioria dos comandos como root.Instale a solução de virtualização (qemu)
dnf clean all && dnf -y install qemu-kvm straceCrie um diretĂłrio para armazenar as imagens das VM (imagens: disco virtual baseado em "arquivo")
mkdir /vmsFaça o download de uma imagem pre instalada do Fedora 24.
cd /vms ; wget www.ic.unicamp.br/william/vms/fc24.qcow2 -
Iniciando uma VM:
Realize a cĂłpia da imagem do disco virtual, que realizamos o download anteriormente para iniciar uma VM, exemplo:
cp /vms/fc24.qcow2 /vms/novavm.qcow2Inicie uma VM utilizando o sistema de virtualização qemu-system (emulação) passando a imagem copiada como disco virtual.
strace -e trace=sendto,recvfrom qemu-system-x86_64 -m 512 -hda /vms/novavm.qcow2 -device virtio-tabletApĂłs a VM iniciar, na tela de login entre com o username root e tecle [enter].
Quantas interfaces possuĂmos na instância (VM) ?
Quais sĂŁo os endereços IP atribuĂdos em cada interface ?
Execute o comandowget www.ic.unicamp.bre veja a saĂda do strace e utilize o netstat da netlabs e veja as conexões.A VM possui acesso Ă internet ?
OBS: Feche a VM para economizar recursos.
-
Inicie uma VM, utilizando uma interface virtual tap como enlace entre o host (vm-netlabs) e a sua instância.
Crie uma interface tipo TAP com o seguinte comando:
ip tuntap add tap0 mode tap ; ifconfig tap0 upInicie a VM adicionando o seguinte parametro:
qemu-system-x86_64 -m 512 -hda /vms/novavm.qcow2 -netdev type=tap,ifname=tap0,id=net0,script=no -device virtio-net-pci,netdev=net0,mac=00:16:15:14:13:12 -device virtio-tabletVerifique as interfaces no sistema com o comando
ifconfig -aConfigure o endereço IP no host na interface (tap0) e dentro da instância (VM), utilizando o seguinte comando:
ifconfig tap0 10.10.0.1/24 upO host consegue se comunicar com a instância (VM) pela rede ?
-
Inicie outra instância, utilizando uma segunda interface tap (tap1), para realizarmos os seguintes passos.
(OBS: não esqueça de trocar o endereço MAC "mac=..." e de alterar a interface na linha de comando para iniciar a segunda instância).Descreva os passos necessários em seu relatório.
-
Realizando a comunicação entre instâncias.
Para isso será necessario incluir as interfaces no lado do host em uma bridge-linux.Crie uma bridge com o nome br0
brctl addbr br0Adicione as interfaces na bridge com o seguinte comando
brctl addif br0 tap0Verifique a bridge criada e suas interfaces com o comando
brctl showFaça a configuração dos endereço IP nas instância e teste a comunicação entre elas.
Analise a saida do comando
dmesgno host e procure pela as interfaces tap. Baseado na mensagem, o que o kernel fez com a interface ?Digite o seguinte comando
brctl showmacs br0e verifique os endereços MAC de cada porta da bridge. De onde são os endereços MAC que estão passando pela bridge ? -
Responda:
O host possui comunicação com as instâncias ? Se não, que configuração precisamos realizar para que o host se comunique com as instâncias ?
Se as instâncias, necessita-se estar na mesma rede local do host, que configuração o ambiente deveria ter ? Exemplifique. -
Rode um Docker
Inicie o docker engine: systemctl start docker
docker run -it --rm --name teste willreli/centos bash
Veja a interface de rede dentro do container
ip -d link show
Faça esse mesmo comando no host e veja a interface de numero que apresentou dentro do container
eth0@ifXX …
No host pegue o pid do primeiro processo do container
docker inspect --format '{{.State.Pid}}' teste
Dentro do Host ainda crie o diretorio /var/run/netns se nĂŁo existir
mkdir /var/run/netns
ln -sf /proc/<PID-DOCKER>/ns/net /var/run/netns/teste
ip netns
> saida esperada teste (id: 0)
Dentro do container execute:
nc -v 143.106.7.54 80
No host execute:
ip netns exec teste netstat -ntp
Faça no host o mesmo comando netstat -ntp e procure pela conexão do nc. Explore os dentro e fora do container para entender a árvore de processo.
Para abrir um novo terminal no container execute: docker exec -it teste bash
- Explique, com base nos testes realizados, as diferenças no caminho da comunicação de rede entre:
- VM (QEMU/KVM) sem interface TAP
- VM (QEMU/KVM) com interface TAP conectada Ă bridge
- Container Docker (namespace de rede)
Em cada caso, descreva como as aplicações se comunicam com a rede, indicando o caminho que os pacotes percorrem (do processo atĂ© a interface fĂsica).
Complete e explique o fluxo com suas prĂłprias palavras, por exemplo:
- VM sem TAP:
Processo → Kernel da VM → Virtualizador (QEMU/KVM) → Kernel do host → Interface fĂsica - VM com TAP:
Processo → Kernel da VM → Virtualizador → Interface TAP → Bridge Linux → Interface fĂsica - Container:
Processo → Namespace de rede → veth pair → Bridge (docker0) → Interface fĂsica
Explique:
Como muda o nĂvel de isolamento entre as abordagens ?
Onde ocorre o encapsulamento e comutação ?
Qual é o papel do kernel do host em cada cenário ?