Skip to content

公网直达:用子域发布服务

本方案适合有可直达公网 IPv4 或 IPv6、拥有域名,并希望每个 Web 服务使用独立子域的环境。最终访问形式例如:

text
auth.example.com     登录入口
nas.example.com      飞牛或 NAS 服务
files.example.com    文件服务

它使用 子域模式(公网直达 + Host 路由),不是“内网穿透 / 子域映射”。没有公网入口时,请改看 无公网 IP:通过隧道发布子域

前置条件

  • fn-knock 网关端口可从公网到达;飞牛 FPK、Docker 和 OpenWrt 都可使用本方案。Docker 需要发布网关端口,并由路由器或前置代理把公网流量转到它;
  • 路由器、云安全组和宿主机没有单独暴露业务服务的原始公网端口;
  • 已准备 example.com,可修改 DNS;
  • 至少有一台可用的 TOTP 或账号密码恢复设备;
  • 有移动网络等真实外网用于验证。

配置步骤

  1. 系统设置 → 模式 选择 子域模式 并保存。
  2. 打开 子域映射,填写根域、认证 Host 和 Cookie 域。例如根域为 example.com,认证 Host 为 auth
  3. 新建认证服务映射,目标填 fn-knock 页面要求的认证上游;认证服务映射必须保持公开可达,不能对自身启用“要求登录”或上游 Basic Auth 注入。
  4. 新建第一个业务 Host,例如 files.example.com,目标填业务服务的内网 HTTP 地址,开启“要求登录”。
  5. 在 DNS 中让认证 Host 和业务 Host 指向同一公网入口。服务较多时可使用泛解析;同时确认路由器把网关端口转发到 fn-knock。
  6. SSL 证书 配置覆盖认证 Host 与业务 Host 的证书。
  7. 公网地址会变化时,配置 DDNS;静态公网地址可跳过。

验证

断开家庭 Wi-Fi,使用移动网络按以下顺序测试:

  1. 打开认证 Host,完成登录;
  2. 打开业务 Host,确认进入正确上游;
  3. 在请求日志中确认 Host、客户端 IP、认证状态和上游目标;
  4. 尝试访问业务服务的原始公网端口,确认它没有绕过网关。

局域网中出现免登录并不说明公网规则正常。fn-knock 会将私网和本地来源视为本地豁免。

常见问题

现象检查项
认证 Host 打不开DNS、网关端口、路由器转发、证书和认证服务映射
登录后业务 Host 仍拒绝映射访问策略、凭据服务范围、Cookie 域和真实客户端 IP
打开错误应用Host 名称、DNS 记录和上游目标
页面提示证书错误证书未覆盖该 Host,或 CDN / 回源使用了错误 TLS 名称

QQ群:1081609274