Установка сервера удалённого Wake-on-LAN (Docker + Python)
Это руководство объясняет, как установить и запустить сервер удалённого Wake-on-LAN (WOL), используемый Turn Off PC.
Этот сервер выступает в роли моста между VPN и локальной сетью, позволяя устройствам за пределами домашней сети будить компьютеры с помощью Wake-on-LAN.
Сервис реализован как HTTP-сервер на Python, работающий внутри контейнера Docker.
Что делает этот сервер
Сервер WOL:
- Работает непрерывно на системе Linux (рекомендуется: Raspberry Pi)
- Прослушивает HTTP-запросы на порту 5000
- Получает MAC-адрес через HTTP POST
- Отправляет магический пакет Wake-on-LAN внутри локальной сети
- Обеспечивает удалённый Wake-on-LAN при использовании вместе с VPN (например, Tailscale)
Предварительные требования
Перед установкой сервера удалённого Wake-on-LAN убедитесь, что следующие компоненты уже установлены и работают на хост-устройстве:
-
Raspberry Pi OS (или другой поддерживаемый дистрибутив Linux) → Установка Raspberry Pi OS
-
Docker (необходим для запуска контейнера сервера WOL) → Установка Docker на Linux
-
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 не может корректно отправлять широковещательные пакеты. Использование хостовой сети позволяет контейнеру:
Получить прямой доступ к физической сети
Отправлять WOL-пакеты в локальную LAN
Работать как нативный сервис
Шаг 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 Он ожидает HTTP POST запрос с JSON-данными:
{
"mac": "AA:BB:CC:DD:EE:FF"
}
Шаг 8: Включите удалённый WOL в Turn Off PC (мобильное приложение)
Откройте Turn Off PC на вашем телефоне
Перейдите к редактированию вашего устройства
Включите удалённый WOL
Введите IP Raspberry Pi в поле IP внешнего сервера
Сохраните конфигурацию
Всё готово. Удалённый Wake-on-LAN теперь включён.