Spiga

Configuración de VLANs 802.1q en Linux

En esta entrada vamos a presentar un ejemplo de configuración de VLANs 802.1q en un switch gestionable Dell Power Connect 3024 y en un servidor GNU/Linux (Debian) para ilustrar el funcionamiento de este estándar. La división de la red en diferentes VLANs tiene el objetivo de aislar el tráfico entre los equipos que pertenecen a distintas VLANs, incluyendo el tráfico de broadcast, mejorando así el rendimiento y la seguridad.

La red que se quiere configurar se resume en el siguiente diagrama, en el que se puede observar que se cuenta con dos equipos, pertenecientes a las VLAN 2 y 3 y que se encuentran conectados a los puertos 2 y 3 respectivamente, y un servidor Debian con una única interfaz de red que se encuentra conectado al puerto 1. 



Por defecto, el switch viene configurado con una única VLAN 1, de la que son miembros todos los puertos del switch.


Por tanto, es necesario crear las otras dos VLANs, seleccionando los puertos adecuados.  En este paso hay que definir si los puertos que pertenecen a cada VLAN son etiquetados (Tagged) o no etiquetados (Untagged).
  • Los puertos etiquetados son aquellos por los que el switch envía las tramas añadiendo una etiqueta de 4 bytes que, básicamente, identifica la VLAN a la que pertenece cada trama. Estos enlaces por los que viajan tramas que pueden pertenecer a diferentes VLANs se llaman trunks, y a ellos suelen conectarse otros switches que necesitan conocer de qué VLAN viene cada trama para decidir si debe o no enviarla por el puerto destino, servidores que implementen VLANs o, por ejemplo, puntos de acceso MultiSSID que hagan uso de este estándar.
  • En los puertos no etiquetados se encuentran conectados máquinas o dispositivos que no requieren conocer la VLAN a la que pertenece la trama, por lo que la etiqueta no es enviada.
En nuestro ejemplo, los puertos a los que están conectadas las máquinas serán marcados como Untagged, mientras que el puerto al que se conecta el servidor Debian, que sí requiere conocer la VLAN a la que pertenece cada trama, será marcado como Tagged.



Además de definir los puertos miembros de cada VLAN, es necesario configurar el PVID (Primary VID o Default Port VLAN) de cada puerto, que establece la VLAN con la que se etiquetará cada trama que llegue desde un puerto cuando ésta venga sin etiquetar.


La configuración del switch ya está lista. Ahora debemos configurar las VLANs en el servidor Debian.

Para ello, en primer lugar, es necesario cargar el módulo 8021q:

# modprobe 8021q

La herramienta de espacio de usuario que permite al administrador configurar VLANs es vconfig, que en Debian se encuentra en el paquete vlan, y su sintaxis es muy sencilla:

vconfig add interfaz vlanID

En nuestro ejemplo, como el servidor sólo dispone de una interfaz, eth0, se configuran las VLANs 2 y 3 sobre este adaptador (evidentemente el ID de las VLANs debe coincidir con los que se usan en el switch):

# vconfig add eth0 2
# vconfig add eth0 3

Puede comprobarse en el fichero /proc/net/vlan/config si las VLANs se han creado correctamente:

# more /proc/net/vlan/config

VLAN Dev name     | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth0.2         | 2  | eth0
eth0.3         | 3  | eth0


Como puede verse, se han generado dos interfaces virtuales (eth0.2 y eth0.3) asociadas a eth0, y estas interfaces deben levantarse y configurarse con la dirección que corresponda. Por ejemplo:

# ifconfig eth0.2 up
# ifconfig eth0.2 192.168.2.1

# ifconfig eth0.3 up
# ifconfig eth0.3 192.168.3.1

(Suponiendo que  en la VLAN 2 se está usando el direccionamiento 192.168.2.0/24 y en la VLAN 3 se utiliza el 192.168.3.0/24)

¿Cómo funciona esta implementación en Linux? Cada vez que se envíe un paquete desde la interfaz eth0.2, se añadirá a la trama la etiqueta con el ID 2 y se enviará al switch a través de eth0. Y cada vez que se reciba un paquete en eth0 que venga etiquetado con el ID 2, se retirará la etiqueta y se reenviará a la interfaz virtual eth0.2.

¡Y esto es todo! A partir de este momento las máquinas sólo tendrán comunicación con la interfaz del servidor que pertenece a su VLAN, y estarán aisladas del resto de equipos conectados a otras VLANs.