"Después del juego es antes del juego"
Sepp Herberger

martes, 15 de febrero de 2022

Configuración de DLink DIR 860L-B1 como "routed client" para conectar como cliente a una red wifi.

De este tema ya he hablado en anteriores posts:
  1. OpenWRT en DLink DIR 860L-B1: http://2tazasdelinux.blogspot.com/2020/11/instalar-openwrt-en-los-puntos-de.html
  2. Routed client con NAT: http://2tazasdelinux.blogspot.com/2017/03/configuracion-de-openwrt-como-routed.html
  3. Routed client con relayd: http://2tazasdelinux.blogspot.com/2017/04/configuracion-de-openwrt-como-routed.html
Pero ahora voy a documentar como hacerlo funcionar en nuestros famosos y ociosos DLink DIR 860L-B1.

Recapitulemos: un Routed Client es la configuración por defecto de OpenWRT. En ella el router interconecta la red inalámbrica con la red LAN del dispositivo. Como la mayoria de los drivers wifi no permiten hacer un "bridge" si el dispositivo se conecta a la red wifi en modo cliente, cuando queremos interconectar ambas redes tenemos que configurarlo a mano enrutando el tráfico entre uno y otro interfaz. Y como hacer eso es lo que contaremos aquí.

¿Qué utilidad tiene esto?: pues es algo similiar a una "tarjeta wifi" configurada y lista para usar en cualquier momento en un dispositivo que necesite conexión y no nos llegue la red cableada. El DLink se conecta a la red wifi del centro y con el cable de red conectamos a los puertos ethernet hasta 4 dispositivos, de tal manera que esos tienen acceso a la red del centro.

Si por ejemplo tenemos un PC de sobremesa en un area donde no llega red cableada (o llega, pero hay una avería de electrónica de red), simplemente con enchufarlo por un cable de red a un DLink configurado como contamos aqui tendrá acceso a la red del centro de forma inmediata, sin mas aspavientos y sin configurar nada en el PC.

1. Cargar OpenWRT en el DLink.

Aunque en el artículo anterior contamos como instalar OpenWRT y propusimos poner la versión 15.05, ahora he hecho pruebas con versiones posteriores y he visto que la versión 21.02.1 funciona mejor que la 15.05.

Por tanto lo cargamos la imagen como contamos en el articulo anterior, pero ahora usamos OpenWrt 21.02.1 r16325-88151b8303. En cualquier momento podremos encontrar la última imagen en la página oficial de OpenWRT dedicada a nuestro DLink.

Una vez instalado el OpenWRT hay dos alternativas para configurar la interconexión entre la wifi y los puertos ethernet del DLink:
  • Usando IP Masquerading y haciendo NAT.
  • Usando relayd, que crea un "pseudobridge" por software que interconecta el tráfico entre ambas redes.
Veremos cada uno de los casos y sus ventajas e inconvenientes.

2. Usando IP masquerading.

El esquema sería este:


La conexión wifi recibe una IP de nuestra red 172.X.Y.Z y su interfaz ethernet tiene la IP 192.168.1.1. Sobre esa interfaz corre un servidor DHCP que da direcciones a los clientes dentro de ese rango. Ambas redes están interconectadas mediante IP masquerading como se viene haciendo de toda la vida para cualquier subred privada.

Los PC u otros dispositivos conectados a los puertos ethernet, con direccionamiento 192.168.1.X, son enrutados a través de la conexión wifi hacia la red del centro.

Para lograr esto hay que realizar la siguiente configuración en los ficheros de OpenWRT:

Primero la configuración de red:
# cat /etc/config/network
config interface 'loopback'
    option device 'lo'
    option proto 'static'
    option ipaddr '127.0.0.1'
    option netmask '255.0.0.0'

config globals 'globals'
    option packet_steering '1'
    option ula_prefix 'fdd3:89a2:bcfc::/48'

config device
    option name 'br-lan'
    option type 'bridge'
    list ports 'lan1'
    list ports 'lan2'
    list ports 'lan3'
    list ports 'lan4'

config device
    option name 'lan1'
    option macaddr '90:8d:78:59:c9:5c'

config device
    option name 'lan2'
    option macaddr '90:8d:78:59:c9:5c'

config device
    option name 'lan3'
    option macaddr '90:8d:78:59:c9:5c'

config device
    option name 'lan4'
    option macaddr '90:8d:78:59:c9:5c'

config interface 'lan'
    option device 'br-lan'
    option proto 'static'
    option ipaddr '192.168.1.1'
    option netmask '255.255.255.0'
    option ip6assign '60'
    option force_link '1'
    option ip6assign '60'

config device
    option name 'wan'
    option macaddr '90:8d:78:59:c9:5f'

config interface 'wan'
    option device 'wan'
    option proto 'dhcp'

config interface 'wan6'
    option device 'wan'
    option proto 'dhcpv6'

config interface 'wwan'
    option proto 'dhcp'
Como vemos hay 3 interfaces
  • lan: correspondiente al bridge que une los 4 puertos LAN ethernet del router, con IP 192.168.1.1
  • wan: correspondiente al puerto wan del router (el amarillo), que no usamos para nada.
  • wwan: correspondiente a la conexión wifi, que se configura por dhcp.
Ahora la configuración de la wifi:
# cat /etc/config/wireless

config wifi-device 'radio0' #Esde dispostivo es de la red de 5Ghz, no la uso, lo dejo desactivado.
    option type 'mac80211'
    option channel '36'
    option hwmode '11a'
    option path '1e140000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0'
    option htmode 'VHT80'
    option disabled '1'

config wifi-device 'radio1'
    option type 'mac80211'
    option channel '11'
    option hwmode '11g'
    option path '1e140000.pcie/pci0000:00/0000:00:01.0/0000:02:00.0'
    option cell_density '0'

config wifi-iface 'wifinet0'
    option device 'radio1'
    option mode 'sta'
    option network 'wwan'
    option ssid 'SSID_RED_EDUCATIVA'
    option encryption 'psk2'
    option key 'PASSWD_RED_EDUCATIVA'
Conectamos el interface de red wwan/radio1 indicando la contraseña y clave de la red educativa. Esto lo adaptarás según la wifi que quieras usar de tu centro. El DLink se conecta, autentica y recibe una IP por DHCP. Para facilitar la gestión recomiendo que la tarjeta wifi tenga configurada una IP fija en el servidor DHCP del centro.

Ahora vamos a ver el servidor DHCP:
#cat /etc/config/dhcp
config dnsmasq
    option domainneeded '1'
    option boguspriv '1'
    option filterwin2k '0'
    option localise_queries '1'
    option rebind_protection '1'
    option rebind_localhost '1'
    option local '/lan/'
    option domain 'lan'
    option expandhosts '1'
    option nonegcache '0'
    option authoritative '1'
    option readethers '1'
    option leasefile '/tmp/dhcp.leases'
    option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
    option nonwildcard '1'
    option localservice '1'
    option ednspacket_max '1232'

config dhcp 'lan'
    option interface 'lan'
    option start '100'
    option limit '150'
    option leasetime '12h'
    option dhcpv4 'server'
    option dhcpv6 'server'
    option ra 'server'
    option ra_slaac '1'
    option ignore '0'
    list ra_flags 'managed-config'
    list ra_flags 'other-config'

config dhcp 'wan'
    option interface 'wan'
    option ignore '1'

config odhcpd 'odhcpd'
    option maindhcp '0'
    option leasefile '/tmp/hosts/odhcpd'
    option leasetrigger '/usr/sbin/odhcpd-update'
    option loglevel '4'
Simplemente se define un servidor dhcp sobre el interface lan (el que da conexión cableada por los 4 puertos ethernet), que repartirá direcciones en el rango 192.168.1.100 a 192.168.1.150.

Ahora vemos la configuracion del firewall:
# cat /etc/config/firewall

config defaults
    option syn_flood '1'
    option input 'ACCEPT'
    option output 'ACCEPT'
    option forward 'REJECT'

config zone
    option name 'lan'
    option input 'ACCEPT'
    option output 'ACCEPT'
    option forward 'REJECT'
    list network 'lan'

config zone
    option name 'wwan'
    option input 'ACCEPT'
    option output 'ACCEPT'
    option forward 'ACCEPT'
    option masq '1'
    list network 'wwan'

config zone
    option name 'wan'
    option input 'ACCEPT'
    option output 'ACCEPT'
    option forward 'REJECT'
    option mtu_fix '1'
    list network 'wan'
    list network 'wan6'

config forwarding
    option src 'lan'
    option dest 'wwan'

config rule
    option name 'Allow-DHCP-Renew'
    option src 'wan'
    option proto 'udp'
    option dest_port '68'
    option target 'ACCEPT'
    option family 'ipv4'
....
.... esta parte queda sin tocar....
....

....
config include
    option path '/etc/firewall.user'
Basicamente se permite el forwarding entre lan y wwan, activando el masquerading en wwan. De esta manera el tráfico se enrutará entre ambos interfaces y redes.

3. Usando relayd.

En esta solución también la conexión wifi recibe una IP de nuestra red 172.X.Y.Z y su interfaz ethernet tiene la IP 192.168.1.1. Pero aquí acaban las similitudes con NAT. El servicio DHCP lo da el servidor del centro, por lo que las IP que reciben los clientes son de dicha red, del tipo 172.X.Y.W. Ambas redes están interconectadas mediante un demonio relayd que pasa el tráfico entre ellas por software (por eso a esta solución se le llama "pseudobridge").

Los PC u otros dispositivos conectados a los puertos ethernet tienen direccionamiento 172.X.Y.W, y gracias al relayd están lógicamente en la red del centro pudiendo ser alcanzados por ping u otro tipo de conexión. Por ejemplo, si conectamos una impresora por cable de red al DLink se podrá acceder a su IP para imprimir desde cualquier punto del centro.

Para lograr esto hay que realizar la configuración que datallaremos a continuación.

Instalar y activar el servicio relayd:
# opkg update
# opkg install relayd
# /etc/init.d/relayd enable
# /etc/init.d/relayd restart
La configuración de red:
# cat /etc/config/network

config interface 'loopback'
    option device 'lo'
    option proto 'static'
    option ipaddr '127.0.0.1'
    option netmask '255.0.0.0'

config globals 'globals'
    option packet_steering '1'
    option ula_prefix 'fdd3:89a2:bcfc::/48'

config device
    option name 'br-lan'
    option type 'bridge'
    list ports 'lan1'
    list ports 'lan2'
    list ports 'lan3'
    list ports 'lan4'

config device
    option name 'lan1'
    option macaddr '90:8d:78:59:c9:5c'

config device
    option name 'lan2'
    option macaddr '90:8d:78:59:c9:5c'

config device
    option name 'lan3'
    option macaddr '90:8d:78:59:c9:5c'

config device
    option name 'lan4'
    option macaddr '90:8d:78:59:c9:5c'

config interface 'lan'
    option device 'br-lan'
    option proto 'static'
    option ipaddr '192.168.1.1'
    option netmask '255.255.255.0'
    option ip6assign '60'
    option force_link '1'
    option ip6assign '60'

config device
    option name 'wan'
    option macaddr '90:8d:78:59:c9:5f'

config interface 'wan'
    option device 'wan'
    option proto 'dhcp'

config interface 'wan6'
    option device 'wan'
    option proto 'dhcpv6'

config interface 'wwan'
    option proto 'dhcp'

config 'interface' 'stabridge'
    option 'proto'      'relay'
    option 'network'    'lan wwan'
En este sistema hay también 3 interfaces:
  • lan: correspondiente al bridge que une los 4 puertos LAN ethernet del router, con IP 192.168.1.1
  • wan: correspondiente al puerto wan del router (el amarillo), que no usamos para nada.
  • wwan: correspondiente a la conexión wifi, que se configura por dhcp.
Adicionalmente interconectamos los interfaces lan y wwan mediante el demonio relayd.

Ahora la configuración de la wifi, que es totalmente igual a la del caso anterior:
# cat /etc/config/wireless

config wifi-device 'radio0' #Esde dispostivo es de la red de 5Ghz, no la uso, lo dejo desactivado.
    option type 'mac80211'
    option channel '36'
    option hwmode '11a'
    option path '1e140000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0'
    option htmode 'VHT80'
    option disabled '1'

config wifi-device 'radio1'
    option type 'mac80211'
    option channel '11'
    option hwmode '11g'
    option path '1e140000.pcie/pci0000:00/0000:00:01.0/0000:02:00.0'
    option cell_density '0'

config wifi-iface 'wifinet0'
    option device 'radio1'
    option mode 'sta'
    option network 'wwan'
    option ssid 'SSID_RED_EDUCATIVA'
    option encryption 'psk2'
    option key 'PASSWD_RED_EDUCATIVA'
Conectamos el interface de red wwan/radio1 indicando la contraseña y clave de la red educativa. Esto lo adaptarás según la wifi que quieras usar de tu centro. El DLink se conecta, autentica y recibe una IP por DHCP. Para facilitar la gestión recomiendo que la tarjeta wifi tenga configurada una IP fija en el servidor DHCP del centro.

Ahora vamos a ver el servidor DHCP:
#cat /etc/config/dhcp
config dnsmasq
    option domainneeded '1'
    option boguspriv '1'
    option filterwin2k '0'
    option localise_queries '1'
    option rebind_protection '1'
    option rebind_localhost '1'
    option local '/lan/'
    option domain 'lan'
    option expandhosts '1'
    option nonegcache '0'
    option authoritative '1'
    option readethers '1'
    option leasefile '/tmp/dhcp.leases'
    option resolvfile '/tmp/resolv.conf.d/resolv.conf.auto'
    option nonwildcard '1'
    option localservice '1'
    option ednspacket_max '1232'

config dhcp 'lan'
    option interface 'lan'
    option start '100'
    option limit '150'
    option leasetime '12h'
    option dhcpv4 'server'
    option dhcpv6 'server'
    option ra 'server'
    option ra_slaac '1'
    option ignore '1'
    list ra_flags 'managed-config'
    list ra_flags 'other-config'

config dhcp 'wan'
    option interface 'wan'
    option ignore '1'

config odhcpd 'odhcpd'
    option maindhcp '0'
    option leasefile '/tmp/hosts/odhcpd'
    option leasetrigger '/usr/sbin/odhcpd-update'
    option loglevel '4'
El servidor DHCP local está desactivado tanto en el interface wan como en el lan. Las direcciones IP para los puestos que se conecten por la red cableada llegarán desde el servidor DHCP del centro.

Ahora vemos la configuracion del firewall:
# cat /etc/config/firewall
config defaults
	option syn_flood '1'
    option input 'ACCEPT'
    option output 'ACCEPT'
    option forward 'REJECT'

config zone
    option name 'lan'
    option input 'ACCEPT'
    option output 'ACCEPT'
    option forward 'ACCEPT'
    list network 'lan'
    list network 'wwan'
....
.... esta parte queda sin tocar....
....
config include
    option path '/etc/firewall.user'
Simplemente permitimos todo tráfico (INPUT/OUTPUT/FORWARD) entre lan y wwan. El resto permanece igual.

4. Consideraciones finales.

Varias cosas importantes a tener en cuenta:
  • Usando NAT/Masquerading: hay que recordar que los equipos conectados por cable al DLink están en una red privada, con direccionamiento 192.168.1.X, por lo que aunque ellos tendrán acceso hacia todo el mundo, desde la red del centro no se podrá acceder a ellos.
  • Relayd: en este caso los equipos si están en la red del centro, con IP 172.X.Y.Z y se puede interactuar (ping, ssh, imprimir, etc) con ellos. Pero hemos tenido un problema grave al empezar a trabajar: en nuestro DLink, usando relayd, las respuestas DHCP no llegan. El puesto conectado al interface lan pide una IP, la petición llega al servidor DHCP del centro, se manda un paquete con la IP y al llegar al demonio relayd se pierde. Es un problema documentado en algunos router con OpenWRT y no está solucionado. En el siguiente punto vemos como hacer que funcione todo a pesar de este problema.
  • Relayd: como acabamos de decir, en nuestro DLink los paquetes DHCP llegados de fuera se pierden. Por ello, para que los equipos conectados al DLink mediante red cableada tengan red debemos configurarles la IP, puerta de enlace y DNS de forma estática a mano. Con este trámite todo funciona perfectamente.
  • Velocidad: no olvidemos que todo está conectado a través de un enlace wifi "G" que sería el cuello de botella. En las pruebas realizadas la descarga está entre 5-10MB/s. Esto hace que trabajar con un home montado mediante NFS sea muy lento, por lo que se aconseja (como ya hacemos con los portátiles de nuestros centros) trabajar con usuarios con home local.
  • Si probamos ambos métodos, NAT y relayd, se aconseja resetear la configuración del OpenWRT para empezar desde un sistema limpio cada prueba. Esto se hace con:
    # firstboot
    # reboot -f
    
Y con esto acabamos este nuevo montaje OpenWRT. Conforme vaya probando otras soluciones las iré poniendo aquí, tengo pensado probar a montar algo como un servidor NAS aprovechando el puerto USB 3, por ejemplo.

Out!

No hay comentarios:

Publicar un comentario