Router/Gateway: Roteamento, NAT e Acesso à Internet
1. Preparar a imagem
Nesse passo precisamos de configurações persistentes mesmo após os desligamento completo da maquina virtual, irei criar um overlay do QCOW2, o objetivo é ter uma segunda imagem derivada da imagem base sem que haja qualquer alteração na original.
qemu-img create -f qcow2 \
-F qcow2 \
-b ~/infra/imagens/base_alpine.qcow2 \
~/infra/VMs/VM-01/VM-01.qcow2Alterei o script para iniciar pela imagem overlay sem o parametro --snapshot para que as alterações sejam persistentes
#!/bin/bash
qemu-system-x86_64 \
-enable-kvm \
-m 256 \
-smp 1 \
-drive file=~/infra/VMs/VM-01/VM-01.qcow2,format=qcow2 \
-virtfs local,path=.,mount_tag=scripts_config,security_model=none \
-nic user,id=rt0,model=virtio,mac=BA:AA:AA:00:00:01 \
-netdev socket,id=rt1,listen=:10001 -device virtio-net-pci,netdev=rt1,mac=BA:AA:AA:00:00:02Atualizei e instalei o nftables e voltei a inserir o parametro --snapshot tornando a imagem imutavel
apk update
apk upgrade
apk add nftables
2. Configuraçoes IP
As configurações do NAT do host para a VM precisam ter esses parametros abaixo, eles são o padrão do QEMU para a opção -nic user, esse será o unico ponto de conexão do LAB com alguma outra rede externa, e apenas será usado para acesso a internet.
VM-01 - eth0:
#!/bin/bash
# ip e mascara
ip addr add 10.0.2.10/24 dev eth0
# ativa a NIC
ip link set eth0 up
# gateway
ip route add default via 10.0.2.2
# DNS
echo "nameserver 10.0.2.3" > /etc/resolv.confA interface eth1 ira forcecer acesso a internet a VM que será o switch central da rede com a seguinte configuração
VM-01 - eth1:
#!/bin/bash
# ip e mascara
ip addr add 10.0.0.1/30 dev eth1
# ativa a NIC
ip link set eth1 upAgora a configuração da VM que será o switch centra da rede
VM-02 - eth0
#!/bin/sh
# ip e mascara
ip addr add 10.0.0.2/30 dev eth0
# ativa a NIC
ip link set eth0 up
ip route add default via 10.0.0.1
echo "nameserver 8.8.8.8" > /etc/resolv.confAgora temos essa configuração nas VMs:

3. Configuração de encaminhamento de pacotes
Utilizando o comando abaixo configurei no kernel o encaminhamento de pacotes:
sysctl -w net.ipv4.ip_forward=1
Agora com essas regras no nftables habilitei o encaminhamento e pacotes entre as interfaces eth0 e eth1:
nft add table inet firewall
nft add chain inet firewall forward '{ type filter hook forward priority 0; policy drop; }'
nft add rule inet firewall forward iifname "eth0" oifname "eth1" accept
nft add rule inet firewall forward iifname "eth1" oifname "eth0" accept4. NAT
Com essas configurações acima temos acesso da VM-02 switch da rede as duas interfaces da VM-01 router de borda, mas ainda precisamos do NAT para fazer a tradução dos endereços. Sem o NAT a VM-02 não terá acesso a internet.
nft add table ip nat
nft add chain ip nat postrouting \
'{ type nat hook postrouting priority 100; policy accept; }'
nft add rule ip nat postrouting \
oifname "eth0" ip saddr 10.0.0.0/30 masquerade5. Segue abaixo um video detalhando tudo de forma mais dinamica.
6. Proximo passo
Agora que temos A VM-02 com acesso a internet iremos configurar as VLANs e as estaçoes.