lunes, 9 de febrero de 2015

VLANs y DD-WRT I

Despues de 40 tutoriales que he pensado que deberia de hacer (hacking del de verdad (asm,gdb, calculo hexadecimal y c a raudales) ,lua,virtualizacion,selinux...), me animo y hago este de seguido que para eso lo acabo de terminar que sino despues estoy en otras batallas y como que no... :)


En este caso se trata de implementar sobre la red interna VLANs, básicamente por seguridad, puesto que va a estar funcionando varios "servidores" internos y mas vale que si ocurre algun problema la red interna ni se entere, también por el tema del internet de las cosas y en los proximos dias seguramente extender las VLANs con trunking al WDS por temas parecidos.

Introducción
----------------

Para el que no sepa para lo que sirve una VLAN, breve explicación de andar por casa: "Una vlan crea distintos dominios de broadcast (Layer 2!!!) sobre una o más redes físicas"

Es decir, trabaja únicamente a nivel de capa 2, por lo que si quieres aislarlas a nivel de capa 3 necesitas o bien un switch que lo permita o bien un router. Muy importante esta diferencía básica, porque yo estaba "aconstumbrado" a los switches cisco de nivel 3 y no me terminaba de encajar el tema del aislamiento en este caso...

Por último aclarar someramente igualmente, que "las vlan" pueden ser tagged o untagged (así muy de andar por casa), básicamente para conectar dispositivos vlan aware necesitas usar tagged (normalmente para los trunks únicamente salvo excepciones) y usar untagged cuando los puertos del dispositivo estan conectados a dispositivos finales y no vlan aware (un pc con configuración estandar).

Objetivo
-----------------

Configurar en el router principal, un wrt54gl 1.1 chip broadcom, necesita las siguientes VLAN:

VLAN 0 -> Eliminar (viene por defecto), puesto que da problemas
VLAN 1 -> Para el puerto WAN
VLAN 2 -> Los dispositivos del dia a dia
VLAN 3 -> Wifi (moviles, visitas, tvs...)
VLAN 4 -> Servidores

Pasos 
-----------------

Ir a Setup-> VLANs:

Entrar en el router y dejarlo así:







Explicación (los numeros corresponden con la parte trasera):

Vlan 1 -> WAN con none
Vlan 2 -> 1 2 3 asignados a la LAN
Vlan 4 -> 4 con none 

Wireless -> NONE


Ir a Setup-> Networking:




Explicación:

Crear un bridge llamado br1 (si escoges por ejemplo wifi no aparece en la web... :S), con el STP desactivado y asignarle una ip.
Asignar al bridge la interfaz del wifi (eth1 en mi caso) y a su vez la vlan3 (mas adelante explicaré como crearla).

Finalmente se puede observar que existen 2 bridges (br0 -> vlan2 (recuerdas el LAN de la pagina anterior??) y el que acabamos de crear y establecer.

Con esto los clientes del wifi pertenecerán a la vlan3 automáticamente y estarán dentro de una 192.168.3.0/24 (siguiente imagen dhcp).






Explicación:

Vlan 1 -> WAN (mismo que pagina anterior)

Todas unbridged menos vlan4, debido a que:
eth0 por definición es, eth1 también y vlan2 y 3 no "corresponde" por lo menos a mi juicio.
En este caso por lo tanto únicamente a vlan4 se le asigna su rango.

Por ultimo dhcp para:
vlan 4 -> (temporalmente/pruebas ...)
vlan 3 -> br1 -> eth1 -> wifi  ->  su rango. 
vlan  2 -> Se establece desde Setup->Basic setup 


Comandos telnet

Por último una vez establecido esto, casi nada funcionará :D , debido a que realmente la interfaz web funciona a medias en TODAS las versiones DD-WRT.

Es decir, que hace el trabajo a medias, establece las variables portXvlan correctamente pero ni establece las vlans ni vlanXports.

telnet 192.168.2.1
...

#Crea las vlans 2 y 4
nvram set vlan2hwname=et0
nvram set vlan4hwname=et0

#Borra la vlan0 (no la queremos para nada ya)
nvram unset vlan0ports
nvram unset port0vlans
nvram unset vlan0hwname

#portXvlan y vlan1port (WAN) si los crea via WEB
#Hay que añadir en todos el 5. Van al reves de portXvlan en el gl 1.1. :D
nvram set vlan2ports="3 2 1 5*"
nvram set vlan4ports="0 5"

#El wifi...
nvram set vlan3hwname=et0
nvram set vlan3ports="5"
nvram set port5vlans="1 2 3 4 16"  # Ponemos correctamente port5vlans

------

La explicación de esto es algo mas larga, pero básicamente crea las demas vlans, borra las antiguas y establece los puertos de las vlans con vlan2ports (la numeración es al reves y comenzando desde el 0 para el gl 1.1 ... O_o) y por último como quisquillosos establecemos correctametne port5vlans (las vlans de la CPU).

Resultado

Recalcar que no hacen falta configurar nada en los clientes de vlan puesto que al ser untagged (van sin la t los vlanXports) se le incluye esta etiqueta al frame cuando atraviesa el puerto/interfaz y que incluso si lo llevara lo descartaría para poner el suyo propio o directamente eliminaría la trama. 

Con esto, se tendrian las subredes diferenciadas a nivel 2, luego habría que mediante el iptables (nivel 3) bloquear el tráfico segun nos interese con iptables (pendiente).

No he testeado la red en gran medida por lo que es posible que exista algun error, lo que si he podido notar es que hay "demasiadas" interfaces en modo promiscuo, cosa que no me agrada en un principio (habría que ver la implementación).

Quizas tenga que refinar el tema del unbridge,  porque a los ojos de un sysadmin parece una aberración, pero lo mismo es una solución estandar en dispositivos de red.


 root@DD-WRT:~# ip link  
 1: lo: <LOOPBACK,MULTICAST,UP> mtu 16436 qdisc noqueue   
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00  
 2: teql0: <NOARP> mtu 1500 qdisc noop   
   link/void   
 3: eth0: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast   
   link/ether 68:7f:74:16:37:75 brd ff:ff:ff:ff:ff:ff  
 4: eth1: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc pfifo_fast   
   link/ether 68:7f:74:16:37:77 brd ff:ff:ff:ff:ff:ff  
 6: vlan1: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue   
   link/ether 68:7f:74:16:37:76 brd ff:ff:ff:ff:ff:ff  
 7: vlan2: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc noqueue   
   link/ether 68:7f:74:16:37:75 brd ff:ff:ff:ff:ff:ff  
 8: vlan3: <BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc noqueue   
   link/ether 68:7f:74:16:37:75 brd ff:ff:ff:ff:ff:ff  
 9: vlan4: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue   
   link/ether 68:7f:74:16:37:75 brd ff:ff:ff:ff:ff:ff  
 10: br0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue   
   link/ether 68:7f:74:16:37:75 brd ff:ff:ff:ff:ff:ff  
 11: etherip0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop   
   link/ether 8a:82:d5:63:63:73 brd ff:ff:ff:ff:ff:ff  
 19: br1: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue   
   link/ether 68:7f:74:16:37:75 brd ff:ff:ff:ff:ff:ff  


Y bueno he querido recalcar las cosas que muy dificilmente o directamente no se encuentran en internet respecto a este caso concreto, lo restante puede constar menos o mas pero yo creo que se encuentran "sin problemas" en cualquier tutorial (todo el mundo explica/hace lo mismo).

Por ultimo hacer notar que en vlan2ports="3 2 1 5*", se establece esta vlan (la LAN) como "nativa",  si la "CPU interna de eth0" recibe una trama sin etiqueta la etiquetará como vlan2. En muchisimos tutoriales establecen varias VLANs como "nativas", no he comprobado este asunto pero habría que ver realmente como maneja el asterisco este firmware (lo dejo pendiente igualmente de verificar). En la documentación se especifica que debería de colocarse únicamente en una vlan y que esta sea la de la LAN.


No hay comentarios:

Publicar un comentario