- Mensajes
- 14,165
Introducción
Hoy os vengo a presentar un manual muy facilito para gente que necesita levantar un equipo de forma remota. Muchos de vosotros aparecéis por el foro con la misma cuestión: cómo configurar un router para ejecutar WOL, pero de forma remota (en lugar de "on lan", "on wan"). Deciros que WOL está basado en el envío de un magic packet a una dirección de broadcast y que, por tanto, es un protocolo pensado para funcionar en red local, no desde internet. Sumado a eso, se puede llegar a hacer una pequeña trampa para que funcione a nivel de IP, pero desde luego lo que nunca me ha gustado es que abráis puertos en un router para exponer esta funcionalidad: amén de ser peligroso, es más que probable que fracaséis en el intento. Y ¿cómo puedo ejecutar WOL de forma segura, desde una conexión remota? Pues muy sencillo, juntando estos tres conceptos: VPN + entrada estática en la tabla ARP + WOL (tradicional). Vamos al lío.Manos a la obra
Deciros que, lo primero, esto está pensado para correr en cualquier equipo mikrotik, incluidos los más pequeños. Para el ejemplo práctico he usado un hAP-mini, que como muchos ya sabréis es el router que tengo de trasteo y el que suelo llevar de viaje. En este caso es la víctima perfecta: un equipo pequeño, con tres puertos ethernet y que se puede alimentar por un micro-usb. Lo que vamos a hacer con él es combinar los tres conceptos anteriores, de la siguiente forma- VPN: Usaremos L2TP/IPsec, una de las VPN's más sencillas de montar y más ampliamente soportadas por prácticamente cualquier cliente. Para no molestar, vamos a montar e equipo en full bridge, siendo la VPN un servicio más que corre en nuestro router, en este caso reconvertido a switch. De esta manera, podremos pinchar el equipo a un router de operadora, y simplemente abriendo los puerto UDP 1701, 4500 y 500, y mandándoselos a la IP de este equipo, tendríamos todo configurado. Así no afectamos en nada al la instalación que ya tengáis, y podemos montar esto allá donde se nos plante.
- Tabla ARP: En muchos routers de los operadores no se puede manipular la tabla ARP. Afortunadamente, este no es el caso en mikrotik, siendo perfectamente posible meter una entrada estática en esa tabla. Dicha entrada la necesitaremos para que el router "sepa" quién es la IP correspondiente a la MAC que queremos levantar. Dicho de otro modo, cuando tenemos los equipos conectados, la tabla ARP registra la relación entre las direcciones MAC y las IPs de todos los equipos conectados en el mismo segmento L2. Pero, una vez apagamos ese equipo, al cierto tiempo, esas entradas se irán limpiando de la tabla. Y, si no guardamos esta de forma estática, puesto que el router ya habrá olvidado qué dirección IP tiene la MAC que le estamos pidiendo que levante, fallará. De esta manera, nos aseguramos que esa relación siempre está ahí, y que el WOL va a funcionar sin importar el tiempo que el equipo lleve apagado.
- WOL: Nuestro equipo mikrotik dispone de una herramienta en el menú de
/tool
para enviar magic packets, simplemente indicando la dirección MAC que queremos despertar y la interfaz donde dicha dirección debe localizarse.
Como partir de la configuración por defecto, como hacemos siempre, en este caso nos implica un trabajo mucho mayor que partir desde cero, este será uno de los pocos manuales donde os indicaré que tenemos que borrar la configuración del router con un reset. Para ello, una vez salvado el script que posteo a continuación en un fichero script.rsc y subido al router en la carpeta files, procederemos de la siguiente forma:
Código:
/system reset-configuration keep-users=yes skip-backup=yes run-after-reset=script.rsc
El script
El mismo se encuentra comentado en su totalidad, así que es sencillo de seguir. Sólo tenéis que tocar la parte de las variables de entorno que se definen antes del comentario # ARRANCA EL SCRIPT DE CONFIGURACIONEn esta sección, se definen las siguientes variables:
usuariovpn = nombre del usuario VPN. Definid vosotros el usuario que queráis.
passwordvpn = password del usuario VPN. Definid vosotros la contraseña que queráis.
secretoipsec = secreto compartido para IPSec. Definid vosotros el secreto compartido que queráis.
macserverwol = dirección MAC de la máquina que queremos levantar. En el ejemplo, la 00:11:22:AA:BB:CC
ipserverwol = ip de la máquina que queréis levantar. Aseguraos de que esta IP es estática o reservada en el DHCP del router de la operadora, pero que es siempre la misma. Esta dirección es del segmento de red de vuestro router principal; recordad que en esta ocasión estamos montando un router que hace de switch transparente. En este ejemplo, la 192.168.1.100
scriptwol = la instrucción que levantará la máquina por WOL. No es necesario tocar nada en este punto.
Sin más, este es el sript
Código:
# Definimos las variables a usar en la configuración de la VPN
:local usuariovpn "abc123"
:local passwordvpn "def456"
:local secretoipsec "xyz987"
# Definimos las variables a usar en el script de WOL
:local macserverwol "00:11:22:AA:BB:CC"
:local ipserverwol 192.168.1.100
:local scriptwol "/tool wol mac=$macserverwol interface=bridge"
############################################################
# ARRANCA EL SCRIPT DE CONFIGURACIÓN
############################################################
# Deshabilitamos la interfaz inalámbrica
# puesto que de inicio no la vamos a usar
/interface wireless
set 0 disabled=yes
# Creamos un nuevo bridge
/interface bridge
add name=bridge auto-mac=no admin-mac=\
[/interface ethernet get ether1 mac-address]
# Añadimos todas las interfaces al bridge
/interface bridge port
add bridge=bridge interface=all
# Levantamos un cliente DHCP sobre ese bridge
# Para que obtenga IP del router principal
/ip dhcp-client
add interface=bridge disabled=no
# Creamos un nuevo bridge de loopback,
# Para tener una IP con la que conectarnos al router
/interface bridge
add name=loopback
# Creamos una IP de administración
/ip address
add interface=loopback address=192.168.90.1/24
/ip arp
add interface=bridge mac-address=$macserverwol address=$ipserverwol
# Creamos un pequeño pool para la VPN (ejemplo, 5 ususarios)
/ip pool
add name=vpnpool ranges=192.168.89.2-192.168.89.6
# Creamos un nuevo perfil para la VPN, asociado al pool
# Y que ejecute el script de WOL al detectar una conexión
/ppp profile
add copy-from=default-encryption local-address=192.168.89.1 \
remote-address=vpnpool name=l2tpprofile on-up=$scriptwol
# Damos de alta un nuevo usuario para la VPN
/ppp secret
add name=$usuariovpn password=$passwordvpn service=l2tp profile=l2tpprofile
# Damos de alta el servidor VPN con L2TP
# sin más encriptación ni más nada
# puesto que sólo lo vamos a usar para el WOL
/interface l2tp-server server
set enabled=yes use-ipsec=yes ipsec-secret=$secretoipsec
# Nateamos la subred de la VPN
/ip firewall nat
add action=masquerade chain=srcnat src-address=192.168.89.0/24
# Damos de alta el cliente cloud
# para que el router tenga un DDNS automáticamente
/ip cloud
set ddns-enabled=yes
# Opcional - Creamos un script para levantar a mano por WOL
# Por si tenemos que hacerlo en cualquier otro momento
# Descomentar las siguientes 2 líneas en caso de quererlo
# /system script
# add dont-require-permissions=yes name=wol source=$scriptwol
Una vez aplicado el script, podréis acceder al router usando la IP que obtenga del router principal o configurando manualmente una IP del rango 192.158.90.0/24 en vuestra tarjeta de red (por ejemplo, la 192.168.90.2) y accediendo a la IP de loopback: 192.168.90.1
También, es recomendable que, una vez cargado el script, accedáis al equipo para cambiar la password del usuario admin, si es que no o hicisteis como parte del quick set cuando arrancasteis por primera vez el equip. Si tenéis la última versión de RouterOS (en este momento que escribo la 6.49 en la rama estable), os pedirá cambiar la password según accedáis por Winbox al equipo la primera vez.
Una vez aplicado, podéis conectaros por VPN con el detalle del usuario, contraseña y secreto de IPSec que definimos al principio del script, y con la dirección que nos otorga el cliente DDNS, que podéis encontrar en
/ip cloud print
Saludos, y espero que os guste! Dedicado al compi @apyguay