面向 OpenWrt 的通用 DrCOM 客户端认证插件服务源码仓库,基于 dogcom C 实现,并集成 LuCI 控制面板。
这个仓库的目标不是只存一个现成 ipk,而是提供一套可以持续维护、自动构建、直接发布的 OpenWrt 包源码:
drcom_openwrt兼容二进制- LuCI 控制面板
- 默认配置模板
procd服务脚本- GitHub Actions 多架构自动构建与 Release 发布
- 基于 C 实现,适合路由器长期运行
- LuCI 控制面板,支持配置编辑、状态查看、日志查看、错误诊断
Save & Restart正常工作- 启动前自动检测并清理 UDP
61440端口占用 - 支持旧版 dogcom 风格配置语法
- 增加服务端强制下线冷却识别,避免把
0x15误判成单纯客户端版本错误
drcom/:OpenWrt 包源码目录。为了兼容当前仓库结构,源码目录仍保留drcom/这个名字;GitHub Release 产物与路由器安装后的包名为drcom_openwrtdrcom/src/:内置dogcomC 源码drcom/files/:安装到路由器上的配置、服务脚本、LuCI 页面scripts/generate-openwrt-sdk-matrix.py:从 OpenWrt 官方 release 自动发现 SDK,并按pkgarch去重scripts/build-openwrt-sdk-ipk.sh:使用官方 SDK toolchain 交叉编译,并按已验证的 legacytar.gz结构打包单个ipkscripts/build-legacy-ipk.py:构造 legacy OpenWrtipk外层./debian-binary/./data.tar.gz/./control.tar.gz.github/workflows/build-ipk.yml:GitHub Actions 自动构建与发布流程
在 GitHub Release 中下载对应架构的 ipk,上传到 OpenWrt / iStoreOS:
opkg install /tmp/drcom_openwrt_*.ipk --force-reinstall
chmod 600 /etc/drcom.conf
/etc/init.d/drcom_openwrt enable
/etc/init.d/drcom_openwrt restart安装后进入:
LuCI -> 服务 -> DrCOM
如果路由器上之前安装过旧包名 jludrcom,建议先执行:
opkg remove jludrcom如果之前安装过旧的 drcom 包,也建议先移除再装新的 drcom_openwrt 包,避免同一配置文件和服务路径的归属混在一起。
部分校园网接入场景要求先在 OpenWrt 接口页面里把 WAN 配置为静态地址,再启动 drcom 认证。
LuCI 路径:
网络 -> 接口 -> WAN -> 编辑 -> 协议: 静态地址
至少要保证以下几项填写正确:
IPv4 address:填写网络侧分配给你的固定地址,并与/etc/drcom.conf里的host_ip保持一致IPv4 netmask:填写网络侧对应掩码IPv4 gateway:填写网络侧网关Use custom DNS servers:填写网络侧要求的 DNS,例如10.10.10.10MAC:如果网络侧做了绑定,WAN 口 MAC 也要改成绑定后的地址
推荐顺序:
- 先把
WAN切换成静态地址 - 保存并应用接口配置
- 确认能够路由到认证服务器,例如:
ip route get 10.100.61.3- 再启动
drcom_openwrt
如果这里仍然提示 Network unreachable、到认证服务器没有路由 或 Challenge 一直重试,优先排查的不是账号密码,而是 WAN 的静态地址、网关、DNS 和 MAC 是否与网络侧登记信息一致。
这里有一个命名差异需要说明:
- GitHub Release 直接安装到路由器上的包名是
drcom_openwrt - 仓库里的 OpenWrt 源码目录和 feed 目标目前仍然叫
drcom
因此,下面这组 feed / SDK 源码树命令仍然使用 drcom,这是源码侧名字,不是路由器上最终安装后的包名。
echo 'src-git ymylive_drcom https://github.com/ymylive/drcom.git' >> feeds.conf.default
./scripts/feeds update ymylive_drcom
./scripts/feeds install -p ymylive_drcom drcom
make menuconfig然后在 Network 分类里选择源码包 drcom 进行编译;最终 Release 产物名仍会是 drcom_openwrt。
如果你在本地 OpenWrt 源码树里直接测试,也可以把源码目录 drcom/ 复制到 package/ 下:
make package/drcom/compile V=s配置文件路径:
/etc/drcom.conf
最小必填项:
serverusernamepasswordhost_ipmacAUTH_VERSIONKEEP_ALIVE_VERSION
推荐格式:
username='your_username'
password='your_password'
server='10.100.61.3'
PRIMARY_DNS='10.10.10.10'
SECONDARY_DNS='8.8.8.8'
host_name='OpenWrt'
host_os='Windows 10'
mac=0xB025AA851014
host_ip='172.18.0.100'
dhcp_server='0.0.0.0'
CONTROLCHECKSTATUS='\x20'
ADAPTERNUM='\x05'
IPDOG='\x01'
AUTH_VERSION='\x2c\x00'
KEEP_ALIVE_VERSION='\xdc\x02'
ror_version=False
keepalive1_mod=True如果你的物理 MAC 是:
B0:25:AA:85:10:14
推荐在配置里写:
0xB025AA851014
当前解析器也接受:
B0:25:AA:85:10:14
但不要写带空格、带连字符或普通整数格式。
对于需要 DrCOM 认证的校园网场景,优先按下面方式处理:
- 在 OpenWrt 接口页面把
WAN配置成静态地址 host_ip必须与WAN的静态地址一致- 网关 / DNS / MAC 必须与网络侧实际要求一致
- 然后再进行 DrCOM 认证
如果 Challenge 阶段一直重试但没有回应,优先检查 WAN 接入方式。
/etc/init.d/drcom_openwrt stop
killall drcom_openwrt 2>/dev/null
ss -lunp | grep ':61440'
/usr/bin/drcom_openwrt -m dhcp -c /etc/drcom.conf -e -l /tmp/drcom.log查看日志:
tail -f /tmp/drcom.log查看运行状态:
ps w | grep [d]rcom_openwrt
logread | grep -E 'drcom|dogcom|EAP'当前工作流不再使用 gh-action-sdk + make package/.../compile 路线,而是改为和本地已验证结果一致的手工打包路线:
verify:校验 Lua、内联 JS、配置解析器测试plan-matrix:从 OpenWrt 官方 release 页面自动发现 target / subtarget,并从packages/Packages.gz提取Architecture,按pkgarch去重build:对每个唯一pkgarch使用官方 SDK toolchain 交叉编译,并按已验证的 legacytar.gz兼容格式打包release:在标签构建时直接发布多个.ipk和.sha256
- 每个架构单独生成一个
ipk - 每个
ipk对应一个.sha256 - Release 直接上传这些文件
- 不会再额外打一个 zip / tar.gz 包
产物命名格式:
drcom_openwrt_<version>-<release>_<pkgarch>.ipkdrcom_openwrt_<version>-<release>_<pkgarch>.ipk.sha256
本地已经验证:
aarch64_generic(R2S /rockchip/armv8)
GitHub Actions 会从 OpenWrt 官方 24.10.5 release 自动发现并去重所有可用 pkgarch,因此最终 Release 会直接包含该版本官方 SDK 能构建出的多架构 ipk。
如果后续要切换 OpenWrt 版本,只需要改 .github/workflows/build-ipk.yml 里的 OPENWRT_RELEASE。
如果你已经有一个官方 SDK,也可以直接复用仓库脚本本地打包:
bash scripts/build-openwrt-sdk-ipk.sh \
--package-root ./drcom \
--release 24.10.5 \
--target rockchip \
--subtarget armv8 \
--sdk-root /path/to/openwrt-sdk-24.10.5-rockchip-armv8_gcc-13.3.0_musl.Linux-x86_64 \
--output-dir ./dist/aarch64_generic这个脚本当前输出的文件名为:
drcom_openwrt_<version>-<release>_<pkgarch>.ipkdrcom_openwrt_<version>-<release>_<pkgarch>.ipk.sha256
- C 客户端源码基于上游
dogcom - 仓库保留上游 AGPL 许可证文本
- OpenWrt / LuCI 适配和控制面板改造在本仓库继续维护