jueves, 12 de febrero de 2015

VLANs y DD-WRT II

Siguiendo el hilo del post anterior sobre wrt y retomando el asunto del modo promiscuo en las interfaces he conseguido un resultado mas que aceptable finalmente:


root@L1:~# 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,UP> mtu 1500 qdisc pfifo_fast
    link/ether 68:7f:74:16:37:77 brd ff:ff:ff:ff:ff:ff
5: vlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop
    link/ether 68:7f:74:16:37:75 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,UP> mtu 1500 qdisc noqueue
    link/ether 68:7f:74:16:37:75 brd ff:ff:ff:ff:ff:ff
8: vlan4: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
    link/ether 68:7f:74:16:37:75 brd ff:ff:ff:ff:ff:ff
9: br0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
10: etherip0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop
    link/ether 6a:d0:e4:50:90:b3 brd ff:ff:ff:ff:ff:ff


El esquema fundamental para entender como trabaja el firmware es el siguiente:



Como se puede ver dispone de 3 interfaces, un puerto interno (5), un puerto WAN y 4 puertos LAN unidos que comparten bus.
Segun he podido leer y entender, "parece" ser una solución recurrente en los switches usar VLANs internamente y usar el mismo cable/bus para unir los puertos.

El resultado final ha sido en:

Vlan 1 -> WAN con none
Vlan 2 -> 1 2 3 asignados a NONE
Vlan 4 -> 4 a NONE
Wireless -> NONE

Setup-> Vlan: 

Igual que la versión anterior, con la excepción de que la VLAN2 no está en el bridge LAN (br0) sino en NONE.

Setup-> Networking:



Es decir todo vacio, menos br0 que si se elimina entonces la web deja de funcionar en este apartado debido a un fallo en js de su web.





Cada vlan2 unbridged y la WAN en la suya (lo único predeterminado).




VLAN4 la suya igualmente y para cada una el DHCP.

Destacar que no hace falta crear ninguna VLAN en eth1 pues al estar en una subred ya resuelve el "problema" del dominio de broadcast y si se quisiera/necesitado cualquier tipo de filtrado mayor se podría utilizar ebtables para dichos menesteres de la capa 2.

Por ultimo para hacerlo funcionar he necesitado las siguientes instrucciones via telnet:

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

# Mirar esquema anterior porque se las trae la numeración (case label = frontal)
nvram set vlan2ports="3 2 1 5*"
nvram set vlan4ports="0 5"

#elimina vlan0 del puente
brctl delif br0 vlan0

# (no perduran al reinicio...)
#Borra la vlan0
nvram unset vlan0ports
nvram unset port0vlans
nvram unset vlan0hwname
nvram set lan_ifname="eth0"



Y por último para variar seguia sin funcionar (v24-SP2 13064), básicamente por 2 causas:

eth1 no coge la configuración de la web y aunque la fuerzes la pierde cada reinicio:

ifconfig eth1 192.168.3.1 netmask 255.255.255.0 

Y el wifi o bien se resistía a funcionar el enlace o bien fallaba el dhcp. 
Resultó ser un bug persistente debido al orden de arranque de los servicios (nas y despues dnsmasq) por lo que el primero tiene que ser arrancado despues del segundo, solución matarlo y volverlo a lanzar.

Añadir lo siguiente a Administration  -> Commands  y luego Save startup

sh -c 'ifconfig eth1 192.168.3.1 netmask 255.255.255.0; sleep 15;nas=$(ps w
 | grep "^ *$(pidof nas) " | sed "s/.*nas -P/nas -P/"); killall -9 nas; ${nas}'


Y funcionando.

La siguiente fase será la de iptables y la última y mas cuantiosa y larga con diferencia será en el lado del servidor, en el que posiblemente intervengan imnumerables tecnologias (selinux/grc/X,puppet/chef/vgrant/X, systemd, lxc/docker/X, libvirt(svirt), openswitch/X, iptables/ebtables/nfbtables?, netns, lvm/btrfs/X y un sinfin de servicios (dns,ntp,correo,web,git,backup,monitoring, ids, honeypot,db...) ).

Respecto a la configuración por defecto de wrt y del 99,9% de las configuraciones encontradas en internet, algunas de gente de redes mejor no comment, solo decir que salvo honrosas excepciones, vivimos tiempos dificiles sin lugar a dudas y los bridges("hubs") campan a sus anchas.


Útiles usados en el wrt:

killall {nas , dnsmasq}

dnsmasq -k -d --interface=eth1 --dhcp-range=192.168.3.2,192.168.3.10,12h --conf-file=/dev/null

nas -P /tmp/nas.wl0lan.pid -H 34954 -i eth1 ....

dnsmasq.conf básico: (antes de limpiarlo, recortar las redes y los lease time entre otras cuestiones)

interface=br0,vlan2,vlan4,eth1
resolv-file=/tmp/resolv.dnsmasq
dhcp-leasefile=/tmp/dnsmasq.leases
dhcp-lease-max=125
dhcp-option=lan,3,192.168.2.1
dhcp-option=vlan2,3,192.168.2.1
dhcp-option=vlan4,3,192.168.4.1
dhcp-option=eth1,3,192.168.3.1
dhcp-authoritative
dhcp-range=lan,192.168.2.100,192.168.2.149,255.255.255.0,1440m
dhcp-range=vlan2,192.168.2.10,192.168.2.60,255.255.255.0,3600m
dhcp-range=vlan4,192.168.4.10,192.168.4.20,255.255.255.0,3600m
dhcp-range=eth1,192.168.3.2,192.168.3.17,255.255.255.0,3600m


No hay comentarios:

Publicar un comentario