Files

3.4 KiB
Raw Permalink Blame History

HTPC за TPLink WRT — WOL через роутер

Схема сети

Главная сеть: 192.168.1.0/24 (основной роутер)
    │
    ├─ TV (LG): 192.168.1.75
    ├─ TPLink WRT: 192.168.1.84 (WiFi-uplink, phy1-sta0)
    │       │
    │       └─ LAN (br-lan, 192.168.6.2/16)
    │               └─ HTPC: 192.168.1.86 (статический IP, физически на LAN порту TPLink)
    └─ ...

HTPC (192.168.1.86) подключён к LAN-порту TPLink, но имеет статический IP из основного диапазона 192.168.1.x.

Проблема WOL

TV шлёт Magic Packet на broadcast основной сети → TPLink получает его на WiFi-интерфейсе (phy1-sta0, «WAN» с точки зрения fw4). Стандартный broadcast из 192.168.1.x не проходит через NAT к HTPC в br-lan.

Решение: socat-прокси на TPLink перехватывает UDP:9 и пересылает напрямую на 192.168.1.86:9.

1. Socat (WOL-прокси)

Файл: /etc/init.d/socat

#!/bin/sh /etc/rc.common
START=99
STOP=10
SOCAT=/tmp/socat

start() {
    if [ ! -x "$SOCAT" ]; then
        wget -q -T 10 -O /tmp/socat.ipk \
          "https://downloads.openwrt.org/releases/23.05.5/packages/mipsel_24kc/packages/socat_1.7.4.4-1_mipsel_24kc.ipk"
        opkg install --dest ram /tmp/socat.ipk 2>/dev/null
        cp /tmp/usr/bin/socat "$SOCAT"
        chmod +x "$SOCAT"
    fi
    "$SOCAT" UDP-RECVFROM:9,broadcast,reuseaddr,fork UDP-SENDTO:192.168.1.86:9 &
}

stop() {
    pkill -f "socat.*UDP-RECVFROM:9" 2>/dev/null
}

Бинарник socat живёт в /tmp/ (tmpfs) и скачивается при каждой загрузке. Активировать: service socat enable && service socat start

2. Статический маршрут к HTPC

Файл: /etc/rc.local

ip route add 192.168.1.86 dev br-lan

Нужен потому что HTPC имеет IP из 192.168.1.x, но физически в br-lan (192.168.6.x subnet). Без маршрута TPLink отправит трафик на 192.168.1.86 через WiFi-uplink (phy1-sta0), а не через LAN-порт.

3. Firewall-правило (Allow-WOL)

uci add firewall rule
uci set firewall.@rule[-1].name="Allow-WOL"
uci set firewall.@rule[-1].src="wan"
uci set firewall.@rule[-1].proto="udp"
uci set firewall.@rule[-1].dest_port="9"
uci set firewall.@rule[-1].target="ACCEPT"
uci commit firewall
/etc/init.d/firewall reload

Правило разрешает UDP:9 с WAN (phy1-sta0) → socat может принять пакет. Хранится в /etc/config/firewall, переживает перезагрузки.

Диагностика

# Проверить что socat запущен
ps | grep socat

# Проверить маршрут
ip route | grep 192.168.1.86

# Проверить firewall правило
nft list chain inet fw4 input_wan | grep "dport 9"

Адреса

Устройство IP Интерфейс
TPLink WRT (WiFi) 192.168.1.84 phy1-sta0
TPLink WRT (LAN) 192.168.6.2 br-lan
HTPC 192.168.1.86 на LAN-порту TPLink
TV LG 192.168.1.75 основная сеть

SSH на роутер: ssh root@192.168.1.84