libvirt nwfilter quebra a rede de outras VMs

libvirt nwfilter quebra a rede de outras VMs

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.

informação relacionada