VLAN
VLAN es el acronimo para Virtual Local Area Network (Red de Area Local Virtual), Es una partición virtual de switches de red físicos en la Capa 2 del Modelo OSI.
Es una forma de mantener a los clientes de red separados entre sí incluso si usan la misma red física compartida, sin configurar una subred completa o un router. Funciona agregando una etiqueta (ID de VLAN) al tráfico de la red, y usando esta etiqueta para encaminar el trafico para mantener a los clientes aislados en diferentes VLAN. Para usar una VLAN necesitas al menos 2 dispositivos que admitan funciones de VLAN (ya que cualquier ruta requiere al menos 2 puntos), que generalmente son enrutadores avanzados, cualquier dispositivo OpenWrt y cualquier PC o tarjeta de computo que soporte (Windows,MacOS, Linux y BSDs que soporten VLANs)
OpenWrt es compatible con estándares de VLAN IEEE_802.Q y IEEE 802.1ad.
Muchos dispositivos con tarjetas integradas(embedded) con mas de un puerto un conmutador (switch) compatible con VLAN (por ejemplo todos los ruteadores con un puerto WAN tiene un conmutador – switch – compatible con VLAN). Equipos con un solo puerto y dispositivos en los que hay un controlador Ethernet para cada puerto ( como por ejemplo tarjetas PCEngines o la mayoria de hardware de PC en general) tendrán VLAN gestionada por controladores del Sistema Operativo.
Un conmutador (switch) compatible con VLAN es una version integrada de un dispositivo independiente llamado “Conmutador (switch) gestionado”. Está conectado a una interfaz interna “ethernet” en tu dispositivo, y es mas o menos independiente de la CPU principal. Puede colocar puerto bajo la misma VLAN (y se comunicaran entre sí) y solo configurando la(s) ID VLAN correctas en el puerto (con la configuración correcta, más adelante), y esto funcionará independientemente del hecho de que la comunicación de la red llegue o no a la CPU del enrutado ( tenga en cuenta que para configurar el enrutador todavia necesitas al menos una VLAN para llegar al CPU). Un dispositivo que soporta VLAN de software es solo un dispositivo con muchos controladores Ethernet diferentes, así que si quieres colocar 2 interfaces en la misma VLAN, Y quieres que estas dos interfaces también enruten el tráfico entre sí (para actuar como si fuera un conmutador (switch) con capacidad de VLAN como el que mencioné anteriormente), también debes de puentearlos ( es decir , ambas deben de estar en la misma interfaz, ya sean LAN, WAN or lo que sea).
Si tienes alguna pregunta, no dudes en comentar en esta sección del foro de OpenWRT https://forum.openwrt.org/t/vlan-assigning
VLAN explicada desde un escenario predeterminado de la mayoria de los enrutadores OpenWrt
Una configuración de VLAN predeterminada muy común en muchos enrutadores estándar es la separación LAN↔WAN. La configuración predeterminada de OpenWrt en tales dispositivos generalmente refleja la configuración de serie. La mayoria de estos enrutadores solo contienen una única interfaz de red (eth0) , lo que lleva un conmutador (switch) habilitado para VLAN de 5 puertos que está practicamente particionada en una red LAN y WAN mediante el uso de VLAN
VLAN ID |
Upstream: |
Downstream: |
||||
CPU (eth0) | LAN 1 | LAN 2 | LAN 3 | LAN4 | WAN | |
1 | tagged | untagged | untagged | untagged | untagged | off |
2 | tagged | off | off | off | off | untagged |
En este ejemplo la ID VLAN del puerto LAN es 1 mientras que el ID VLAN de puerto WAN es 2.
Tenga en cuenta que los términos “entrante(incoming)” y “saliente(outgoing)” y similares se refieren al tráfico de red que llegan a los puertos físicos del conmutador/ switch (o al puerto interno de la CPU) , NO al tráfico que ya ha entrado en el conmutador/switch.
- Etiquetado/tagged en el “CPU(eth0)” significa que las dos etiquetas de ID de VLAN utilizadas en este ejemplo (1,2) se envian a la CPU del enrutador “como datos etiquetados”. Recuerde: solo puedes enviar Datos Etiquetados a dispositivos compatibles con VLAN configurados para tratarlos correctamente.
- No etiquetado / Untagged significa que ese o esos puertos el conmutador/switch aceptará solo el tráfico entrante (incoming) sin un ID(s) de VLAN (es decir tráfico normal de ethernet). El switch removerá las ID VLAN en los datos salientes (outgoing) en dichos puertos. Cada puerto solo se puede asignar como “sin etiquetar/untagged” a exactamente una ID VLAN.
- desactivado/off ningún tráfico hacía o desde los puertos etiquetados de este ID VLAN llegarán a estos puertos.
El proposito de un puerto etiquetado (tagged) es pasar tráfico para multiples VLAN, mientras que un puerto sin etiquetar(untagged) acepta tráfico para una una sola VLAN. En terminos generales, los puertos etiquetados vincularan conmutadores (switches), y los puertos sin etiquetar vincularan a los dispositivos finales.
Luego la CPU del router utiliza la información de la etiqueta configurada anteriormente para saber si el dato viene de la VLAN 1(LAN) o la VLAN 2 (WAN) y luego actuará en consecuencia. En la configuración predeterminada, la CPU solo recibirá y generará datos “Etiquetados” (ya que no hay otra forma para saber que es que). La CPU utiliza la gestión de VLAN a nivel de controlador para esto, ya que actua como un dispositivo de un solo puerto.
Observa como las ID VLAN de la WAN y LAN de este ejemplo no comparten ningun puerto externo. Para cualquier dato/información que cruce la frontera de WAN y LAN, tiene que pasar por la CPU por eth0 (en donde el router y el firewall filtrarán la información). Como se dijo anteriormente, nada impide crear VLAN que eviten la CPU por completo.
¿Hay un Conmutador/Switch de hardware compatible con VLAN integrado en tu dispositivo?
Para averiguar si los puertos de un dispositivo OpenWrt constan de varias interfaces de red distintas o si es una unica interfaz de red que conduce a un conmutador (switch).
- Puedes revisar la págica técnica OpenWrt de tu enrutador.
- Puedes ejecutar el siguiente comando SSH para reviasar en tu dispositivo
ls -l /sys/class/net
.
Los dispositivos más nuevos con conmutadores(switches) integrados (como el Netgear R7800) usa el controlador de conmutador DSA, que crea una interfaz de red distinta para cada puerto de conmutado(switch) como si no tuvieran ningún conmutador (switch).
La mayoria de los dispositivos compatibles con Openwrt pueden usar el controlador DSA, pero aún no se han transferido porque la configuración del conmutador cambiaría significativamente y probablemente rompería cualquier configuración personalizada en los dispositivos en el campo.
Ejemplo: El siguiente ALIX.2D13 tiene 3 interfaces de red verdaderas: eth0, eth1 y eth2. Cada uno conduce a una única toma de red física no conmutada. Si es necesario, debes utilizar la configuración de VLAN basada software del sistema operativo.
# ls -l /sys/class/net ... lrwxrwxrwx 1 root root 0 Jul 25 14:10 eth0 -> ../../devices/pci0000:00/0000:00:09.0/net/eth0 lrwxrwxrwx 1 root root 0 Jul 25 14:10 eth1 -> ../../devices/pci0000:00/0000:00:0a.0/net/eth1 lrwxrwxrwx 1 root root 0 Jul 25 14:10 eth2 -> ../../devices/pci0000:00/0000:00:0b.0/net/eth2
Ejemplo: El siguiente TP-Link TL-WDR3600 tiene solo una interfaz de red: eth0. Sus 5 conectores de red física pertenecen a un único conmutador(switch) con capacidad para VLAN, que en este ejemplo está segmentada en 2 VLANs, gestionadas por el hardware del switch: eth0.1 y eth0.2:
# ls -l /sys/class/net ... lrwxrwxrwx 1 root root 0 Jan 1 1970 eth0 -> ../../devices/platform/ag71xx.0/net/eth0 lrwxrwxrwx 1 root root 0 Jul 21 22:13 eth0.1 -> ../../devices/virtual/net/eth0.1 lrwxrwxrwx 1 root root 0 Jul 21 22:13 eth0.2 -> ../../devices/virtual/net/eth0.2
Asignación de una ID VLAN en un hardware de Conmutador/ switch habilitado para VLAN
La Sección de switch
de /etc/config/network
es responsable de dividir el switch integrado en varias VLANs que aparecen como interfaz independientes en el sistema aunque comparten el mismo hardware.
Es posible que esta sección no esté presente en algunas plataformas (depende del soporte del hardware). Además, algunos switches solo soportan VLANs de 4 bit.
El siguiente ejemplo muestra una configuración típica:
config 'switch' 'eth0' option 'reset' '1' option 'enable_vlan' '1' config 'switch_vlan' 'eth0_1' option 'device' 'eth0' option 'vlan' '1' option 'ports' '0 1 3t 5t' config 'switch_vlan' 'eth0_2' option 'device' 'eth0' option 'vlan' '2' option 'ports' '2 4t 5t' config 'switch_vlan' 'eth0_3' option 'device' 'eth0' option 'vlan' '3' option 'ports' '3t 4t' config 'switch_port' option 'device' 'eth0' option 'port' '3' option 'pvid' '3'
Las propiedades comunes se definen dentro de la sección switch
; las propiedades específicas VLAN se localizan en la sección adicional switch_vlan
vinculada a la sección switch
a través de la opción device
; las propiedades específicas de pvid se encuentran en la sección switch_port
vinculada a la sección switch
a través de la opción device
.
Los puertos pueden estar etiquetados/tagged o sin etiquetar/untagged:
- El puerto etiquetado/tagged (
t
se agrega al número del puerto) es el que fuerza el uso etiquetas de VLAN, es decir, cuando el paquete es saliente (outgoing) , el ID VLAN etiquetado con el valorvlan
es agregado al paquete, y cuando el paquete es entrante (incoming), en cuanto a la etiqueta ID de VLAN debe de estar presente y coincidir con el/los valor/es devlan
configurados - El puerto no etiquetado/untagged elimina la etiqueta ID de VLAN al salir del puerto -- esto es utilizado para la comunicación con dispositivos comunes que no tienen ni idea de las VLAN. Cuando el paquete sin etiquetar/untagged llega al puerto, el ID de VLAN del puerto predeterminado (llamado
pvid
) se asigna al paquete automaticamente. El valor de pvid se puede seleccionar mediante la secciónswitch_port
.
El puerto de la CPU (el número 5
en nuestro ejemplo) puede ser configurado como etiquetado/tagged o no etiquetado/untagged, incluso puede ser omitido en la configuración del puerto. El puerto de la CPU funciona como cualquier otro puerto ordinario y se puede configurar para estar etiquetado/tagged o no etiquetado/untagged -- cuando el switch enruta el paquete al puerto de la CPU, aparece en la interfaz del switch correspondiente (con el número de etiqueta de ID de VLAN adjunto al nombre de la interfaz en caso de un puerto etiquetado) como paquete entrante para permitir el enrutamiento de software ( para WiFi por ejemplo).
En nuestro ejemplo, el paquete no etiquetado/untagged que llega al puerto 0 se marcará primero como ID de VLAN, luego se enviará al puerto 1 (sin etiquetar/untagged, con la etiqueta del ID de VLAN eliminada) , al puerto 3 (etiquetado) y al puerto de la CPU (etiquetado), así que el paquete aparece en la interfaz eth0.1
. Otro paquete llegando al puerto 2 etiquetado con el ID de VLAN 2 se enviará al puerto 4 (etiquetado) y el puerto de la CPU (etiquetado), el paquete se muestra en la interfaz eth0.2
. Cada puerto de CPU de switch etiquetado tiene una interfaz correspondiente, en nuestro ejemplo verás eth0.1
y eth0.2
en el sistema (así cómo eth0
). Cuando software envía un paquete al puerto de CPU etiquetado, se le asigna automaticamente la ID de VLAN correspondiente. Entonces, cuando el software envía un paquete a eth0.2
, primero se marca automaticamente con la etiqueta VLAN ID 2 y luego se envía al puerto 2 (sin etiquetar, etiqueta ID de VLAN eliminada) y al puerto 4 (etiquetada).
Un puerto sin etiqueta puede tener solo un ID de VLAN.
Creando VLANs a Nivel de Controlador.
Se puede crear una VLAN a nivel de controlador en la sección interface
agregando un punto (.
) y la ID de VLAN respectiva después del nombre de la interface (en la opción ifname
), como eth1.2
para la ID de VLAN en eth1
.
Cuando cualquier decisión de enrutamiento de software interno envía el paquete a la VLAN de software, deja la interfaz respectiva (eth1
en nuestro ejemplo) con la etiqueta VLAN presente y la ID de VLAN configurada en el número correspondiente al nombre de la interfaz (2
en nuestro ejemplo en eth1.2
).
Si el paquete entrante llega a la interfaz con las VLAN de software (paquetes entrantes en eth1
) y tiene una etiqueta de ID de VLAN configurada, en su lugar aparece en la interfaz de VLAN de software respectiva ( la etiqueta de ID de VLAN 2 llega a eth1.2
) -- si existe en la comfiguración! De lo contrario, el paquete se descarta. Los paquetes no etiquetados se envían a la interfaz no VLAN (eth1
) como de costumbre.
Cuando conectas infercaces no-VLAN y VLAN juntas, el sistema se encarga de agregar el ID de VLAN al enviar paquetes desde la interfaz que no es VLAN a la VLAN y automaticamente elimina el ID de VLAN cuando envía paquetes desde la interfaz VLAN a una que no es VLAN.
Las interfaces VLAN a nivel de controlador pueden ser configuradas manualmente. Si no, son creadas en ejecución por netifd. Definiendo VLAN manualmente brinda más opciones. Las siguientes opciones son compatibles:
Nombre | Tipo | Requerido | Predeterminado | Descripción |
---|---|---|---|---|
type | VLAN Type | no | 802.1q | Tipo de VLAN , posibles valores: 8021q o 8021ad |
name | Name | yes | (none) | Nombre de dispostivo, por ejemplo: eth0.5 o vlan5 |
ifname | Parent interface | yes | (none) | Nombre de la interfaz principal, por ejemplo: eth0 |
vid | VLAN Id | yes | (none) | ID de VLAN |
macaddr | MAC | no | (none) | MAC de una nueva interfaz |
Tenemos el ejemplo del adaptador inálambrico TP-Link CPE210 para exteriores. Tiene solo una NIC (Tarjeta de Red – Network Interfaz Controller) como la mayoría de los dispositivos para exteriores, pero se puede ampliar para admitir varias NIC virtuales con mucha facilidad.
En el ejemplo siguiente, eth0 esta segmentado en dos interfaces VLAN, con el ID de VLAN 106 y 204 utilizando una configuración manual explícita:
config device option type '8021q' option ifname 'eth0' option vid '106' option name 'vlan1' config device option type '8021q' option ifname 'eth0' option vid '204' option name 'vlan2' config interface 'lan' option type 'bridge' option ifname 'vlan1' option proto 'static' option ipaddr '192.168.1.1' option netmask '255.255.255.0' config interface 'wan' option ifname 'vlan2' option proto 'dhcp'
A continuación se muestra una configuración equivalente en notación implicita. Tenga en cuenta que faltan las secciones de device
y que el ID de VLAN y la interfaz principal se derivan del valor de la opción ifname
en notación de puntos.
config interface 'lan' option type 'bridge' option ifname 'eth0.106' option proto 'static' option ipaddr '192.168.1.1' option netmask '255.255.255.0' config interface 'wan' option ifname 'eth0.204' option proto 'dhcp'