Skip to content

公网直达:子域路由

适用于设备有公网 IPv4、可用 IPv6,或已经通过边缘平台回源的环境。fn-knock 根据访问域名转发请求,访客先经过统一登录,再进入对应服务。

  • 网络拓扑:公网直达
  • 路由方式:按 Host 区分服务
  • 建议策略:登录优先
  • 后台位置:系统设置 → 模式 → 子域模式

开始前

需要准备:

  • 一个可管理 DNS 的域名,例如 example.com
  • 公网入口能够到达 fn-knock 网关。飞牛原生 FPK、Docker Compose 和 OpenWrt 默认使用 7999;飞牛 Docker FPK 向导默认使用 8999。以下将它统称为“实际网关端口”。
  • 至少一种可用的登录方式:TOTP、密码、Passkey 或已配置的 OIDC。
  • fn-knock 所在设备能够访问业务服务。

没有公网入口时,改用内网穿透:子域路由。需要保护 SSH、远程桌面等原始 TCP/UDP 端口时,参见原始端口访问:直连授权

部署边界

部署方式可用性注意事项
飞牛 fnOS FPK完整支持可使用自动 HTTPS、主机防火墙和智能连接
Docker Compose / Docker FPK支持子域路由不管理宿主机防火墙;不提供智能连接和自动 HTTPS
OpenWrt 插件支持子域路由可配合宿主机防火墙;不提供自动 HTTPS,局域网分流 DNS 需自行配置
Windows x86_64不作为公网直达入口新安装的网关仅回环监听,管理程序没有受支持的公开监听范围设置

Docker 中的 127.0.0.1 指容器自身。业务服务在宿主机或其他设备时,应填写容器可访问的地址。

1. 配置公网入口和 DNS

将认证域名和业务域名解析到公网入口。例如:

域名用途解析目标
auth.example.com统一登录192.0.2.10
nas.example.comNAS 服务192.0.2.10

也可以使用 *.example.com 的通配解析。

路由器应把公网端口转发到 fn-knock 网关:

  • 公网 443 → 实际网关端口:访问时通常不需要写端口。
  • 公网自定义端口 → 实际网关端口:访问地址需要保留该公网端口。

管理入口只用于配置 fn-knock,不应作为公网回源目标。各部署方式的端口见端口与入口

2. 切换为子域模式

进入 系统设置 → 模式,选择 子域模式 并保存。

保存后,侧边栏应出现 子域映射。如果此前使用内网穿透,切换模式会停止相关隧道;路径映射也可能被清理,切换前应备份现有配置。

Docker 部署不会自动修改宿主机防火墙,需要自行只开放计划中的公网端口。

3. 设置根域名

进入 子域映射,展开 子域模式配置,填写:

  • 域名example.com
  • 鉴权服务所使用的端口:填写访客实际访问的公网端口。例如公网 443 转发到实际网关端口时填写 443
  • 边缘网络真实 IP 识别:仅在使用 EdgeOne 或 ESA 时按对应平台开启

根域名决定子域映射的完整访问地址。修改后检查已有鉴权服务和业务映射是否仍然匹配。

4. 添加鉴权服务

子域映射 中点击 添加鉴权服务,添加 auth.example.com。保存后,它会显示在 子域模式配置 → 当前鉴权服务

鉴权服务必须满足:

  • 只有一个当前生效的认证入口。
  • 允许公开访问,否则访客无法进入登录页。
  • 历史映射若仍带有严格白名单规则,不能直接作为鉴权服务;记录原配置后重新创建鉴权服务。
  • DNS 和公网端口已经能到达 fn-knock 网关。

先使用手机蜂窝网络打开认证地址,确认能看到登录页,再继续添加业务服务。

5. 添加业务映射

进入 子域映射,新增服务。例如:

配置项示例
子域nas
目标http://192.168.1.20:5666
要求登录开启
Host 响应默认保留访客访问的 Host;只有上游只接受自身地址 / Host 时才关闭

保存后,业务入口为 https://nas.example.com,或带有实际公网端口的对应地址。

上游连接使用 Basic Auth 时,在映射的高级配置中启用 Basic Auth 跳过 并填写上游凭据。它只影响 fn-knock 到上游的请求,不是访客登录方式。

Host 响应也适用于 内网穿透 → 子域映射。除非上游明确拒绝外部 Host,否则保持默认的“保留 Host”,避免应用生成错误的回调地址或跳转。

Host 响应在运行时按上游 Target 生效。多个 Host 复用同一个 Target 时,它们会共用这一设置;需要不同响应策略时,为它们使用不同 Target。

6. 设置访问策略

编辑 Host 映射时,当前界面提供 要求登录 开关:

设置行为
关闭 要求登录(当前登录优先映射)公开访问,不检查 fn-knock 登录和白名单
开启 要求登录手动来源授权可独立放行;自动 IP 授权通常允许同一来源继续访问,但不覆盖已携带的服务范围拒绝;没有可用来源授权时再检查会话
历史严格白名单规则即使关闭 要求登录 也不一定公开;只按有效来源授权记录判断(手动或登录后自动创建),会话 Cookie 本身不能替代来源条件

新建个人服务通常开启 要求登录。当前界面不提供严格白名单选择;升级后若已有这种规则,应同时检查手动与自动 IP 授权记录。若要退出历史严格规则,先记录完整映射后按当前界面重新创建;只关闭 要求登录 不足以让它变为公开。若严格规则只允许手动来源,关闭登录后自动 IP 授权并清理遗留自动记录。

7. 配置 HTTPS

*.example.com 配置通配证书,并将证书关联到对应域名。通配证书通常不覆盖根域名 example.com;如果根域名也提供服务,需要把它加入证书 SAN。

飞牛 fnOS FPK 可以使用自动 HTTPS。Docker 和 OpenWrt 需要自行准备证书或在前置代理、边缘平台终止 TLS。具体配置见 SSL 证书

8. 公网地址变化时配置 DDNS

动态公网地址应使用 DDNS 更新 DNS。只为实际可从公网到达的地址族创建记录;无可用 IPv6 入站时,不要发布 AAAA 记录。

9. 从外网验证

关闭手机 Wi-Fi,按以下顺序测试:

  1. 打开认证地址,确认登录页可达。
  2. 打开业务地址,确认未登录时进入认证流程。
  3. 完成登录,确认返回原业务地址。
  4. 请求日志 中确认命中的域名、上游地址和响应状态。

内网测试成功不能代替外网测试。家庭网络的 NAT 回环、分流 DNS 和缓存可能掩盖配置错误。

常见故障

症状优先检查
域名超时DNS、公网地址、端口转发、运营商入站限制
打开后进入管理页公网回源端口错误;应指向网关,不是管理入口
登录后循环跳转认证域名、根域名、Cookie 作用域、公开协议及前置代理的 Host / X-Forwarded-* 是否一致;从原业务 Host 重新发起访问
返回 502fn-knock 无法访问上游,或上游协议、端口填写错误
子域进入错误服务Host 未被保留,或前置代理覆盖了 Host
HTTPS 证书错误证书未覆盖该子域,或证书未关联到正确域名

完整排查入口见 FAQ

相关文档

QQ群:1081609274