SE RECOMIENDA LEER ANTES EL POST: VLANs sin VLANs: cómo aislar clientes con redes internas
Algunos datos, como las direcciones MAC, han sido anonimizados automáticamente, por lo que pueden diferir entre los distintos ejemplos mostrados. En caso de que alguno de estos datos sea relevante para la explicación, se mantendrá sin modificaciones.
Introducción
En el post anterior aprendiste a aislar clientes usando «Redes Internas» de VirtualBox. Funciona perfectamente para separar VMs entre sí, pero había una limitación importante:
Tu ordenador (el anfitrión) no podía hablar directamente con las VMs.
No podías hacer SSH desde tu PC a la VM, ni acceder a un servidor web que estuviera corriendo dentro de la VM.
¿Por qué pasa eso? Porque la Red Interna de VirtualBox es como una habitación cerrada donde solo entran las VMs. Tu ordenador se queda fuera.
¿Cómo lo solucionamos? Usando VLANs de verdad (el estándar 802.1Q) combinado con bridges de Linux en tu ordenador anfitrión.
En este post te voy a enseñar a hacerlo paso a paso, asumiendo que:
- Tienes Linux en tu ordenador (Ubuntu, Debian, Fedora, etc. – yo usaré Ubuntu para los ejemplos)
- Ya sabes crear VMs en VirtualBox (lo vimos en el post 1)
- Quieres que tu ordenador pueda hablar con las VMs sin perder el aislamiento entre clientes
Si usas Windows o macOS como anfitrión: Este método no funciona directamente porque necesitas las herramientas de red de Linux. Puedes usar una VM con Linux como «switch virtual» (lo veremos en el siguiente post) o cambiarte a Linux. Pásate a la resistencia 🐧
¿Qué vamos a construir?
Vamos a crear tres VLANs (Virtual LANs) en tu ordenador Linux:
| VLAN ID | Nombre | Para qué cliente | Rango de IPs |
|---|---|---|---|
| 10 | Rojo | Cliente Rojo | 10.0.10.0/24 |
| 20 | Verde | Cliente Verde | 10.0.20.0/24 |
| 30 | Azul | Cliente Azul | 10.0.30.0/24 |
La gran diferencia con el post anterior: Tu ordenador (anfitrión) tendrá una IP dentro de cada VLAN. Eso significa que podrás:
- Hacer SSH desde tu ordenador a cualquier VM (de la misma VLAN)
- Acceder a servidores web que corran en las VMs desde tu navegador
- Compartir archivos con las VMs fácilmente
Pero el aislamiento entre clientes se mantiene: las VMs rojas no ven a las verdes, y viceversa.
Conceptos nuevos que necesitas entender
Antes de empezar con los comandos, vamos a entender tres conceptos que son la clave de todo.
Concepto 1: ¿Qué es un bridge (puente) en Linux?
Un bridge es como un switch virtual dentro de tu ordenador. Conecta varias interfaces de red entre sí, como si estuvieran enchufadas al mismo switch físico.
Imagina un pequeño aparato con 4 puertos. Todo lo que entra por un puerto, sale por los demás. Eso es un bridge.
En Linux, creamos bridges con el comando brctl o ip link add type bridge.
Concepto 2: ¿Qué es una VLAN tag (etiqueta)?
Cuando tienes varias VLANs compartiendo el mismo cable físico (o la misma interfaz de red), necesitas una forma de saber «a qué VLAN pertenece este paquete».
Para eso se usan las etiquetas VLAN (VLAN tags). Es un número (del 1 al 4094) que se añade a cada paquete.
En Linux, creamos interfaces VLAN con el comando ip link add link ... type vlan id ...
Concepto 3: ¿Qué es un trunk?
Un trunk es un cable (o interfaz) por el que pasan múltiples VLANs con etiquetas. Al otro lado del trunk, necesitas algo que entienda esas etiquetas (como un bridge en Linux o un switch físico).
En nuestra configuración, el «trunk» será la interfaz de red virtual que VirtualBox usa para comunicarse con tu ordenador.
La arquitectura que vamos a montar

- Cada bridge (
br10,br20,br30) es un switch virtual independiente - Cada bridge solo maneja una VLAN (la 10, la 20 o la 30)
- Las VMs se conectan directamente al bridge de su VLAN (sin tag, porque el bridge ya sabe a qué VLAN pertenecen)
- Tu ordenador puede tener una IP en cada bridge (para comunicarse con esa VLAN)
Paso 0: Requisitos previos
Antes de empezar, asegúrate de tener:
0.1 Linux instalado en tu ordenador
Abre una terminal y ejecuta:
uname -aBashDeberías ver algo como esto:
Linux matrix 6.14.0-37-generic #37~24.04.1-Ubuntu...Bash0.2 VirtualBox instalado
VBoxManage --versionBashDebe devolver un número de versión:
7.0.16_Ubuntur162802Bash0.3 Las VMs creadas (al menos 3, una por cliente)
Del post anterior, ya deberías tener:
Rojo_Servidor(o el nombre que le hayas puesto)Verde_ServidorAzul_Servidor
Si no las tienes, créalas rápidamente con cualquier ISO liviana. (Yo suelo usar Alpine para estas pruebas)
0.4 Los paquetes necesarios para bridges VLAN
En Ubuntu/Debian:
sudo apt update
sudo apt install -y bridge-utils vlanBashEn Fedora/RHEL:
sudo dnf install -y bridge-utils vconfigBashCarga el módulo 8021q (necesario para VLANs):
sudo modprobe 8021q
echo "8021q" | sudo tee -a /etc/modulesBashEstamos listos para empezar…
Paso 1: Crear los bridges (los switches virtuales)
Vamos a crear tres bridges: uno para cada VLAN.
Abre una terminal en tu ordenador (el anfitrión Linux), no dentro de ninguna VM.
# Crear bridge para VLAN 10 (Cliente Rojo)
sudo ip link add name br10 type bridge
# Crear bridge para VLAN 20 (Cliente Verde)
sudo ip link add name br20 type bridge
# Crear bridge para VLAN 30 (Cliente Azul)
sudo ip link add name br30 type bridgeBash¿Qué hizo cada comando?
Creó un «switch virtual» llamado br10, br20 y br30. Por ahora están apagados.
Ahora activa los bridges:
# Activar los tres bridges
sudo ip link set br10 up
sudo ip link set br20 up
sudo ip link set br30 upBashComprueba que se crearon correctamente:
ip link show | grep brBashDeberías ver algo como:
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
link/ether 3c:52:82:11:9a:4f brd ff:ff:ff:ff:ff:ff
link/ether 08:00:27:3b:5c:91 brd ff:ff:ff:ff:ff:ff
4: br10: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
link/ether a2:4f:19:7c:3d:88 brd ff:ff:ff:ff:ff:ff
5: br20: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
link/ether b6:71:2a:9e:44:c3 brd ff:ff:ff:ff:ff:ff
6: br30: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default qlen 1000
link/ether da:3e:65:0b:92:f1 brd ff:ff:ff:ff:ff:ffBashAqui nos interesa el 4:, 5: y 6: y que ponga <NO-CARRIER,BROADCAST,MULTICAST,UP>
Paso 2: Darle una IP a tu ordenador dentro de cada VLAN
Si quieres que tu ordenador pueda hablar con las VMs de una VLAN, tienes que darle una IP en esa VLAN.
Esto se hace asignando una IP al bridge (no a la interfaz física).
# Asignar IP al bridge de la VLAN 10 (red 10.0.10.0/24)
sudo ip addr add 10.0.10.1/24 dev br10
# Asignar IP al bridge de la VLAN 20
sudo ip addr add 10.0.20.1/24 dev br20
# Asignar IP al bridge de la VLAN 30
sudo ip addr add 10.0.30.1/24 dev br30Bash¿Qué significa esto?
Tu ordenador ahora tiene tres «tarjetas de red virtuales», puedes comprobarlo con el comando ifconfig:
apuntes@hacking:~$ ifconfig
br10: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 10.0.10.1 netmask 255.255.255.0 broadcast 0.0.0.0
ether a2:4f:19:7c:3d:88 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 17 overruns 0 carrier 0 collisions 0
br20: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 10.0.20.1 netmask 255.255.255.0 broadcast 0.0.0.0
ether b6:71:2a:9e:44:c3 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 16 overruns 0 carrier 0 collisions 0
br30: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 10.0.30.1 netmask 255.255.255.0 broadcast 0.0.0.0
ether da:3e:65:0b:92:f1 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 16 overruns 0 carrier 0 collisions 0BashPaso 3: Crear el trunk y las interfaces VLAN
Primero vamos a crear un trunk (un cable virtual por el que pasan todas las VLANs con etiquetas) y luego las interfaces VLAN con tag.
3.1 Identificar o crear una interfaz que hará de trunk
Necesitamos una interfaz que actúe como «cable trunk». Puede ser:
- Opción A (recomendada): Una interfaz dummy (virtual, dentro de Linux)
- Opción B: Una interfaz física que no estés usando (como
eth0si no la usas para internet) - Opción C: La interfaz que VirtualBox crea automáticamente (como
vboxnet0)
Para no depender de hardware físico, usaremos una interfaz dummy:
# Cargar el módulo dummy si no está
sudo modprobe dummy
# Crear una interfaz dummy llamada trunk0
sudo ip link add trunk0 type dummy
# Activarla
sudo ip link set trunk0 upBashEsta interfaz trunk0 será nuestro «cable virtual» por el que pasarán todas las VLANs con etiquetas.
Si usas el comando ifconfig puedes ver la interfaz creada:
apuntes@hacking:~$ ifconfig
trunk0: flags=195<UP,BROADCAST,RUNNING,NOARP> mtu 1500
inet6 fe80::a00:27ff:feab:4cde prefixlen 64 scopeid 0x20<link>
ether 0a:00:27:ab:4c:de txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3 bytes 210 (210.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0Bash3.2 Crear las interfaces VLAN (con tag 802.1Q)
Ahora creamos una interfaz VLAN por cada VLAN, asociada al trunk:
# VLAN 10 (Cliente Rojo) - tag 10
sudo ip link add link trunk0 name vlan10 type vlan id 10
# VLAN 20 (Cliente Verde) - tag 20
sudo ip link add link trunk0 name vlan20 type vlan id 20
# VLAN 30 (Cliente Azul) - tag 30
sudo ip link add link trunk0 name vlan30 type vlan id 30Bash¿Qué hizo esto?
Creamos tres interfaces virtuales (vlan10, vlan20, vlan30) que «viajan» por el mismo cable (trunk0), pero cada una lleva una etiqueta (tag) diferente: 10, 20 y 30.
3.3 Activar las interfaces VLAN
sudo ip link set vlan10 up
sudo ip link set vlan20 up
sudo ip link set vlan30 upBash3.4 Conectar las interfaces VLAN a los bridges
Ahora conectamos cada interfaz VLAN a su bridge correspondiente:
# vlan10 (tag 10) al bridge br10
sudo ip link set vlan10 master br10
# vlan20 (tag 20) al bridge br20
sudo ip link set vlan20 master br20
# vlan30 (tag 30) al bridge br30
sudo ip link set vlan30 master br30BashEsquema final de lo que has construido:

Paso 4: Conectar las VMs a los bridges
# Cliente Rojo
VBoxManage modifyvm "Rojo_Servidor" --nic1 bridged --bridgeadapter1 br10
# Cliente Verde
VBoxManage modifyvm "Verde_Servidor" --nic1 bridged --bridgeadapter1 br20
# Cliente Azul
VBoxManage modifyvm "Azul_Servidor" --nic1 bridged --bridgeadapter1 br30BashExplicación de este comando:
modifyvm "NombreVM"→ modifica la VM--nic1→ configura el primer adaptador de redbridged→ modo puente (la VM se conecta directamente a la red)--bridgeadapter1 br10→ puentea con el bridge llamadobr10
Paso 5: Verificar que las VLAN tags existen
Para comprobar que las interfaces VLAN están correctamente configuradas con su tag 802.1Q, ejecuta:
ip -d link show vlan10BashDeberías ver algo como:
apuntes@hacking:~$ ip -d link show vlan10
8: vlan10@trunk0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue master br10 state UP mode DEFAULT group default qlen 1000
link/ether da:7c:91:2f:4b:68 brd ff:ff:ff:ff:ff:ff promiscuity 1 allmulti 1 minmtu 0 maxmtu 65535
vlan protocol 802.1Q id 10 <REORDER_HDR>
bridge_slave state forwarding priority 32 cost 100 hairpin off guard off root_block off fastleave off learning on flood on port_id 0xBashEse vlan protocol 802.1Q id 10 es la prueba de que la interfaz VLAN tiene la etiqueta 802.1Q con ID 10. Repite para vlan20 y vlan30.
Paso 6: Encender las VMs y asignar IPs
Este paso ya se explicó en el anterior post y puede que ya lo tengas hecho, dejo los comandos a modo de resumen:
6.1 Dentro de cada VM, asignar IP manual
Dentro de la VM Rojo_Servidor:
sudo ip addr add 10.0.10.10/24 dev eth0
sudo ip link set eth0 upBashDentro de Verde_Servidor:
sudo ip addr add 10.0.20.10/24 dev eth0
sudo ip link set eth0 upBashDentro de Azul_Servidor:
sudo ip addr add 10.0.30.10/24 dev eth0
sudo ip link set eth0 upBash6.2 Probar que la VM ve a su bridge (el anfitrión)
Desde Rojo_Servidor, haz ping a la IP del bridge br10 (que es tu ordenador en esa VLAN):
ping 10.0.10.1Bash✅ Debe funcionar. Eso significa que tu ordenador y la VM roja pueden hablar.
Paso 7: Probar el aislamiento entre VLANs
Prueba 1: Desde VM roja a VM verde (DEBE fallar)
Desde Rojo_Servidor (10.0.10.10):
ping 10.0.20.10Bash❌ Sin respuesta. El aislamiento funciona.
Prueba 2: Desde tu ordenador (anfitrión) a VM roja (DEBE funcionar)
En tu terminal de Linux (no dentro de la VM):
ping 10.0.10.10Bash✅ Debe funcionar.
Te animo a que tu mismo pruebes a hacerlo desde el resto de las máqinas.
Paso 8: Hacer la configuración permanente (para que no desaparezca al reiniciar)
Todos los comandos que hemos ejecutado (ip link add, ip addr add, etc.) desaparecen cuando reinicias tu ordenador.
Para hacerlos permanentes, vamos a usar netplan (en Ubuntu 18.04+).
8.1 Crear un archivo de configuración netplan
sudo nano /etc/netplan/02-vlans.yamlBashPega este contenido:
network:
version: 2
renderer: networkd
bridges:
br10:
interfaces: [vlan10]
addresses: ["10.0.10.1/24"]
br20:
interfaces: [vlan20]
addresses: ["10.0.20.1/24"]
br30:
interfaces: [vlan30]
addresses: ["10.0.30.1/24"]
vlans:
vlan10:
id: 10
link: trunk0
vlan20:
id: 20
link: trunk0
vlan30:
id: 30
link: trunk0
dummies:
trunk0:
addresses: []Bash8.2 Aplicar la configuración
sudo netplan applyBash8.3 Para las VMs, los comandos VBoxManage sí son permanentes
Los cambios con VBoxManage modifyvm se guardan en la configuración de la VM. No se pierden al reiniciar


Deja una respuesta