libvirt nwfilter interrumpe la conexión en red de otras máquinas virtuales

libvirt nwfilter interrumpe la conexión en red de otras máquinas virtuales

Acabo de cambiar de VirtualBox a Virt Manager con KVM y estoy muy contento con el cambio (mi motivación inicial fue usar la misma virtualización para máquinas virtuales de escritorio y de servidor al deshacerme de Virtualbox y Vanilla Proxmox en favor de libvirt). Dicho esto, realmente no sé lo que estoy haciendo, así que necesito ayuda.

Ejecuto máquinas virtuales Debian en un host Debian. Definí un puente simple en el host (en /etc/network/interfaces) y puse todas mis máquinas virtuales en él. El host ejecuta la configuración predeterminada de UFW. Todo está feliz y bien hasta que intento usar nwfilters.

Definí un filtro (virsh nwfilter-define) y lo agregué a una VM 'my-vm1' (también conocido como reffilter filter='my-vm1-filter' en el dispositivo de red de my-vm1).El tráfico de 'my-vm1' se filtra como se esperaba, PERO otras VM pierden conectividad de manera molesta:

  • reiniciar estas otras máquinas virtuales no ayuda: parece que no pueden ejecutar DHCP
  • detener my-vm1 no ayuda
  • Es necesario reiniciar el host y no iniciar my-vm1 para restaurar la red en otras máquinas virtuales.
  • Intenté darle sentido al cambio en iptables -L después de iniciar my-vm1 y es confuso. Pero, en primer lugar, no sé nada sobre iptables.

Primera pregunta: ¿existe algún problema, paso o limitación bien conocido para el uso de nwfilters que me haya pasado por alto?

Y si no, ¿sugerencias sobre qué probar a continuación? Feliz de aprender algo nuevo relevante para mi problema.

Respuesta1

Por si alguien llega aquí, aquí tenéis algunos avances:

  • Me di cuenta de que nft me daría una mejor imagen que iptables, a la que se hace referencia en publicaciones antiguas. Por lo que tengo entendido, libvirt usa nftables hoy en día.
  • Resulta que ufw no funciona bien con libvirt: si lo desactivo, mi problema desaparece y otras máquinas virtuales sin ningún nwfilter funcionan bien.
  • Leí en alguna parte que firewalld puede funcionar mejor con libvirt pero no lo he probado

EDITAR: Para novatos como yo, firewalld funciona mucho mejor al menos para mi caso de uso simple:

  • coloque el puente del host en la zona 'libvirt'
  • Los servicios, puertos, etc. de esa zona se aplican solo al tráfico entrante del host (no a las máquinas virtuales que luego pueden confiar en su propio nwfilter).
  • El objetivo de la zona libvirt debe seguir siendo "aceptar" (no descartar ni rechazar): de manera algo contraria a la intuición, los paquetes no cubiertos por los servicios/puertos no son aceptados por el host, pero "aceptar" es necesario para el tráfico de VM.

información relacionada