
Acabei de mudar do VirtualBox para o Virt Manager com KVM e estou muito feliz com a mudança (minha motivação inicial para isso foi usar a mesma virtualização para VMs de desktop e VMs de servidor, abandonando o Virtualbox e o vanilla Proxmox em favor do libvirt). Dito isto, não sei realmente o que estou fazendo, então preciso de ajuda.
Eu executo VMs Debian em um host Debian. Defini uma ponte simples no host (em/etc/network/interfaces) e coloquei todas as minhas VMs nela. O host executa a configuração padrão do UFW. Tudo está feliz e bem até que eu tente usar nwfilters.
Eu defini um filtro (virsh nwfilter-define) e adicionei-o a uma VM 'my-vm1' (também conhecido como reffilter filter='my-vm1-filter' no dispositivo de rede de my-vm1).O tráfego de 'my-vm1' é filtrado conforme esperado, MAS outras VMs perdem a conectividade de maneira irritante:
- reiniciar essas outras VMs não ajuda: parece que elas não conseguem fazer DHCP
- parar my-vm1 não ajuda
- reiniciar o host e não iniciar my-vm1 é necessário para restaurar a rede em outras VMs
- Tentei entender a mudança no iptables -L depois de iniciar my-vm1 e é confuso. Mas eu não sei nada sobre iptables em primeiro lugar.
Primeira pergunta: existe um problema, etapa ou limitação bem conhecido para o uso de nwfilters que eu perdi miseravelmente?
E se não, sugestões sobre o que tentar a seguir? Fico feliz em aprender algo novo relevante para o meu problema.
Responder1
Caso alguém chegue aqui, aqui estão alguns progressos:
- Percebi que o nft me daria uma imagem melhor do que o iptables, referenciado em postagens antigas. Pelo que entendi, a libvirt usa nftables hoje em dia
- Acontece que o ufw não funciona bem com o libvirt: se eu desativá-lo, meu problema desaparecerá e outras VMs sem nenhum nwfilter funcionarão bem.
- Leia em algum lugar que o firewalld pode funcionar melhor com o libvirt, mas ainda não tentei
EDIT: Para novatos como eu, o firewalld está realmente funcionando muito melhor para o meu caso de uso simples, pelo menos:
- coloque a ponte host na zona 'libvirt'
- serviços, portas, etc. dessa zona aplicam-se apenas ao tráfego de entrada do host (não às VMs que podem então contar com seu próprio nwfilter)
- o alvo da zona libvirt deve permanecer 'aceitar' (não descartar nem rejeitar): de forma um tanto contra-intuitiva, os pacotes não cobertos pelos serviços/portas não são aceitos pelo host, mas 'aceitar' é necessário para o tráfego da VM.