跳到正文

OpenWrt 部署 ​

fn-knock 的 OpenWrt 包包含 LuCI 配置页、管理后台、认证页、Rust 后端和 Go 网关。安装后从 服务 → 敲门 Knock 管理服务;管理后台默认使用 7991,网关入口默认使用 7999。

先区分固件的软件包格式和架构。格式错了会无法由包管理器安装,架构错了即使 CPU 看起来相近也不能运行。

选择正确的软件包 ​

格式取决于固件 ​

固件的包管理器软件包格式安装命令
opkg.ipkopkg install /tmp/<文件名>.ipk
apk.apkapk add --allow-untrusted /tmp/<文件名>.apk

以路由器实际安装的包管理器为准选择软件包;衍生固件可能不同,请先确认:

bash
ubus call system board
if command -v opkg >/dev/null 2>&1; then
  opkg print-architecture
else
  apk --print-arch
fi

按固件架构直接下载 ​

以上方命令输出的目标架构为准,再从下表直接下载对应格式的软件包。这里的链接与官网使用同一套稳定下载入口,已包含软件包格式和架构,不需要手动修改 URL。

目标架构常见设备APKIPK
x86_64Intel / AMD 64 位软路由、虚拟机下载 APK下载 IPK
aarch64_cortex-a53IPQ60xx、Cortex-A53、ImmortalWrt qualcommax/ipq60xx下载 APK下载 IPK
aarch64_genericGeneric ARM64 路由器和开发板下载 APK下载 IPK
arm_cortex-a7_neon-vfpv4使用对应目标的 32 位 ARMv7 设备下载 APK下载 IPK
arm_cortex-a5_vfpv4Cortex-A5 / VFPv4 路由器下载 APK下载 IPK

发布包文件名的末尾是 OpenWrt 目标架构,例如:

text
fn-knock_<version>-<release>_x86_64.ipk
fn-knock_<version>-r<release>_aarch64_cortex-a53.apk

以 opkg print-architecture 或 apk --print-arch 输出的目标名为准,尤其不要把 aarch64_generic 与 aarch64_cortex-a53 混用。当前没有对应包的 MIPS、ARMv6 或其他目标不能强行安装。

下载主包 fn-knock,不要把应用商店元数据包当作运行包。

安装 ​

把匹配的包上传到路由器 /tmp 后,按固件类型执行一条命令:

bash
# opkg 固件
opkg install /tmp/fn-knock_*.ipk

# apk 固件
apk add --allow-untrusted /tmp/fn-knock_*.apk

这些通配符命令假定 /tmp 中只有一个待安装的 fn-knock 主包;保留了多个版本时改用完整文件名。

apk --allow-untrusted 只适用于从可信发布页取得、并已核对来源或校验值的本地安装包;它会绕过包仓库签名校验,不能用于来路不明的文件。离线安装前也要确认固件的软件源能够满足依赖项。

安装脚本会启用并启动服务,同时刷新 LuCI 菜单缓存。也可以通过 LuCI 的软件包上传入口安装本地包;命令行路径更容易确认实际使用的格式和架构。

首次进入与端口 ​

打开 服务 → 敲门 Knock,确认服务状态为“运行中”,再点击“打开管理后台”。默认地址为:

text
http://<OpenWrt 局域网地址>:7991/

首次进入需要设置管理面板密码。它只保护 OpenWrt 上的管理入口,不等同于用户访问业务服务时使用的 TOTP、账号密码或 Passkey。

端口监听范围用途
7991可配置,默认管理入口管理后台
7999网关监听端口对外访问映射服务的入口
17998127.0.0.1Rust 管理后端内部 API
7997127.0.0.1认证服务
7996127.0.0.1网关内部 gRPC

LuCI 页面可以修改这些端口、数据目录和网关配置目录。提交配置后,procd 会重载服务。端口值必须彼此不同。

不要给 WAN 转发或放行管理端口。需要公网访问时,只开放当前配置的网关端口,并先完成模式、证书和访问策略配置。fn-knock 不会自动创建或维护 OpenWrt WAN 入站规则。

手动开放网关端口 ​

确需公网直达时,在 LuCI 的 服务 → 敲门 Knock 中先保存并应用网关端口,再选择 防火墙来源区域,点击 放行防火墙。默认沿用已有规则的来源区域,否则选择 wan;没有 wan 时需手动选择。使用 VPN、Cloudflare Tunnel 或上级入口时,可能不需要直接放行 WAN。

按钮只放行所选区域到路由器自身的网关 TCP 端口,同时适用于 IPv4 / IPv6;不开放管理或内部端口,也不创建上级路由器的端口转发。更改端口或区域后需再次点击,重复操作更新同一条 Allow-FnKnock-Gateway 规则。

安装、升级、服务启停、保存配置和卸载都不会自动增删此规则。规则会在重启后保留;撤销时在 LuCI 原生防火墙页面删除该规则并应用。出现配置冲突或未提交的防火墙修改时先处理提示;若规则已保存但重载失败,可再次点击重试。页面状态只反映已保存配置,仍需从移动网络验证域名、证书和鉴权。

服务和日志检查:

bash
/etc/init.d/fn-knock status
logread -e fn-knock

管理后台可访问仅说明本机服务已启动。配置映射后,用移动网络等真实外部链路验证 7999 和域名,避免把 LAN 结果当作公网认证结果。

数据与升级 ​

运行配置和数据默认位于:

text
/etc/config/fn-knock
/etc/fn-knock/gateway
/etc/fn-knock/data

/etc/config/fn-knock 保存 UCI 端口与目录配置,/etc/fn-knock/gateway 保存网关运行配置,/etc/fn-knock/data 保存 SQLite、认证密钥及其他持久化数据。升级前将这三处纳入备份;它们含有敏感信息,不应上传到公开位置。

从旧版本升级且 UCI 仍使用默认 /var/lib/fn-knock 时,安装脚本会先停止服务,把旧数据复制到 /etc/fn-knock/data,再更新 fn-knock.main.data_dir。自定义过数据目录的实例不会被强制迁移。升级后先确认 LuCI 中的数据目录、管理登录和原有配置正常,再处理遗留的旧目录;不要在验证前手工删除它。

同时从维护页导出 .knock 应用备份。目录备份用于保留 SQLite 和平台运行数据,.knock 用于迁移可恢复配置;内容范围、版本限制和恢复验收见备份、恢复与数据清理。

OpenWrt 不支持管理后台内安装 FPK 更新。从上方直接下载表取得同一格式、同一固件架构的新包后执行:

bash
# opkg 固件:安装新版本或显式重装同版本
opkg install --force-reinstall /tmp/fn-knock_*.ipk

# apk 固件
apk add --allow-untrusted /tmp/fn-knock_*.apk

/etc/init.d/fn-knock status

若 /tmp 中保留了多个版本,使用完整文件名代替通配符,避免一次传给包管理器多个包。

升级不会主动清空上述运行目录。若包管理器询问如何处理已修改的 /etc/config/fn-knock,保留现有配置,除非本次升级明确需要恢复默认配置。

忘记 OpenWrt 管理面板密码时,通过 SSH 执行:

bash
fn-knock-reset-panel-password

随后回到 LuCI 的管理后台入口按提示设置新密码。

OpenWrt 版能力限制 ​

能力OpenWrt 软件包中的状态
应用内 FPK 更新不支持;使用 opkg 或 apk 安装匹配的新包
直连模式、宿主机防火墙管理不支持;LuCI 可手动放行网关 TCP 入口,其他入站规则由 OpenWrt 防火墙、VPN 或上级网关管理
智能连接不支持;需要分流时在 OpenWrt 的 dnsmasq、DHCP 或其他本地 DNS 中自行配置
SSH 安全不支持;使用 OpenWrt 自身的 SSH 日志、防火墙或安全插件
Web 终端支持远程 SSH,以及默认关闭的 OpenWrt 本机 PTY
自动 HTTPS当前 OpenWrt 软件包不支持

本机 PTY 直接继承 fn-knock 服务的有效 UID / GID,不会降权、切换用户或通过 localhost SSH 建连。启用前必须核对页面显示的执行身份、Shell 与初始目录并完成风险确认。关闭浏览器只会断开页面连接,服务仍在运行时会话会继续;服务重启、Shell 退出、主动结束会话或禁用本机终端会终止会话。完整说明见 Web 终端。

fn-knock 不能替代 OpenWrt 固件更新、路由器备份和防火墙最小暴露原则。

继续阅读:

QQ群:1081609274