# openwrt-wol-forwarder **Repository Path**: phpdragon/openwrt-wol-forwarder ## Basic Information - **Project Name**: openwrt-wol-forwarder - **Description**: WOL Forwarder 是一个专为 OpenWrt/ImmortalWrt 路由器设计的 Wake-on-LAN 数据包转发器,支持跨子网唤醒功能。本仓库提供了完整的 OpenWrt feed 集成支持。 - **Primary Language**: C - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-07 - **Last Updated**: 2026-09-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # WOL Forwarder - OpenWrt Feed 仓库说明 ## 仓库概述 WOL Forwarder 是一个专为 OpenWrt/ImmortalWrt 路由器设计的 Wake-on-LAN 数据包转发器,支持跨子网唤醒功能。本仓库提供了完整的 OpenWrt feed 集成支持。 ## 仓库结构 ```text wol-forwarder/ ├── Makefile # OpenWrt 包构建文件 ├── README.md # 完整文档 ├── src/ │ ├── main.c # 主函数、主循环 │ ├── config.h # 常量、类型、全局变量声明 │ ├── logger.h # 日志声明 │ ├── logger.c # 日志实现 + log_level_names │ ├── signals.h # 信号声明 │ ├── signal.c # 信号实现 │ ├── console.h # 控制台输出声明 │ ├── console.c # 控制台输出实现 │ ├── whitelist.h # 白名单声明 │ ├── whitelist.c # 白名单实现 │ ├── network.h # 网络声明 │ ├── network.c # 网络实现 │ ├── packet.h # 包处理声明 │ ├── packet.c # 包处理实现 │ ├── utils.h # 辅助声明 │ ├── utils.c # 辅助实现 │ └── Makefile # 源码编译文件 ├── files/ │ ├── wol-forwarder.init # init 脚本 │ ├── wol-forwarder.conf # UCI 配置模板 │ ├── wol-forwarder.uci-defaults # 默认配置初始化 │ ├── wol-forwarder.uc # fw4 规则文件(OpenWrt 22.03+) │ └── firewall.wol-forwarder # fw3 规则文件(OpenWrt 21.02-) └── patches/ # 可选补丁目录 └── README.md ``` ## 特性 - Cross-subnet WOL: Forward WOL packets between different network interfaces/subnets - MAC Whitelist: Only forward packets for allowed MAC addresses - Rich Logging: Multi-level logging with color-coded output - Non-blocking I/O: Efficient polling-based packet processing - OpenWrt Integration: Full UCI configuration support and init.d script - Color Output: Beautiful terminal output with color-coded log levels - Statistics: Real-time packet statistics and success rate tracking ## 安装 ### Feed 添加方法 #### 方法一:使用 Git 源(推荐) ```bash # 添加到 feeds.conf.default echo "src-git wol-forwarder https://github.com/yourusername/wol-forwarder.git" >> feeds.conf.default # 更新并安装 feed ./scripts/feeds update wol-forwarder ./scripts/feeds install wol-forwarder ``` #### 方法二:使用本地路径 ```bash # 克隆到 package 目录 git clone https://github.com/yourusername/wol-forwarder.git package/wol-forwarder # 更新 feed(如果已存在) ./scripts/feeds update -a ./scripts/feeds install wol-forwarder ``` #### 方法三:使用压缩包 ```bash # 下载并解压到 package 目录 wget -O wol-forwarder.tar.gz https://github.com/yourusername/wol-forwarder/archive/main.tar.gz tar -xzf wol-forwarder.tar.gz -C package/ mv package/wol-forwarder-main package/wol-forwarder ``` ### 编译配置 #### 1.启用包 ```bash make menuconfig ``` 导航路径: ```text Network ---> Routing and Redirection ---> <*> wol-forwarder # 编译进固件 wol-forwarder # 编译为独立 IPK 包(推荐) ``` 或直接配置: ```bash # 启用包 echo "CONFIG_PACKAGE_wol-forwarder=y" >> .config # 或作为模块 echo "CONFIG_PACKAGE_wol-forwarder=m" >> .config ``` #### 2. 编译选项 在 make menuconfig 中,进入 wol-forwarder 包配置界面(按 / 搜索或进入 Network → Routing and Redirection → wol-forwarder) ```text <*> wol-forwarder. Wake-on-LAN packet forwarder [ ] Enable default MAC whitelist # 默认启用 MAC 白名单 (3) Default log level # 默认日志级别 (0-5) [*] Enable UCI configuration support # 启用 UCI 配置支持 ``` | 配置项 | 默认 | 说明 | | :- | :- | :- | | Enable default MAC whitelist | 关闭 |默认不启用 MAC 白名单,需要手动勾选才会默认开启 | | Default log level 设置默认日志级别 | 3 (INFO) | 设置默认日志级别:0=NONE, 1=ERROR, 2=WARN, 3=INFO, 4=DETAIL, 5=DEBUG | | Enable UCI configuration support | 开启 | 启用 UCI 配置文件支持,可从 /etc/config/wol-forwarder 读取配置。禁用则仅支持命令行参数 | #### 3.编译命令 ```bash # 仅编译该包 make package/wol-forwarder/compile V=s # 编译并生成 IPK make package/wol-forwarder/compile V=s # IPK 文件位置 # bin/packages//base/wol-forwarder_*.ipk # 完整构建 make package/wol-forwarder/{clean,compile,install} V=s ``` #### 4.清理 ```bash # 清理包构建产物 make package/wol-forwarder/clean # 删除构建目录 rm -rf build_dir/target-*/wol-forwarder-* ``` ## 安装与使用 #### IPK 安装 编译成功后,IPK 文件位于: ``` bin/packages//base/wol-forwarder_*.ipk ``` 在目标设备上安装: ``` opkg install /path/to/wol-forwarder_1.0.0-1_*.ipk # 或从本地仓库安装 opkg install wol-forwarder ``` #### 配置 UCI > 重要运行约束 - 程序不支持 SIGHUP 热重载,修改 UCI / 命令行配置必须重启进程。 - 运行需要 CAP_NET_RAW 权限(AF_PACKET 套接字);OpenWrt 下需要 root。 - 若开启 IP 白名单,`0.0.0.0/0`与`::/0`会放行全部 IP,启动会输出安全警告,谨慎使用。 ```bash # 编辑配置 uci set wol-forwarder.config.wan='wan' uci set wol-forwarder.config.lan='br-lan' uci set wol-forwarder.config.log_level='info' uci set wol-forwarder.config.mac_whitelist_enabled='1' uci set wol-forwarder.config.whitelist_macs='11:22:33:44:55:66 AA:BB:CC:DD:EE:FF' uci commit wol-forwarder # 重启服务 /etc/init.d/wol-forwarder restart ``` #### 服务管理 ```bash # 启动 /etc/init.d/wol-forwarder start # 停止 /etc/init.d/wol-forwarder stop # 重启 /etc/init.d/wol-forwarder restart # 查看状态 /etc/init.d/wol-forwarder status # 启用开机自启 /etc/init.d/wol-forwarder enable # 禁用开机自启 /etc/init.d/wol-forwarder disable ``` #### 查看日志 ```bash # 实时查看 logread -f | grep wol-forwarder # 查看历史 logread | grep wol-forwarder ``` ### 依赖关系 #### 运行时依赖 - libc: 标准 C 库 - kmod: 内核模块支持(自动) - kernel: Linux 内核(>= 2.2) #### 编译时依赖 - gcc: GNU C 编译器 - kernel-headers: Linux 内核头文件 - make: GNU Make #### 目标平台支持 - ✅ OpenWrt (所有版本) - ✅ ImmortalWrt - ✅ LEDE - ✅ 自定义 OpenWrt 分支 #### 支持的架构 - ARM: armv7, aarch64, cortex-a* - MIPS: mips32, mips64, mipsel - x86: i386, x86_64 - PowerPC: ppc, ppc64 - RISC-V: rv64gc ## 开发与调试 ### 本地测试 ```bash # 在目标设备上直接运行 /usr/sbin/wol-forwarder -w br-lan -l eth0 # 查看详细输出 /usr/sbin/wol-forwarder -w br-lan -l eth0 -d 2>&1 | tee /tmp/wol.log ``` ### 调试技巧 ```bash # 启用调试模式 uci set wol-forwarder.config.log_level='debug' uci commit wol-forwarder /etc/init.d/wol-forwarder restart # 使用 strace 跟踪 strace -f /usr/sbin/wol-forwarder -w br-lan -l eth0 # 使用 tcpdump 抓包验证 tcpdump -i br-lan -e -s 0 -X 'ether proto 0x0842' ``` ## 许可证 GPL-2.0 ## 联系方式 - 作者: phpdragon - 邮箱: phpdragon@qq.com - 项目主页: https://gitee.com/phpdragon/wol-forwarder - 问题反馈: https://gitee.com/phpdragon/wol-forwarder/issues ## 相关资源 - [OpenWrt 包开发文档](https://openwrt.org/docs/guide-developer/packages) - [UCI 配置系统](https://openwrt.org/docs/guide-user/base-system/uci) - [procd 进程管理](https://openwrt.org/docs/guide-developer/procd-init-scripts) - [Wake-on-LAN 协议](https://en.wikipedia.org/wiki/Wake-on-LAN)