BandaAncha

  • 🔍 en 📰 artículos ⏎
  • 🔍 en 💬 foros ⏎
  • 🔍 en 👇 este 💬 foro ⏎
  • 🔍 en 👇 este 💬 tema ⏎
Regístrate Regístrate Identifícate Identifícate
Fibra
💡

Método universal de Wake over WAN para despertar máquinas en la red local desde fuera de casa

vukits
8

Última actualización: 01/10/2024

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
photo_5969938236191132385_yphoto_5969938236191132386_y
  • Ir a Network→Interfaces→LAN , y en apartado 'DHCP Server' clickar a 'ignore' y luego a 'Save & Apply'
photo_5969938236191132387_y

Deshabilitar servicios innnecesarios y/o molestos

  • Acto seguido, vamos a "System → Startup" y deshabilitamos los servicios de
    • dnsmasq
    • wpad
    • odhcpd
photo_5969938236191132389_y
  • Clickamos en Save & Apply
  • Abrimos los ajustes de la interfaz LAN y desactivamos DHCPV6-service y RA-service
photo_5969938236191132395_y

Hacer default gw persistente

  1. 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
photo_5969938236191132391_y
  1. 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
photo_5969938236191132399_y
  • 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

  1. 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)
photo_5969938236191132392_y
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)

image

Anexo II: DNS dinámico

Ejemplo de Dyndns configurado en router de Digi

image

Anexo III: Tabla ARP router Digi

image

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.
enne
1

Bien compañero, se nota tu amor por "OpenWrt".

A mí personalmente no me va mucho la tal Luci y me gusta más algo más clásico como "Asus Merlín".En él monto OpenVPN y despierto mis máquinas a través del túnel,un wake on WAN, que realmente es un wake on LAN en toda regla.

Pero se agradece enormemente tú contribución.Saludos.

🗨️ 1
vukits

aún lo estoy escribiendo.

pero básicamente es

  • Dyndns
  • Servicio SSH con clave pública
  • etherwake

no tiene más misterio :)

enne
1

Ya veo que es un borrador, pero quería expresar lo mucho que tienes en estima OpenWrt y los buenos posts que a veces publicas sobre ello. Leeré con atención cuando lo tengas terminado.Tal vez me reconcilie con "Luci", siempre la he tenido un poco atragantada.

Nos leemos, Ciao.

🗨️ 1
apocalypse

Personalmente me parece que OpenWrt es el firmware libre y gratuito más completo que existe para routers, incluso por encima de OPNsense, pfSense y derivados. No hay prácticamente nada que no puedas hacer con él, gracias a la cantidad de paquetes con la que cuenta para agregar funcionalidades. Cierto es que es necesario saber de Linux para poder manejarlo a nivel experto/dev, pero para funciones básicas de router/gateway no es necesario ya que con LuCi se puede configurar todo lo necesario para dejarlo funcionando.

apocalypse

No es necesario hacer ping al router principal para mentener la entrada ARP. Si la entrada ARP expira, en el momento que sea necesario saber quién es 192.168.233.221, se enviará un broadcast preguntando quién tiene esa IP y éste responderá con su MAC y se añadirá a la tabla. Las ARP estáticas son necesarias para el verdadero WakeOnWan, porque el host apagado no responderá y no será posible asociar la IP a su dirección física.

Por cierto, para poder acceder a ese OpenWrt por ssh o luci desde fuera para despertar el equipo de la LAN, será necesario redireccionar dicho puerto en el router del operador. Aunque no lo recomiendo por seguridad, mejor montarle una VPN.

La puerta de enlace predeterminada no es necesaria configurarla por comando de inicio, basta con introducirla en IPv4 gateway en la misma interfaz que se configuró su IP (LAN, presupongo) y hace lo mismo.

Gracias por el tutorial, a muchos les será de utilidad si no tenían ya un router con OpenWrt o función WoL integrada.

🗨️ 2
vukits

Por cierto, para poder acceder a ese OpenWrt por ssh o luci desde fuera para despertar el equipo de la LAN, será necesario redireccionar dicho puerto en el router del operador. Aunque no lo recomiendo por seguridad, mejor montarle una VPN.

sí, sí :P

esta parte la añado mañana, que ya me quiero ir a dormir :P … y tengo que hacer unas cuantas capturas de pantalla más.

No es necesario hacer ping al router principal para mentener la entrada ARP.

es para el ARP de la máquina SSH. que me he encontrado con que el router de Digi se olvida de que existe,

vukits

lo acabo de acabar el tutorial.

creo que ahora queda más claro :P .

el ARP es porque el router neutro se olvida de que OpenWrt existe, y este último se vuelve inaccessible desde fuera. (aunque tengas el puerto abierto… incluso probé el truco de static DHCP, pero tampoco funcionó)

vukits

Última actualización: 01/10/2024 ("desactivar RA-service" y "RootPasswordAuth off ")