Estoy migrando una máquina virtual kvm de un host antiguo (tanto hardware como sistema operativo) a uno nuevo.
Para las redes, virt-manager me propuso una nueva opción: macvtap . Esto parecía una buena alternativa para establecer un puente en eth0.
Así que ahora el invitado arranca bien, obtiene una IP del servidor DHCP de mi red local, puede llegar a Internet. El invitado también ve otras máquinas en la red local, puedo enviarlas, etc.
El problema es que el anfitrión y el invitado no se ven. No puedo contactar al invitado desde el host usando la IP del invitado, ni puedo contactar al host desde el invitado usando la IP del host. Sin ping, ssh, http, nada.
Aquí está el route -n
comando del host:
$ /sbin/route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0
(mismo resultado del invitado).
Probablemente podría configurar una nueva interfaz tun / tap dedicada a la comunicación entre el host y el invitado, pero parece un poco exagerado. ¿Hay alguna manera de hacer que el anfitrión y el invitado se comuniquen?
fuente
Respuestas:
Hice esta pregunta en IRC y parece que macvtap
La solución es agregar una interfaz de red para que el invitado y el host se comuniquen o permanezcan con la antigua solución puenteada ...
fuente
virt-manager dice explícitamente que macvtap no funciona para las comunicaciones de red de host a invitado cuando lo configura. Simplemente agregué una segunda interfaz basada en nat, la configuré en el invitado y la utilicé para comunicarme con mi host.
fuente
La solución es configurar una interfaz macvlan en el hipervisor, con la misma dirección IP que la interfaz de hardware real (muy importante), y configurar el enrutamiento en el host para usarla. En Qemu / KVM, use una interfaz macvtap en la interfaz de hardware como de costumbre.
Para mi configuración (red 192.168.1.0/24, interfaz de hardware p10p1 y puerta de enlace 192.168.1.1), proporciona (en el hipervisor):
fuente
Como se mencionó en respuestas anteriores, una solución a este problema es agregar un adaptador de red macvlan en el host. Sin embargo, sentí que volver a cablear manualmente las rutas al adaptador macvlan era un poco complicado, especialmente porque quería soporte para IPv6 y establecer rutas manualmente puede convertirse en un problema cuando cambia el prefijo. Así que aquí está mi configuración que deja el kernel en control de la tabla de enrutamiento:
(La configuración particular aquí es específica de Debian y Upstart, pero los pasos básicos deberían funcionar en cualquier GNU / Linux).
Crear el adaptador macvlan en el arranque
Primero, debe seleccionar una dirección MAC para su adaptador. Es posible que pueda usar uno aleatorio, pero le sugiero que cree manualmente un adaptador macvlan y use su MAC. De esta manera, el MAC obliga a las convenciones que puedan existir.
Es aconsejable configurar un MAC fijo, ya que de lo contrario no hay forma de, por ejemplo, que un servidor DHCP reconozca su máquina después de un reinicio y le asigne la misma dirección IP que antes.
Así que cree un adaptador y busque el MAC:
El número hexadecimal resaltado es su dirección MAC.
Ahora crea un script de inicio, que debe ejecutarse antes de que se inicie la red, para crear el adaptador macvlan en cada inicio. El comando para hacer esto es:
Un ejemplo de script de inicio Upstart para este propósito sería:
Solo pon esto en eg
/etc/init/macvlan.conf
.Configurar la configuración de red
En
/etc/network/interfaces
, configure su adaptador de red físico en manual (pero déjelo en automático) y mueva su configuración anterior (generalmente DHCP o una dirección IP estática) a su adaptador macvlan. P.ej:Deshabilitar IPv6 para el adaptador físico
Por último, no desea que el adaptador físico obtenga una dirección IP. Para IPv4, configurar el adaptador en manual evita que obtenga una dirección. Sin embargo, no he encontrado una configuración que impida que el núcleo obtenga / asigne una dirección IPv6 para / al adaptador. Cuando lo hace, también agrega rutas para ellos, lo que puede causar problemas. Entonces, la mejor manera parece ser deshabilitar IPv6 para el adaptador físico. Puedes hacer esto agregando la línea
a
/etc/sysctl.conf
, creando un archivo en/etc/sysctl.d/
con esta línea o al agregara su guión de inicio.
Cuando reinicie su máquina, la comunicación de host a invitado debería funcionar tanto con IPv4 como con IPv6.
Tenga en cuenta que si comete un error al configurar esto, es posible que no pueda acceder a su host a través de la red incluso después de un reinicio. Solo haga esto si tiene acceso físico a la máquina o si existen otras medidas de seguridad para poder solucionar posibles problemas.
fuente
Desea terminar con algo como esto:
Tenga en cuenta que la última columna contiene "macvlan0" en lugar de "eth0".
Para lograr eso, puede usar estos comandos, suponiendo 192.168.0.42 como su dirección IP:
Mayormente similar a la solución de npen. Si desea un script más sofisticado, consulte mi página web sobre este tema.
fuente
macvlan
módulo:modprobe macvlan
Usé lo que Lazzaro escribió en Debian, pero quiero agregar algunas notas.
En primer lugar, la interfaz de invitado debe establecerse en "Dispositivo de origen" -> "Dispositivo host eth0: macvtap"; "Modo fuente" -> " Puente ".
En segundo lugar, el script de inicio que no ha funcionado para mí ( parece que la interfaz macvlan0 se creó demasiado tarde durante el inicio ), así que utilicé esto:
Cambie el mac al que se asignó cuando se creó la interfaz por primera vez:
Guarde y establezca el bit de ejecución:
y agregue todos los enlaces para init:
fuente