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:
root@host:~# ip link add link eth0 macvlan0 type macvlan mode bridge
root@host:~# ip addr show dev macvlan0
#: macvlan0@eth0: mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1
link/ether 12:34:56:78:90:ab brd ff:ff:ff:ff:ff:ff
...
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:
ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge
Un ejemplo de script de inicio Upstart para este propósito sería:
start on starting networking
script
ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge
end script
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:
auto eth0
iface eth0 inet manual
auto macvlan0
iface macvlan0 inet dhcp
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
net.ipv6.conf.eth0.disable_ipv6=1
a /etc/sysctl.conf
, creando un archivo en/etc/sysctl.d/
con esta línea o al agregar
sysctl -w net.ipv6.conf.eth0.disable_ipv6=1
a 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.