Instalación del Servidor Remoto de Wake-on-LAN (Docker + Python)
Esta guía explica cómo instalar y ejecutar el servidor remoto de Wake-on-LAN (WOL) utilizado por Turn Off PC.
Este servidor actúa como un puente entre la VPN y la red local, permitiendo que dispositivos fuera de la red doméstica enciendan ordenadores usando Wake-on-LAN.
El servicio está implementado como un servidor HTTP en Python ejecutándose dentro de un contenedor Docker.
Qué hace este servidor
El servidor WOL:
- Se ejecuta continuamente en un sistema Linux (recomendado: Raspberry Pi)
- Escucha solicitudes HTTP en el puerto 5000
- Recibe una dirección MAC mediante HTTP POST
- Envía un paquete mágico de Wake-on-LAN dentro de la red local
- Habilita el Wake-on-LAN remoto cuando se usa junto con una VPN (por ejemplo, Tailscale)
Requisitos previos
Antes de instalar el servidor remoto de Wake-on-LAN, asegúrate de que los siguientes componentes ya están instalados y funcionando en el dispositivo anfitrión:
-
Raspberry Pi OS (u otra distribución de Linux compatible) → Instalación de Raspberry Pi OS
-
Docker (necesario para ejecutar el contenedor del servidor WOL) → Instalación de Docker en Linux
-
Tailscale (necesario para acceso remoto a través de VPN) → Instalación de Tailscale
El dispositivo anfitrión debe:
- Estar encendido en todo momento
- Estar conectado a la red local
- Estar conectado a la VPN (Tailscale)
Estructura del proyecto resultante
Después de completar esta guía, la estructura de directorios será:
wol-server/
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── wol_server.py
Paso 1: Crear el directorio del proyecto
Crea un directorio para alojar el servidor WOL y entra en él:
mkdir -p ~/wol-server
cd ~/wol-server
Paso 2: Crear el script del servidor Python
Crea el script principal de Python:
nano wol_server.py
Pega el siguiente código:
from flask import Flask, request
import os
app = Flask(__name__)
@app.route("/wake", methods=["POST"])
def wake():
data = request.get_json()
mac = data.get("mac")
if not mac:
return "No MAC address provided", 400
os.system(f"wakeonlan {mac}")
return f"Magic packet sent to {mac}", 200
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)
Guarda y sal: Ctrl + O → Enter Ctrl + X
Paso 3: Crear el archivo de dependencias de Python
Crea el archivo requirements.txt:
nano requirements.txt
Añade la dependencia necesaria:
Flask==2.3.3
Guarda y sal: Ctrl + O → Enter Ctrl + X
Paso 4: Crear el Dockerfile
Crea el Dockerfile:
nano Dockerfile
Pega el siguiente contenido:
FROM python:3.11-slim
RUN apt-get update && \
apt-get install -y wakeonlan && \
rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY requirements.txt .
COPY wol_server.py .
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 5000
CMD ["python3", "wol_server.py"]
Guarda y sal: Ctrl + O → Enter Ctrl + X
Paso 5: Crear el archivo Docker Compose
Usar Docker Compose simplifica la gestión y asegura que el contenedor se reinicie automáticamente.
Crea el archivo:
nano docker-compose.yml
Pega la siguiente configuración:
version: "3"
services:
wol-server:
build: .
network_mode: "host" # Usa la red del anfitrión (necesario para broadcast)
cap_add:
- NET_ADMIN # Permite enviar paquetes broadcast
restart: unless-stopped
Guarda y sal: Ctrl + O → Enter Ctrl + X
Por qué network_mode: host es necesario Wake-on-LAN usa paquetes broadcast.
La red bridge predeterminada de Docker no puede transmitir paquetes broadcast correctamente. Usar la red del anfitrión permite al contenedor:
Acceder a la red física directamente
Enviar paquetes WOL a la LAN local
Comportarse como un servicio nativo
Paso 6: Construir e iniciar el contenedor
Desde dentro del directorio wol-server, ejecuta:
docker compose up -d
Docker:
Construirá la imagen
Instalará las dependencias
Iniciará el servidor en segundo plano
Paso 7: Verificar que el servidor está en ejecución
Comprueba los contenedores en ejecución:
docker ps
Deberías ver una salida similar a:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4XXXXXX31ba4 wol-server-wol-server "python3 wol_server.py" 4 minutes ago Up 4 minutes wol-server-wol-server-1
Si el contenedor está en ejecución, el servidor está activo.
Cómo se usa el servidor El servidor escucha en:
http://<SERVER_IP>:5000/wake Espera una solicitud HTTP POST con datos JSON:
{
"mac": "AA:BB:CC:DD:EE:FF"
}
Paso 8: Habilitar WOL Remoto en Turn Off PC (aplicación móvil)
Abre Turn Off PC en tu teléfono
Ve a editar tu dispositivo
Habilita WOL Remoto
Introduce la IP de la Raspberry Pi en la IP del servidor externo
Guarda la configuración
Eso es todo. El Wake-on-LAN remoto está ahora habilitado.