Skip to content

如何使用子域模式搭建直连访问

这篇教程适合谁

这篇教程面向下面这类用户:

  • 已经具备公网 IPv4 或公网 IPv6
  • 已经有自己的正式域名,例如 example.com
  • 想让每个服务都有独立子域,例如 alist.example.com
  • 不想再维护反代模式里的路径映射
  • 希望保留公网直达的链路,但体验比传统直连模式更适合 Web 服务

这条路线最重要的一句话是:

子域模式可以理解成直连模式的升级版。

它仍然属于“域名直接解析到你自己的公网入口”,但访问组织方式从:

  • 原始端口

升级成了:

  • 独立子域

这篇教程默认讲的是:

  • 裸公网直达 fknock
  • 外部用户直接访问 :7999

如果你准备再在前面接一层:

  • 腾讯云 EdgeOne
  • 阿里云 ESA

那么请改看单独教程,因为那种场景下:

  • 对外访问通常不再显式带 :7999
  • 但回源端口依然要自定义成 7999
  • 还需要额外处理缓存、WebSocket 和 IPv6

对应专题页在这里:

最终会完成什么

完成后,你通常会得到这样一条访问链路:

  1. *.example.com 通过 DDNS 指向你的公网入口
  2. auth.example.com:7999alist.example.com:7999nav.example.com:7999 都进入 fknock 的统一入口
  3. 用户先在 auth.example.com:7999 完成登录
  4. 再回到各自的业务子域继续访问对应服务
  5. 系统会自动把公网入站收敛到 7999,同时保留局域网、容器内网等必要通信
  6. 整个过程走正式 HTTPS

开始前先确认 4 个前提

  1. 你的设备确实有可从公网访问的 IPv4 或 IPv6
  2. 你准备走“域名直达公网入口”路线,而不是 FRP / Cloudflared
  3. 你至少有 1 到 3 个本地 Web 服务要接入
  4. 你准备好了一个可长期使用的域名,例如 example.com

如果你没有公网入口,而是必须依赖:

  • FRP
  • Cloudflared

那这篇教程并不适合你,应该改看:

先看这一条重要提醒

如果你之前已经在反代模式里添加过:

  • /alist
  • /jellyfin
  • /nav

这类“映射路径”,请先到:

  • 路径映射

把它们全部删除掉,然后再切换到子域模式。

这是这篇教程最重要的前置提醒之一。

原因不是产品强制要求路径表必须为空,而是为了避免:

  • 你还沿用旧的路径映射心智
  • 切换后继续拿 /alist 这类旧地址去测试
  • 排错时把反代模式和子域模式的规则混在一起

第 1 步:安装并进入后台

如果尚未安装完成,先看:

确认后台可以正常打开后,再继续下面步骤。

第 2 步:如果之前用过反代模式,先删掉旧“映射路径”

路径:路径映射

如果你此前在反代模式里已经配过路径映射,请按这个顺序做:

  1. 打开 路径映射
  2. 把已有的路径映射全部删除
  3. 确认不再保留旧的 /alist/nav/photos 规则

做完这一步后,再开始切模式。

第 3 步:切换到子域模式

路径:系统设置 → 模式

请选择:

  • 子域模式

这个模式的核心变化是:

  1. 所有外部流量仍进入同一个网关端口
  2. 但不再按路径分发,而是按 Host 分发
  3. 会先添加一个鉴权子域作为统一登录入口,再批量接入业务子域

如果你是从反代模式切过来,还要额外记住:

  • 系统会在离开反代模式时先停止已经运行的 FRP / Cloudflared

因为这条路线的重点不是隧道,而是:

  • 域名直接解析到公网入口
  • 统一通过 子域名:7999 进入同一个网关入口

第 4 步:先保存域名

路径:子域映射 → 子域模式配置

先填:

  • 域名:例如 example.com

推荐先保持:

  • 跨子域 Cookie 范围:留空
  • 新映射默认访问方式登录优先
  • Passkey RP 配置鉴权域名

先不要一开始就把这些高级项改得很复杂。

你的目标是先让:

  • auth.example.com
  • alist.example.com
  • jellyfin.example.com

这条主链路先跑通。

第 5 步:进入子域管理,先把鉴权服务加上

路径:子域映射

操作顺序:

  1. 点击 添加鉴权服务
  2. 系统会自动创建一条默认登录入口,通常就是 auth.example.com
  3. 确认列表里已经看到这条鉴权映射

这里最关键的是:

  • 统一登录入口要先建出来
  • 这一步完成后,再继续做 一键发现
  • 后续不要把这条鉴权服务改成“要求认证”或“严格白名单”

第 6 步:再用一键发现把业务子域拉出来

还是在:

  • 子域映射

里继续操作。

操作顺序:

  1. 点击 一键发现
  2. 等扫描完成
  3. 勾选你要接入的服务
  4. 检查建议子域名
  5. 添加选中项

例如你可能会得到这样的结果:

  • alisthttp://127.0.0.1:5244
  • jellyfinhttp://127.0.0.1:8096
  • navhttp://127.0.0.1:3000

添加后,它们就会分别变成:

  • alist.example.com
  • jellyfin.example.com
  • nav.example.com

到这里,统一登录入口和第一批业务子域就都齐了。

第 7 步:切换到 DDNS,添加泛解析

如果你的域名会随着公网地址变化而变化,下一步就去:

  • DDNS 管理

这一步尤其适合:

  • 你的域名是 example.com
  • 你只有公网 IPv6
  • 你准备让同一父域下的多个子域都直达公网入口

推荐做法

以支持泛解析记录的提供商为例,例如 Cloudflare,可以直接维护:

  • *.example.com

然后把:

  • 更新范围

设置成:

  • 仅更新 IPv6

再执行一次:

  • 测试更新

这样做的意义是:

  1. auth.example.com
  2. alist.example.com
  3. jellyfin.example.com

这类业务子域都会统一落到当前公网 IPv6 上。

这里有两个小提醒

第一,如果你只有公网 IPv6,就不要继续保持:

  • IPv4 & IPv6

否则日志里会多出没有必要的 IPv4 探测失败信息。

第二,如果你后续还想让:

  • example.com

这个根域本身也参与访问,那它通常需要额外维护自己的记录;单独的 *.example.com 不会覆盖裸域。

第 8 步:申请 SSL 证书

路径:SSL 证书 → ACME 证书

对这条路线来说,最常见的填写方式就是:

  • *.example.com

这能覆盖:

  • auth.example.com
  • alist.example.com
  • nav.example.com

也就是这篇教程里的主线路线。

如果你还需要让根域:

  • example.com

本身也使用 HTTPS,那么再把它额外一起加进申请列表。

申请完成后,要注意一个新变化

ACME 申请成功后:

  • 证书会自动保存到服务器
  • 也会自动加入证书库

如果当前网关还没有自动切到它,页面里可以继续点击:

  • 设为当前证书

让它立即生效。

这比旧的“申请完还要再自己导入一遍”路线顺手很多。

第 9 步:理解切换后的防火墙变化

切换到子域模式后,系统会自动把入站防火墙策略调整成更适合统一网关的形态:

  1. IPv4 / IPv6 的公网访问会统一收敛到 7999
  2. 本机回环、已建立连接、局域网、链路本地和常见容器内网等必要流量会继续放行
  3. 其他不需要的公网入站端口会默认拒绝,避免绕过 fknock 直接访问原始服务端口

因此,你对外可以统一理解成:

  • fnos.example.com:7999
  • auth.example.com:7999
  • alist.example.com:7999

都是先进入 fknock,再由网关按 Host 把请求送到对应服务。

第 10 步:从外部网络验证整条链路

建议使用:

  • 手机蜂窝网络
  • 或其他不在同一局域网内的网络

验证顺序:

  1. 先访问 https://auth.example.com:7999
  2. 确认登录页可以正常打开
  3. 完成人机验证
  4. 输入 TOTP,或使用已绑定的 Passkey
  5. 再访问 https://alist.example.com:7999
  6. 再访问 https://jellyfin.example.com:7999
  7. 如果你把飞牛本体放在 fnos.example.com,就再访问 https://fnos.example.com:7999

如果这几步都通了,基本就说明:

  • 子域解析是通的
  • 鉴权入口是通的
  • 业务子域跳转链路是通的
  • 证书覆盖也是通的

正常情况下,这时你还会在页面右下角看到一个 toolbar 小组件。

它可以:

  • 在不同业务子域之间快速切换
  • 拖动到屏幕四个角落
  • 直接点击退出登录

这条教程的标准完成状态

做到下面这些,才算真正完成:

  1. 旧的反代“映射路径”已经清理干净
  2. 子域模式已启用
  3. 域名已经保存
  4. auth.example.com 已经通过 添加鉴权服务 创建出来
  5. 一键发现添加的业务子域已经可见
  6. *.example.com 的 DDNS 已能更新到当前公网 IPv6
  7. *.example.com 的证书已经申请成功并生效
  8. 已理解子域模式会自动把公网入站收敛到 7999
  9. 能通过任意一个业务子域的 :7999 入口访问到对应服务

如果遇到问题,应该回到哪一页

问题回看哪一页
不确定子域模式和其他模式怎么选直连模式、反代模式与子域模式
不理解子域映射里的字段子域映射
DDNS 不会填,或不知道怎么设成仅 IPv6DDNS 管理
你用的是 Cloudflare,想直接照着配Cloudflare DDNS 配置
SSL 不知道该申请什么SSL 证书
不理解 TOTP 或 Passkey认证体系总览TOTP 与密码器 AppPasskey

最后再记住一句

如果你的目标是:

  • 域名直接访问
  • 多个 Web 服务各用一个子域
  • 统一登录,再回到原业务域名

那么子域模式通常就是:

直连模式的升级版。

QQ群:1081609274