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:


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:

El dispositivo anfitrión debe:


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.