--- title: "Cómo configurar VLAN 802.1Q en Ubuntu 24.04 con Netplan" description: "Crea interfaces VLAN 802.1Q en Ubuntu 24.04, hazlas persistentes con Netplan, enruta entre VLAN y controla qué tráfico pasa de un segmento a otro con UFW." category: "Seguridad de Red Avanzada" language: es source: https://cubepath.com/es/docs/seguridad-de-red-avanzada/segmentacion-de-red-con-vlan-en-linux updated: 2026-09-25 --- # Cómo configurar VLAN 802.1Q en Ubuntu 24.04 con Netplan Una VLAN (Virtual LAN) divide una red física en varios dominios de broadcast aislados. El estándar 802.1Q añade a cada trama Ethernet una etiqueta de 4 bytes con el identificador de VLAN (1 a 4094), de modo que un único cable o puerto de switch puede transportar varias redes separadas. Linux gestiona estas etiquetas con el módulo del kernel `8021q` y crea una interfaz virtual por VLAN. En este tutorial configurarás dos VLAN sobre una interfaz física en Ubuntu 24.04: primero de forma temporal con `ip link` para entender el mecanismo, después de forma persistente con Netplan. Por último, convertirás el servidor en router entre ambos segmentos y usarás UFW para permitir solo el tráfico que necesitas entre ellos. ## Requisitos previos - Un servidor con Ubuntu 24.04 LTS y acceso `sudo` desde un usuario no root. - Una interfaz física conectada a un puerto de switch configurado como troncal (trunk) 802.1Q con las VLAN que vayas a usar, o un hipervisor con un bridge que deje pasar tramas etiquetadas. Si el puerto es de acceso (sin etiquetas), las tramas etiquetadas se descartarán. - Acceso por consola (KVM, IPMI o consola del proveedor) por si un error de red te deja sin SSH. > Importante: en la mayoría de VPS la interfaz virtual no transporta VLAN arbitrarias, porque el hipervisor filtra las tramas etiquetadas. Esta configuración está pensada para servidores dedicados, laboratorios o hipervisores propios. Para aislar tráfico entre VPS usa las redes privadas que ofrezca tu proveedor. En los ejemplos se usan estos valores. Sustitúyelos por los tuyos: | Elemento | Valor de ejemplo | |---|---| | Interfaz física | `eno1` | | VLAN 100 (gestión) | `10.0.100.1/24` | | VLAN 200 (aplicaciones) | `10.0.200.1/24` | ## Paso 1: Identificar la interfaz y cargar el módulo 8021q Lista las interfaces para localizar la física que va al puerto troncal: ```bash ip -br link show ``` ```output lo UNKNOWN 00:00:00:00:00:00 eno1 UP 3c:ec:ef:12:34:56 ``` Ubuntu carga el módulo `8021q` automáticamente al crear la primera interfaz VLAN, pero puedes cargarlo ahora y comprobarlo: ```bash sudo modprobe 8021q lsmod | grep 8021q ``` ```output 8021q 45056 0 garp 20480 1 8021q mrp 20480 1 8021q ``` ## Paso 2: Crear una VLAN temporal con ip link Antes de tocar la configuración persistente, crea la VLAN 100 a mano. Estos cambios desaparecen al reiniciar, así que son una forma segura de comprobar que el switch entrega el tráfico etiquetado: ```bash sudo ip link add link eno1 name vlan100 type vlan id 100 sudo ip addr add 10.0.100.1/24 dev vlan100 sudo ip link set vlan100 up ``` Verifica que la interfaz existe y lleva la etiqueta correcta. El parámetro `-d` muestra los detalles del tipo de enlace: ```bash ip -d link show vlan100 ``` ```output 5: vlan100@eno1: mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000 link/ether 3c:ec:ef:12:34:56 brd ff:ff:ff:ff:ff:ff promiscuity 0 allmulti 0 minmtu 0 maxmtu 65535 vlan protocol 802.1Q id 100 addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 ``` Si hay otro equipo en la VLAN 100 (por ejemplo `10.0.100.10`), haz ping para confirmar que el troncal funciona: ```bash ping -c 3 10.0.100.10 ``` Para ver las etiquetas en el cable, captura en la interfaz física mientras haces ping. La opción `-e` muestra la cabecera Ethernet, incluida la VLAN: ```bash sudo tcpdump -e -n -i eno1 vlan 100 -c 4 ``` ```output 10:15:02.114233 3c:ec:ef:12:34:56 > 52:54:00:aa:bb:cc, ethertype 802.1Q (0x8100), length 102: vlan 100, p 0, ethertype IPv4 (0x0800), 10.0.100.1 > 10.0.100.10: ICMP echo request, id 3, seq 1, length 64 ``` Cuando hayas comprobado que funciona, borra la interfaz temporal para que no choque con la configuración de Netplan: ```bash sudo ip link delete vlan100 ``` ## Paso 3: Hacer las VLAN persistentes con Netplan Ubuntu 24.04 gestiona la red con Netplan, que lee los ficheros YAML de `/etc/netplan/` en orden alfabético y los combina. Mira primero qué fichero define ya tu interfaz física y con qué identificador: ```bash ls /etc/netplan/ sudo cat /etc/netplan/50-cloud-init.yaml ``` El nombre que aparece bajo `ethernets:` (por ejemplo `eno1`, o `eth0` si cloud-init usa `match` con la MAC) es el que debes usar en `link:`. No hace falta modificar ese fichero: añade las VLAN en uno nuevo que se cargue después: ```bash sudo nano /etc/netplan/60-vlans.yaml ``` ```yaml network: version: 2 vlans: vlan100: id: 100 link: eno1 addresses: - 10.0.100.1/24 vlan200: id: 200 link: eno1 addresses: - 10.0.200.1/24 ``` No se define puerta de enlace en las VLAN: la ruta por defecto sigue en la interfaz principal. Si alguna VLAN necesitara su propia salida a Internet, harían falta tablas de rutas separadas, algo que queda fuera de esta guía. Netplan exige que sus ficheros no sean legibles por otros usuarios: ```bash sudo chmod 600 /etc/netplan/60-vlans.yaml ``` Aplica la configuración con `netplan try`. Si pierdes la conexión y no confirmas con Enter en 120 segundos, Netplan revierte los cambios: ```bash sudo netplan try ``` ```output Do you want to keep these settings? Press ENTER before the timeout to accept the new configuration Changes will revert in 119 seconds Configuration accepted. ``` Verifica las direcciones y el fichero de estado del kernel: ```bash ip -br addr show cat /proc/net/vlan/config ``` ```output lo UNKNOWN 127.0.0.1/8 ::1/128 eno1 UP 203.0.113.10/24 ... vlan100@eno1 UP 10.0.100.1/24 ... vlan200@eno1 UP 10.0.200.1/24 ... ``` ```output VLAN Dev name | VLAN ID Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD vlan100 | 100 | eno1 vlan200 | 200 | eno1 ``` Reinicia el servidor en algún momento para confirmar que las VLAN se levantan solas en el arranque. ## Paso 4: Enrutar entre VLAN Por defecto Linux no reenvía paquetes entre interfaces, así que los equipos de la VLAN 100 y la VLAN 200 no pueden hablar entre sí aunque el servidor esté en ambas. Para que el servidor actúe como router, activa el reenvío IPv4 de forma persistente: ```bash echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-vlan-routing.conf sudo sysctl --system ``` Comprueba el valor: ```bash sysctl net.ipv4.ip_forward ``` ```output net.ipv4.ip_forward = 1 ``` Los equipos de cada VLAN deben usar la IP del servidor en su segmento como puerta de enlace (o al menos tener una ruta hacia la otra red por ella). Por ejemplo, en un equipo Linux de la VLAN 100: ```bash sudo ip route add 10.0.200.0/24 via 10.0.100.1 ``` En ese momento todo el tráfico entre VLAN está permitido. El siguiente paso lo restringe. ## Paso 5: Filtrar el tráfico entre VLAN con UFW Segmentar la red solo sirve si controlas qué cruza de un segmento a otro. UFW filtra el tráfico reenviado con reglas `route`. La política será: nada pasa entre VLAN salvo lo que permitas explícitamente. Si UFW aún no está activo, permite SSH antes de activarlo para no perder el acceso: ```bash sudo ufw allow OpenSSH ``` Establece la política por defecto del tráfico reenviado en denegar: ```bash sudo ufw default deny routed ``` Permite solo lo necesario. En este ejemplo, la red de gestión (VLAN 100) puede entrar por SSH a los servidores de aplicaciones (VLAN 200), y los servidores de aplicaciones pueden consultar un MySQL que vive en la VLAN 100: ```bash sudo ufw route allow in on vlan100 out on vlan200 from 10.0.100.0/24 to 10.0.200.0/24 port 22 proto tcp sudo ufw route allow in on vlan200 out on vlan100 from 10.0.200.0/24 to 10.0.100.20 port 3306 proto tcp ``` Las reglas de UFW tienen estado: las respuestas de una conexión permitida vuelven sin necesidad de una regla en sentido contrario. Activa UFW (o recarga si ya estaba activo) y revisa las reglas: ```bash sudo ufw enable sudo ufw status verbose ``` La salida debe mostrar `deny (routed)` en la línea `Default:` y las dos reglas con `ALLOW FWD`. Verifica el filtrado desde los propios equipos. Desde un equipo de la VLAN 100, SSH a la VLAN 200 debe funcionar, y cualquier otro puerto debe agotar el tiempo de espera: ```bash nc -zv -w 3 10.0.200.10 22 nc -zv -w 3 10.0.200.10 80 ``` ```output Connection to 10.0.200.10 22 port [tcp/ssh] succeeded! nc: connect to 10.0.200.10 port 80 (tcp) timed out: Operation now in progress ``` Si quieres ver qué se bloquea, activa el log de UFW con `sudo ufw logging on` y revisa las entradas `[UFW BLOCK]` con `sudo journalctl -k | grep UFW`. ## Solución de problemas **La VLAN está UP pero no hay respuesta de ningún equipo**: el puerto del switch no está en modo troncal o no tiene esa VLAN permitida. Captura con `sudo tcpdump -e -n -i eno1 vlan` y comprueba si llegan tramas etiquetadas desde fuera; si solo ves las que salen, el problema está en el switch. **`netplan try` muestra `Permissions for /etc/netplan/60-vlans.yaml are too open`**: ejecuta `sudo chmod 600` sobre el fichero. **Netplan indica que la interfaz de `link:` no está definida**: el valor de `link:` no coincide con el identificador de la interfaz en el otro fichero de Netplan. Usa el nombre que aparece bajo `ethernets:`, que no siempre es el nombre del kernel. **El tráfico entre VLAN no pasa aunque haya regla**: comprueba que `net.ipv4.ip_forward` vale 1, que los equipos tienen ruta de vuelta por el servidor y que la regla usa los nombres de interfaz correctos (`vlan100`, no `eno1.100`). **Problemas con paquetes grandes**: la VLAN hereda el MTU de la interfaz física. Si el switch o el otro extremo usan un MTU distinto, ajusta `mtu:` en la definición de la VLAN en Netplan y comprueba que sea igual en ambos extremos. ## Conclusión Has creado VLAN 802.1Q en Ubuntu 24.04, primero de forma temporal con `ip link` y después persistente con Netplan, y has convertido el servidor en un router entre segmentos que solo deja pasar el tráfico que has autorizado con UFW. Como siguientes pasos puedes: - Añadir más segmentos (base de datos, backups, DMZ) repitiendo el bloque de Netplan y una regla `ufw route` por flujo necesario. - Ofrecer DHCP en cada VLAN con `dnsmasq` o Kea para no configurar los equipos a mano. - Enviar los logs de UFW a un sistema centralizado para auditar los intentos de cruzar entre segmentos.