Installazione del server Wake-on-LAN remoto (Docker + Python)
Questa guida spiega come installare ed eseguire il server Wake-on-LAN (WOL) remoto utilizzato da Turn Off PC.
Questo server agisce come un ponte tra la VPN e la rete locale, consentendo ai dispositivi al di fuori della rete domestica di risvegliare i computer utilizzando Wake-on-LAN.
Il servizio e' implementato come un server HTTP Python in esecuzione all'interno di un container Docker.
Cosa fa questo server
Il server WOL:
- Viene eseguito continuamente su un sistema Linux (consigliato: Raspberry Pi)
- Ascolta le richieste HTTP sulla porta 5000
- Riceve un indirizzo MAC tramite HTTP POST
- Invia un magic packet Wake-on-LAN all'interno della rete locale
- Abilita il Wake-on-LAN remoto quando utilizzato insieme a una VPN (es. Tailscale)
Prerequisiti
Prima di installare il server Wake-on-LAN remoto, assicurati che i seguenti componenti siano gia installati e funzionanti sul dispositivo host:
-
Raspberry Pi OS (o un'altra distribuzione Linux supportata) → Installazione di Raspberry Pi OS
-
Docker (necessario per eseguire il container del server WOL) → Installazione di Docker su Linux
-
Tailscale (necessario per l'accesso remoto tramite VPN) → Installazione di Tailscale
Il dispositivo host deve:
- Essere acceso in ogni momento
- Essere connesso alla rete locale
- Essere connesso alla VPN (Tailscale)
Struttura del progetto risultante
Dopo aver completato questa guida, la struttura delle directory sara:
wol-server/
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── wol_server.py
Passaggio 1: Creare la directory del progetto
Crea una directory per ospitare il server WOL e accedivi:
mkdir -p ~/wol-server
cd ~/wol-server
Passaggio 2: Creare lo script del server Python
Crea lo script Python principale:
nano wol_server.py
Incolla il seguente codice:
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)
Salva ed esci: Ctrl + O → Invio Ctrl + X
Passaggio 3: Creare il file delle dipendenze Python
Crea il file requirements.txt:
nano requirements.txt
Aggiungi la dipendenza necessaria:
Flask==2.3.3
Salva ed esci: Ctrl + O → Invio Ctrl + X
Passaggio 4: Creare il Dockerfile
Crea il Dockerfile:
nano Dockerfile
Incolla il seguente contenuto:
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"]
Salva ed esci: Ctrl + O → Invio Ctrl + X
Passaggio 5: Creare il file Docker Compose
L'uso di Docker Compose semplifica la gestione e garantisce che il container si riavvii automaticamente.
Crea il file:
nano docker-compose.yml
Incolla la seguente configurazione:
version: "3"
services:
wol-server:
build: .
network_mode: "host" # Usa la rete dell'host (necessario per il broadcast)
cap_add:
- NET_ADMIN # Consente l'invio di pacchetti broadcast
restart: unless-stopped
Salva ed esci: Ctrl + O → Invio Ctrl + X
Perche' network_mode: host e' necessario Wake-on-LAN utilizza pacchetti broadcast.
La rete bridge predefinita di Docker non puo trasmettere correttamente i pacchetti broadcast. L'uso della rete host consente al container di:
Accedere direttamente alla rete fisica
Inviare pacchetti WOL alla LAN locale
Comportarsi come un servizio nativo
Passaggio 6: Compilare e avviare il container
Dall'interno della directory wol-server, esegui:
docker compose up -d
Docker:
Compilera l'immagine
Installera le dipendenze
Avviera il server in background
Passaggio 7: Verificare che il server sia in esecuzione
Controlla i container in esecuzione:
docker ps
Dovresti vedere un output simile 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
Se il container e' in esecuzione, il server e' attivo.
Come viene utilizzato il server Il server ascolta su:
http://<SERVER_IP>:5000/wake Si aspetta una richiesta HTTP POST con dati JSON:
{
"mac": "AA:BB:CC:DD:EE:FF"
}
Passaggio 8: Abilitare il WOL remoto in Turn Off PC (app mobile)
Apri Turn Off PC sul tuo telefono
Vai a modificare il tuo dispositivo
Abilita il WOL remoto
Inserisci l'IP del Raspberry nel campo IP del server esterno
Salva la configurazione
Questo e' tutto. Il Wake-on-LAN remoto e' ora abilitato.