Última actualización: 01/10/2024
- 1 Alcance
- 2 Procedimiento
- 2.1 Día 0
- 2.1.1 Requisitos
- 2.1.2 Variables
- 2.2 Día 1 (Instalación)
- 2.2.1 Arranque inicial de OpenWrt
- 2.2.2 Deshabilitar servicios innnecesarios y/o molestos
- 2.2.3 Hacer default gw persistente
- 2.2.4 Cambiar LAN IP de br-LAN
- 2.2.5 Cronificar refresco en ARP para que router ISP no se olvide del de OpenWrt
- 2.2.6 /etc/resolv.conf manual
- 2.2.7 Instalar etherwake
- 2.2.8 Habilitar log-in SSH sólo mediante certificado
- 2.2.9 Comprobaciones finales (¡muy importante cada una!)
- 2.3 Día 2 (Mantenimiento y config. opcional)
- 2.1 Día 0
- 3 Anexos
Alcance
El presente tutorial tiene como objetivo presentar cómo podemos montar, por muy poco o ningún dinero, mediante un servicio SSH (que llamaré 'OpenWrt') en nuestra red local, que nos permita despertar máquinas de nuestra red local desde fuera del domicilio, o también llamado 'Wake over WAN'
Este tutorial es para usuarios que ya conocen ÑU/Linux y tiene una idea minima de redes.
Procedimiento
Día 0
Requisitos
- El puerto WAN de OpenWrt debe quedar libre: siempre usaremos puertos ethernet LAN
- Saber usar VIM (o instalar 'nano', si es que tenemos flash suficiente)
- Que WOL ya esté funcionando. (desde red local)
- Un router con OpenWrt y el paquete etherwake (los paquetes web de Luci no son estrictamente obligatorios). Yo usé un HG533 que tenía en el trastero. Sólo si tenemos un router con poca memoria flash (4MB), podemos usar el Imagebuilder para hacer una imagen compactada
- Saber usar SSH
- Saber usar minimamente OpenWrt
- Tener generada una pareja de clave pública/privada SSH
- Tener IP pública (en caso de Digi: conexión plus) y poder abrir puertos en
- En el router del ISP (p.e. el de Digi), tener configurado un servicio de DNS dinámica (en mi caso, uso Dyndns que es de pago… pero los hay gratuitos también)
Variables
- la IP del router neutro principal es 192.168.233.1
- LAN IP de servicio SSH (OpenWrt) es 192.168.233.221
- (temporalmente) LAN IP de nuestro portátil para configuración inicial de OpenWrt debe ser del rango 192.168.1.*
- interfaz LAN de OpenWrt es br-LAN
- la MAC del aparato a despertar es 4c:72:b9:d8:2a:44
- Nuestra pareja de certificados personal ssh se llama miCert y miCert.pub
- El dominio de DNS dinámico se llama midominio.dyndns.org
Día 1 (Instalación)
Arranque inicial de OpenWrt
Con OpenWrt conectado sólo al portátil, y teniendo este portátil IP fija del rango 192.168.1.*
- Entramos en la interfaz de administración de OpenWrt (192.168.1.1) y establecemos contraseña de administrador
- Ir a Network→Interfaces→LAN , y en apartado 'DHCP Server' clickar a 'ignore' y luego a 'Save & Apply'
Deshabilitar servicios innnecesarios y/o molestos
- Acto seguido, vamos a "System → Startup" y deshabilitamos los servicios de
- dnsmasq
- wpad
- odhcpd
- Clickamos en Save & Apply
- Abrimos los ajustes de la interfaz LAN y desactivamos DHCPV6-service y RA-service
Hacer default gw persistente
- Nos vamos a Pestaña "System→Startup→/etc/rc.local" y lo editamos para que contenga al final (presupongo que 192.168.233.1 es la IP del router del ISP*…)
route add default gw 192.168.233.1
exit 0
- Adicionalmente, nos conectamos por ssh y por si acaso, damos permisos de ejecución a /etc/rc.local
chmod +x /etc/rc.local
Cambiar LAN IP de br-LAN
- Abrimos los ajustes de la interfaz LAN y le ponemos LAN IP , una que no moleste, p.e. 192.168.233.221
- Reiniciamos OpenWrt
A partir de ahora usaremos la nueva LAN IP para acceder a él, que es 192.168.233.221 (evidentemente, en nuestro portátil, debemos poner IP automática)
Cronificar refresco en ARP para que router ISP no se olvide del de OpenWrt
- Abrir System→Scheduled tasks y programar un ping a la puerta de enlace cada 5 minutos, para mantener la entrada ARP fresca. (en teoría eso lo hace ntp-client, pero… si el DNS falla, pues dejará de ser efectivo)
0/5 * * * * ping -c 2 192.168.233.1
/etc/resolv.conf manual
- Nos conectamos por ssh al router de OpenWrt y generamos un resolv.conf como dios manda:
rm /etc/resolv.conf
echo nameserver 8.8.8.8 > /etc/resolv.conf
- Reiniciamos OpenWrt
Instalar etherwake
- Abrir la administración de paquetes de software de OpenWrt y clickamos en 'Update Lists'
- Instalar el paquete "etherwake" (también sirve la orden por línea de comandos )
opkg update
opkg install etherwake
- Darle a 'Aplicar y Guardar'
- Entramos por SSH a OpenWrt y en nuestro home, creamos el script para despertar el aparato
echo "etherwake -i br-lan 4c:72:b9:d8:2a:44" >>despertar.sh
Habilitar log-in SSH sólo mediante certificado
- Desde el portátil copiamos nuestro certificado SSH a OpenWrt mediante ssh-copy-id
ssh-copy-id -i miCert root@192.168.233.221
- Probamos si podemos acceder a OpenWrt mediante certificado y sin contraseña al router
ssh -i miCert root@192.168.233.221
- Si el paso anterior hemos podido acceder sin contraseña, pues desactivamos el acceso por contraseña en OpenWrt
vi /etc/config/dropbear
y nos aseguramos que tenga más o menos el siguiente contenido (básicamente que 'PasswordAuth' y "RootPasswordAuth" estén en 'off') y también opcionalmente podemos comentar el banner
config dropbear
option PasswordAuth 'off'
option RootPasswordAuth 'off'
option Port '22'
# option BannerFile '/etc/banner'
Comprobaciones finales (¡muy importante cada una!)
- Apagar y encender OpenWrt
- Dejar funcionando OpenWrt durante media hora y comprobar de que su IP sigue estando en la tabla ARP del router neutro.(ISP) (consultar Anexo III: ARP)
- Por línea de comandos probar de que OpenWrt tiene acceso a internet, haciendo ping a Google mediante IP y luego mediante nombre host
ping 8.8.8.8
ping google.es
Una vez sepamos que tiene acceso a internet, abrir el puerto 22 hacia el exterior (Anexo I) y configurar DNS dinámica ( Anexo II )
Y finalmente ya, mediante tethering en el móvil comprobamos que tenemos acceso SSH desde fuera
ssh -i micert midominio.dyndns.org -p 3343
Y para despertar a nuestro aparato, basta con ejecutar el script que hemos generado anteriormente
sh despertar.sh
Día 2 (Mantenimiento y config. opcional)
- Opcionalmente, Según la RAM que tenga nuestro CPE, pues a lo mejor no nos interesa tener siempre encendido el servicio de interfaz web:
service uhttpd stop
service uhttpd disable
- Opcionalmente también podemos programar con cron un reinicio diario de madrugada:
crontab -e
00 3 * * * /sbin/reboot
Anexos
Anexo I: Apertura de puertos en router neutro
Apertura puertos en router de Digi: (para más info, consultar tutorial de Josh sobre apertura de puertos en Digi)
Anexo II: DNS dinámico
Ejemplo de Dyndns configurado en router de Digi
Anexo III: Tabla ARP router Digi
TODO (cosas a mejorar)
- (TODO1): Simplificar el tutorial un poquito más, si posible que se haga todo a través de LUCI
- (TODO2): Configurar Dropbear SSHD con Port-Knocking
- (TODO3): Hacer un poco de limpieza y reformatear, hasta llegar a aspecto deseado.