远程 Wake-on-LAN 服务器安装(Docker + Python)
本指南说明如何安装和运行 Turn Off PC 使用的远程 Wake-on-LAN (WOL) 服务器。
此服务器充当 VPN 和本地网络之间的桥梁,允许家庭网络外部的设备使用 Wake-on-LAN 唤醒电脑。
该服务以运行在 Docker 容器中的 Python HTTP 服务器实现。
此服务器的功能
WOL 服务器:
- 在 Linux 系统上持续运行(推荐:Raspberry Pi)
- 在端口 5000 上监听 HTTP 请求
- 通过 HTTP POST 接收 MAC 地址
- 在本地网络内发送 Wake-on-LAN 魔术数据包
- 与 VPN(例如 Tailscale)配合使用时启用远程 Wake-on-LAN
前提条件
在安装远程 Wake-on-LAN 服务器之前,请确保以下组件已在主机设备上安装并正常工作:
-
Raspberry Pi OS(或其他支持的 Linux 发行版) → Raspberry Pi OS 安装
-
Docker(运行 WOL 服务器容器所必需) → 在 Linux 上安装 Docker
-
Tailscale(通过 VPN 远程访问所必需) → Tailscale 安装
主机设备必须:
- 始终保持开机
- 连接到本地网络
- 连接到 VPN(Tailscale)
最终项目结构
完成本指南后,目录结构将为:
wol-server/
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── wol_server.py
步骤 1:创建项目目录
创建用于托管 WOL 服务器的目录并进入:
mkdir -p ~/wol-server
cd ~/wol-server
步骤 2:创建 Python 服务器脚本
创建主 Python 脚本:
nano wol_server.py
粘贴以下代码:
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)
保存并退出: Ctrl + O → Enter Ctrl + X
步骤 3:创建 Python 依赖文件
创建 requirements.txt 文件:
nano requirements.txt
添加所需的依赖:
Flask==2.3.3
保存并退出: Ctrl + O → Enter Ctrl + X
步骤 4:创建 Dockerfile
创建 Dockerfile:
nano Dockerfile
粘贴以下内容:
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"]
保存并退出: Ctrl + O → Enter Ctrl + X
步骤 5:创建 Docker Compose 文件
使用 Docker Compose 简化管理并确保容器自动重启。
创建文件:
nano docker-compose.yml
粘贴以下配置:
version: "3"
services:
wol-server:
build: .
network_mode: "host" # 使用主机网络(广播所必需)
cap_add:
- NET_ADMIN # 允许发送广播数据包
restart: unless-stopped
保存并退出: Ctrl + O → Enter Ctrl + X
为什么需要 network_mode: host Wake-on-LAN 使用广播数据包。
Docker 的默认桥接网络无法正确广播数据包。 使用主机网络允许容器:
直接访问物理网络
向本地 LAN 发送 WOL 数据包
像原生服务一样运行
步骤 6:构建并启动容器
在 wol-server 目录内运行:
docker compose up -d
Docker 将:
构建镜像
安装依赖
在后台启动服务器
步骤 7:验证服务器正在运行
检查正在运行的容器:
docker ps
您应该看到类似以下的输出:
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
如果容器正在运行,服务器处于活动状态。
服务器的使用方式 服务器监听:
http://<SERVER_IP>:5000/wake 它期望收到包含 JSON 数据的 HTTP POST 请求:
{
"mac": "AA:BB:CC:DD:EE:FF"
}
步骤 8:在 Turn Off PC(手机应用)中启用远程 WOL
在手机上打开 Turn Off PC
进入编辑您的设备
启用远程 WOL
在外部服务器 IP 中输入 Raspberry Pi 的 IP
保存配置
完成。远程 Wake-on-LAN 现已启用。