端口与入口
fn-knock 有两个面向用户的入口:管理入口用于修改配置,网关入口承接业务访问。飞牛原生 FPK 从桌面图标进入管理页;Docker、OpenWrt 和 Linux 的管理面板默认使用 7991。群晖 DSM 7 SPK 只能从 DSM 桌面的套件入口进入;macOS 和 Windows 的管理页固定为本机 127.0.0.1:7991,不能当作局域网或公网管理入口。网关通常使用 7999。
7998、7997 和 7996 是组件之间的内部端口,不应直接暴露到公网。
默认端口
| 端口 | 角色 | 默认用途 |
|---|---|---|
7991 | 管理面板 | Docker、OpenWrt 和 Linux 的默认管理入口;macOS 与 Windows 仅限本机回环访问 |
7998 | 管理后端 | 飞牛原生 FPK 的桌面 CGI 代理到这里;Docker 也在内部使用它 |
7997 | 认证服务 | 处理登录、退出、Passkey 和人机验证 |
7996 | 网关管理端口 | 管理后端与 Go 网关之间的内部通信 |
7999 | 网关入口 | 接收 Web 业务流量并执行认证与路由 |
端口可以在安装时修改。排错时以实际部署配置和后台显示的访问入口为准,不要假定所有安装都使用默认值。
完整的标准 FPK 中,桌面管理页及 Web 终端请求由 index.cgi 转发到 127.0.0.1 上的 Rust 管理入口(默认使用 7998)。这条链路不经过 fnOS 统一网关,也不经过 Go 网关、gRPC 或 WebSocket;终端交互复用管理入口的 HTTP 长轮询。
不同部署的对外端口
| 部署方式 | 管理入口 | 网关入口 | 说明 |
|---|---|---|---|
| 飞牛原生 FPK | 飞牛桌面图标 | 7999 | 桌面 CGI 代理到本机 7998,不要把 7991 当作 FPK 管理入口 |
| Docker Compose | 7991 | 7999 | 默认只发布这两个端口 |
| OpenWrt | 7991 | 7999 | 内部管理后端默认改用 17998 |
| Linux(systemd / OpenRC) | 7991 | 7999 | 安装和 sudo knock config 可修改端口;7998、7997、7996 仅本机监听 |
| macOS 13+ | 本机 127.0.0.1:7991 | 7999 | Intel / Apple Silicon 原生包;内部端口仅本机监听,不修改 macOS 防火墙 |
| 群晖 DSM 7 SPK | DSM 桌面套件入口 | 7999 | 不开放 7991;DSM CGI 代理内部管理服务,7998、7997、7996 仅本机监听 |
| Windows x86_64 | 管理程序打开 127.0.0.1:7991 | 7999,默认监听 0.0.0.0 与 :: | 管理后台强制本机访问;安装器仅添加“域/专用”网络配置文件的静态程序规则 |
Docker 的容器端口与宿主机发布端口由部署文件共同决定。完整配置见 Docker 部署。
请求进入网关后会发生什么
网关入口只解决“流量从哪里进入”。进入后还要依次确定路由和访问策略:
- 网络拓扑:公网或局域网直达网关,或者由 FRP、Cloudflared 等隧道转入网关。
- 路由:Web 服务优先按请求
Host分发,例如nas.example.com;路径映射只用于兼容依赖/alist这类旧入口的服务。 - 访问策略:当前 Host 编辑页通过
要求登录在公开访问和登录优先之间切换;已有严格白名单规则仍按来源 IP 执行。
TCP / UDP 协议映射会额外监听各自的对外端口,不经过 7999 的 HTTP Host 路由。直连模式则把网关作为登录入口,登录后再按来源 IP 放行原始端口。
local_exempt:局域网测试不代表公网已受保护
认证服务把网关识别到的回环、私网、链路本地等来源归为 local_exempt。这类请求会被视为本地网络访问,跳过常规登录和白名单检查;严格白名单也不会把它当作公网来源拦截。
因此:
- 在同一局域网打开服务,不能验证公网登录策略是否生效。
- 经反向代理或隧道接入时,应在请求日志中确认网关识别到的是真实公网客户端 IP,而不是代理节点的私网 IP。
- 公网验证应使用移动网络等真实外部链路。
local_exempt 是来源网络例外,不是浏览器登录会话。退出登录不会改变该网络的本地例外属性。
平台能力边界
- Docker 可以运行 Host / 路径网关,但不会替宿主机写防火墙规则,也不支持直连模式和智能连接。
- 飞牛原生 FPK 可以管理宿主机防火墙,并提供直连模式和智能连接。
- OpenWrt 可运行 Host / 路径网关、协议映射和内置隧道,但 fn-knock 不管理 OpenWrt 防火墙,也不提供直连模式或智能连接;端口放行与局域网 DNS 分流应在 OpenWrt 中自行配置。它同样不提供 SSH 安全或应用内 FPK 更新。
- 群晖 DSM 7 SPK 的
7999作为公开网关端口注册到 DSM 防火墙界面,但套件不能自行修改宿主机防火墙;它不支持直连模式、智能连接或 SSH 安全。 - macOS 的管理面板强制本机访问,
7999可作为业务入口;它不调用iptables、不管理 macOS 防火墙,也不支持直连、智能连接或 SSH 安全。协议映射所需端口必须由管理员手动放行。 - Windows 的
7999默认监听全部接口;安装器的FnKnock Gateway静态程序规则仅作用于“域/专用”网络配置文件。它仍不支持直连模式、应用内宿主机防火墙管理、智能连接、内置隧道或 SSH 安全。公网访问前必须检查路由器/NAT、IPv6、运营商和第三方安全软件。
远程 SSH Web 终端在各发行平台都可使用。完整的标准 FPK、Linux、macOS 与 OpenWrt 还支持默认关闭的本机 PTY;Lite、Docker、群晖、Windows 与开发环境仅提供远程 SSH。本机 PTY 不新增对外端口,也不通过 localhost SSH,而是由 Rust 管理服务以 fn-knock 服务的有效 UID / GID 直接启动;启用前应核对执行身份、Shell 与初始目录并完成风险确认。会话生命周期和权限边界见 Web 终端。
对 Host 或路径路由,fn-knock 只能保护真正经过网关的请求。若上游服务仍监听公网或局域网可达地址,用户仍可能绕过网关直连它。直连授权是例外:它依赖支持的宿主机防火墙,仅在登录后的来源 IP 获授权时临时放行原始端口;不要另行添加宽泛的公网放行规则。
按链路排错
飞牛原生 FPK 管理页打不开时,先检查桌面图标、应用进程和 7998 后端;Docker 或 OpenWrt 再检查 7991、绑定地址和端口发布;macOS 使用 sudo knock status 和 sudo knock logs,并确认从本机访问 127.0.0.1。业务域名打不开时,按以下顺序检查:
- 外部流量是否到达实际网关端口(通常为
7999)。 - 请求
Host或兼容路径是否命中映射。 - 映射目标能否从
fn-knock所在环境访问。 - 请求日志中的客户端 IP、授权类型和上游目标是否符合预期。
