[EDITAR]
El sistema de producción es actualmente una combinación de sistemas físicos y ESXi. ¡Obviamente nunca usaríamos virtualbox incluso para un entorno de preproducción! Se usó aquí solo para reducir rápidamente el problema directamente en mi escritorio.
¡Gracias por la explicación del "en espera" en meta!
[/EDITAR]
Mi configuración:
- Red privada
vboxnet1
10.0.7.0/24 - 1 host, escritorio ubuntu
- 1 VM, servidor ubuntu (VirtualBox)
Diseño de direccionamiento:
- Anfitrión: 10.0.7.1
- VM: 10.0.7.101
- VM MAC NAMESPACE : 10.0.7.102
En el VM
, ejecuté los siguientes comandos:
ip netns add mac # create a new nmespace
ip link add link eth0 mac0 type macvlan # create a new macvlan interface
ip link set mac0 netns mac
En el mac
espacio de nombres, dentro de la VM:
ip link set lo up
ip link set mac up
ip addr add 10.0.7.102/24 dev mac0
Para que básicamente terminemos con: (¿Como inicio?)
+------------------------+
| Host: 10.0.7.1 |
| |
| +--------------------+ |
| | VM: 10.0.7.101 | |
| | | |
| | +----------------+ | |
| | | NS: 10.0.7.102 | | |
| | | | | |
| | +----------------+ | |
| +--------------------+ |
+------------------------+
Que funciona:
- Haga ping entre
Host
yVM
- Haga ping entre
NS
yNS
- dhclient de
NS
Qué no funciona:
- ping entre
NS
yVM
- ping entre
NS
yHost
Donde empecé a volverme loco:
- tcpdump on
host
(la máquina real) en realidad muestra la solicitud ARP Y responde - tcpdump on
NS
muestra las solicitudes ARP enviadas al host - tcpdump on
VM
hace que todo el desastre funcione (!) -> ping comienza a obtener respuestas cuando tcpdump se inicia en la máquina virtual?!?
Entonces, apuesto a que estabas ansioso por ello, mi pregunta es: ¿cómo puedo hacer que funcione? Sospecho que algo anda mal con ARP en el macvlan dentro del NS, pero no puedo entender qué es exactamente ...
Por cierto, hice los mismos experimentos con la mac0
interfaz directamente en la VM (sin espacio de nombres) y funcionó a la perfección.
fuente
Respuestas:
Bien, entonces, para la posteridad, el hecho de que tcpdump hace que todo funcione de repente debería haberme encaminado. Lo que hace internamente es cambiar
eth0
al modo promiscuo. Es decir,eth0
generará todo el tráfico de red, no solo el que tiene el servidor principalMAC
Sin embargo, así es exactamente cómo
macvlan
funciona: agrega una nueva dirección MAC virtual secundaria que el adaptador de red "físico" (que es una VM) no conoce.Entonces, la solución fácil es hacer manualmente:
ifconfig eth0 promisc
Espero que ayude !
fuente