Estoy tratando de crear máquinas virtuales que puedan verse y hospedarse. Están alojados con qemu / kvm y se administran a través de libvirt. El adaptador de red de VM se crea con macvtap (modo VEPA) para el rendimiento.
Después de habilitar hairpin
el cambio, la transmisión de unidifusión está bien, sin importar entre las máquinas virtuales o entre la máquina virtual y el host.
Sin embargo, cuando se trata de multidifusión, me enfrento con un problema. Encuentro que el host no puede hacer ping6 en cada VM. Con tcpdump, observo que ff02::1:ff00:212
mi VM no recibe el paquete de solicitud de vecino a la dirección de multidifusión del host, cuya dirección ipv6 es 2001:da8:a0:600::212/64
. Obviamente, este paquete de multidifusión debería haber sido pasado a VM por macvtap.
Como resultado del problema de la multidifusión, todo el paquete ipv6 se pierde porque Neighbor Discovery no puede funcionar correctamente.
Estoy seguro de que no hay nada con el conmutador, porque cuando ejecuto tcpdump sobre el adaptador de red físico, puedo ver la Solicitud de vecinos dos veces por segundo, una fuera, una adentro.
Después de configurar la interfaz macvtap sobre el host en modo promiscuo, la VM obtiene el paquete de Solicitud de vecinos, junto con algún otro paquete de multidifusión que debería ser filtrado por macvtap, pero no un paquete de unidifusión a otra VM, incluso cuando hago ping a otras 6 VM en anfitrión al mismo tiempo.
Entonces, creo que habilitar el modo promiscuo en toda la interfaz macvtap es una solución aceptable pero no elegante.
Todo mi host y VM es CentOS 7.0. Intenté instalar kernel-ml (linux 4.1.3) desde elrepo en mi host, pero no hay diferencia.
Entonces:
- ¿Cómo puedo configurar toda la interfaz macvtap en modo promiscuo cada vez que se inicia libvirt?
- No estoy familiarizado con el controlador de red. Pero de acuerdo con http://www.makelinux.net/ldd3/chp-17-sect-14 , sospecho que hay algunos errores en el controlador de macvlan para que el núcleo no pueda establecer la lista de multidifusión de la interfaz correctamente . Sin embargo, no hay set_multicast_list en linux / driver / net / {macvlan.c, macvtap.c}. ¿Dónde está el lugar correcto para buscar ayuda?
Ver también: https://bugzilla.redhat.com/show_bug.cgi?id=1035253