公网直达:用子域发布服务
本方案适合有可直达公网 IPv4 或 IPv6、拥有域名,并希望每个 Web 服务使用独立子域的环境。最终访问形式例如:
text
auth.example.com 登录入口
nas.example.com 飞牛或 NAS 服务
files.example.com 文件服务它使用 子域模式(公网直达 + Host 路由),不是“内网穿透 / 子域映射”。没有公网入口时,请改看 无公网 IP:通过隧道发布子域。
前置条件
- fn-knock 网关端口可从公网到达;飞牛 FPK、Docker、OpenWrt、Linux、群晖 DSM 7 SPK 和 Windows 都可使用本方案。Docker 需要发布网关端口;群晖与 Windows 还需分别确认 DSM / Windows 防火墙、路由器或前置代理已把公网流量送到网关;
- 路由器、云安全组和宿主机没有单独暴露业务服务的原始公网端口;
- 已准备
example.com,可修改 DNS; - 至少有一台可用的 TOTP 或账号密码恢复设备;
- 有移动网络等真实外网用于验证。
配置步骤
- 在
系统设置 → 模式选择子域模式并保存。 - 打开
子域映射,填写根域和鉴权服务使用的实际公网端口。例如根域为example.com、认证 Host 为auth.example.com,公网443转发到内部网关7999时,公开端口填写443。 - 新建认证服务映射。认证服务必须保持公开可达,不能对自身启用“要求登录”、历史严格白名单或上游 Basic Auth 注入。
- 新建第一个业务 Host,例如
files.example.com,目标填业务服务的内网 HTTP 地址,开启“要求登录”。 - 在 DNS 中让认证 Host 和业务 Host 指向同一公网入口。服务较多时可使用泛解析;同时确认路由器把网关端口转发到 fn-knock。
- 在
SSL 证书配置覆盖认证 Host 与业务 Host 的证书。 - 公网地址会变化时,配置 DDNS;静态公网地址可跳过。
DNS 与端口示例
text
auth.example.com A/AAAA -> 公网入口
files.example.com A/AAAA -> 公网入口
公网 443/TCP -> fn-knock 7999/TCP此时浏览器访问 https://files.example.com,根域配置中的鉴权服务端口填写 443。若对外使用 https://files.example.com:8443,则应让公网 8443 转发到实际网关端口,并在相关公开端口配置中填写 8443。
同时发布 A 和 AAAA 前,应分别确认 IPv4、IPv6 都能到达网关。若 AAAA 指向不可达地址,支持 IPv6 的客户端可能优先走失败链路;没有稳定 IPv6 入站时只发布 A。
业务映射字段
| 字段 | 建议 |
|---|---|
| Host | 填完整域名或按页面从根域组合,不能带路径 |
| Target | 使用 fn-knock 运行环境可达的 http:// 或 https:// 地址 |
| 要求登录 | 私有服务开启;认证服务必须关闭 |
| Host 响应 | 默认保留访客 Host;上游只接受自身 Host 时再关闭 |
| Basic Auth 跳过 | 仅用于注入上游自己的 Basic Auth,不能替代 fn-knock 登录 |
| WAF | 依据应用兼容性逐个 Host 启用或绕过 |
Docker 中的 127.0.0.1 只表示容器本身;宿主机或其他容器上的服务必须使用容器可达地址。多个 Host 复用同一个 Target 时会共用 Host 响应设置;需要不同策略时使用不同 Target。
验证
断开家庭 Wi-Fi,使用移动网络按以下顺序测试:
- 打开认证 Host,完成登录;
- 打开业务 Host,确认进入正确上游;
- 在请求日志中确认 Host、客户端 IP、认证状态和上游目标;
- 尝试访问业务服务的原始公网端口,确认它没有绕过网关。
局域网中出现免登录并不说明公网规则正常。fn-knock 会将私网和本地来源视为本地豁免。
再执行以下异常测试:
- 访问一个未配置的 Host,应得到网关默认响应,而不是误入其他服务;
- 使用未覆盖的凭据访问受服务范围限制的 Host,应被拒绝;
- 退出登录后重新打开业务 Host,应再次进入认证流程,除非当前来源仍有有效 IP 授权;
- WebSocket、上传、下载和应用回调应保持正常。
回退
批量迁移前先只接入一个业务 Host。需要回退时,恢复原 DNS 和端口转发,再删除或停用新映射;证书与 DDNS 任务确认不再被其他 Host 使用后再清理。不要先删除唯一认证 Host,否则所有需要登录的业务 Host 都会失去正常入口。
常见问题
| 现象 | 检查项 |
|---|---|
| 认证 Host 打不开 | DNS、网关端口、路由器转发、证书和认证服务映射 |
| 登录后业务 Host 仍拒绝 | 映射访问策略、凭据服务范围、Cookie 域和真实客户端 IP |
| 打开错误应用 | Host 名称、DNS 记录和上游目标 |
| 页面提示证书错误 | 证书未覆盖该 Host,或 CDN / 回源使用了错误 TLS 名称 |
