Skip to content

智能连接

这页解决什么问题

智能连接 解决的是这样一个很常见的体验问题:

  • 你在外网时,通过 alist.example.com:7999fnos.example.com:7999 这类子域访问服务
  • 回到家里同一个局域网后,却还在继续绕公网入口
  • 结果变成:
    • 访问链路更长
    • 速度不一定最好
    • 某些设备还可能受公网 DNS 缓存或 NAT 环回影响

它的目标就是:

当你的设备回到局域网后,让这些子域优先解析回 fknock 所在机器的局域网 IP。

先明确:它只适用于子域模式

智能连接 只在:

  • 子域模式

下可用。

原因很直接:

  • 它依赖的是“同一父域下多个子域”这套访问模型
  • 后台会把当前所有 Host 映射对应的域名,同步成局域网 DNS 规则

所以它不适用于:

  • 直连模式
  • 反代模式

如果你当前不是子域模式,页面会直接提示:

  • 仅子域模式可用

建议先配合阅读:

它到底做了什么

可以把它理解成:

  1. fknock 继续负责外网统一入口
  2. 但在局域网里,再额外提供一层“本地 DNS 纠偏”
  3. 让你常用的子域,在局域网里直接解析到选定的本机私网 IPv4

例如你原来在公网下访问的是:

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

开启后,在局域网里它们可以被解析到类似:

  • 192.168.31.20

这类本机地址。

需要特别注意:

  • 它不会改你的公网 DNS 记录
  • 也不会替你更新 DDNS
  • 它只是让“局域网里的设备”优先用本地 DNS 结果访问这些子域

这套本地 DNS 规则会由:

  • dnsmasq

来承载。

会同步哪些子域

这一点很关键。

智能连接 不需要你手动一条条维护域名列表。

它会自动同步:

  • 当前 子域映射 里的鉴权子域
  • 当前 子域映射 里的业务子域

也就是说,只要这些 Host 映射已经存在,例如:

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

保存后它们就会一起进入同步列表。

另外还有两个边界:

  1. 如果你后来增删了 Host 映射,后台会继续自动重新同步
  2. 如果当前还没有任何可同步的子域映射,这个功能也无法真正保存生效

使用前你需要准备什么

正式开启前,建议先确认下面几件事:

1. 已经切到子域模式

并且至少已经完成:

  • 根域名配置
  • 鉴权服务配置
  • 至少一条业务 Host 映射

2. 机器上有可用的私网 IPv4

页面里只会列出适合作为局域网入口的:

  • 私网 IPv4

例如常见的:

  • 192.168.x.x
  • 10.x.x.x
  • 172.16.x.x - 172.31.x.x

如果页面里没有可选项,通常说明:

  • 当前网卡没有合适的私网地址
  • 或者你看到的只是 Docker / Tailscale / WireGuard 这类不适合作为局域网入口的接口

3. 局域网设备真的会把这台机器当 DNS

这是最容易忽略的一步。

智能连接 并不是“点开关就全网自动生效”,而是要求你的局域网设备后续查询 DNS 时,能问到这台 fknock 所在机器。

最常见的两种做法是:

  • 把路由器 DHCP 下发的 DNS 服务器改成 fknock 的局域网 IP
  • 或在要测试的手机、电脑上手动把 DNS 服务器改成这个局域网 IP

如果这一步没做,就算后台显示已同步,客户端也仍然可能继续走原来的公网 DNS 结果。

4. 53 端口没有被别的 DNS 服务占用

dnsmasq 需要监听:

  • 53

如果本机已有别的 DNS 服务占用了它,初始化或重启时就会失败。

常见表现是:

  • 提示 DNS 53 端口不可用
  • 或提示 权限不足 / 地址已被使用

推荐配置顺序

路径:

  • 系统设置 → 功能 → 智能连接

推荐按这个顺序做:

  1. 先确认 子域映射 已经配置完成
  2. 进入 系统设置 → 功能
  3. 打开 智能连接
  4. 如果页面提示 dnsmasq 未就绪,先完成安装 / 初始化
  5. 选择一个本机局域网 IP
  6. 点击 保存并同步
  7. 再去修改路由器 DHCP DNS,或在测试设备上手动改 DNS
  8. 重新连一次网络,或等待本地 DNS 缓存刷新后再测试

dnsmasq 未就绪时应该怎么理解

开启 智能连接 时,后台会先检查:

  • dnsmasq 是否已安装
  • dnsmasq 是否已初始化完成
  • dnsmasq 服务是否能正常启动

因此页面里你会看到几种典型状态:

  • 未安装
  • 待初始化
  • 未运行
  • 已就绪

可以这样理解:

  • 未安装:系统里还没有可用的 dnsmasq
  • 待初始化:已经检测到程序,但还没完成服务准备或初始配置
  • 未运行:配置存在,但服务当前没有正常工作
  • 已就绪:可以开始同步局域网 DNS 规则

如果你点击初始化后依然失败,优先检查:

  1. 53 端口是否被别的 DNS 服务占用
  2. 当前系统是否允许安装和启动 dnsmasq
  3. 目标机器上是否已经具备正常的服务管理环境

选哪个本机局域网 IP

推荐选择:

  • 你希望局域网客户端真正访问到的那块网卡地址

通常就是:

  • 家庭主路由所在网段下的 NAS 地址

例如:

  • 192.168.31.20 (eth0)

不建议随便选一个“看起来也是私网”的地址,因为不同地址可能分别对应:

  • 主局域网
  • Docker 网桥
  • 虚拟网卡
  • 其他不面向普通客户端的内部网络

一个最稳妥的判断方法是:

  • 你在手机或电脑上,平时通过哪一个局域网 IP 能直接访问这台机器,就优先选哪一个

开启后用户侧还需要做什么

这是最重要的落地环节。

保存成功后,后台只是完成了:

  • 本地 DNS 规则同步

但真正让客户端生效,还需要客户端把 DNS 查询发到这台机器。

通常做法是:

方案一:改路由器 DHCP

把局域网里自动下发的 DNS 服务器改成:

  • fknock 所在机器的局域网 IP

这样后续手机、电脑重新拿到网络配置后,就会自动使用这台机器进行 DNS 解析。

方案二:只在单台设备上手动改 DNS

如果你只是想先验证效果,也可以只在:

  • 手机
  • 笔记本
  • 平板

上手动把 DNS 改成 fknock 的局域网 IP。

DNS 缓存别急着忽略

这套本地 DNS 规则会使用较短的本地 TTL,默认大约:

  • 30 秒

所以你在刚保存完、刚切回 Wi-Fi 时,如果测试结果还没立刻变化,不一定是功能失效,也可能只是客户端还在用旧缓存。

这时可以优先尝试:

  1. 等几十秒再测一次
  2. 重新连接 Wi-Fi
  3. 手动刷新本机 DNS 缓存

它不会替你做什么

为了避免误解,下面几件事不是 智能连接 负责的:

不是公网 DNS 托管

它不会自动帮你修改:

  • 域名注册商的解析记录
  • Cloudflare DNS
  • DDNS 提供商记录

公网解析是否正确,仍然要靠:

不是模式切换工具

它不会把:

  • 反代模式
  • 直连模式

自动转换成子域模式。

不是“开关一开,全网自动都懂了”

如果你的路由器、手机、电脑根本没有把 DNS 查询发到 fknock 所在机器,那它也无法替你接管解析结果。

最常见的几个问题

我已经保存成功了,为什么回到家里 Wi-Fi 还是在走公网

优先检查这几件事:

  1. 测试设备的 DNS 服务器是不是已经改成 fknock 的局域网 IP
  2. 当前子域是不是已经在 同步的子域 列表里
  3. 客户端是不是还在用旧 DNS 缓存
  4. 你选择的本机 IP 是不是正确的那块局域网接口

多数情况下,问题都不在“保存失败”,而在:

  • 客户端根本没有真正使用这台机器做 DNS

页面提示没有可同步的子域

这通常说明当前还没有可用的 Host 映射。

优先回到:

先确认:

  • 根域名已保存
  • 鉴权服务已创建
  • 至少有一条业务子域映射

页面里没有可选的局域网 IP

这通常说明:

  • 当前没有检测到合适的私网 IPv4
  • 或检测到的只是被排除的虚拟网卡

优先检查:

  1. 这台机器当前是否真的连在局域网里
  2. 主网卡是否已经拿到 192.168.x.x / 10.x.x.x / 172.16-31.x.x 这类地址
  3. 是否只是 Docker、隧道或其他虚拟接口在线

初始化时提示 53 端口不可用

这通常说明当前机器上已经有别的 DNS 服务占用了:

  • 53

处理思路通常是:

  1. 先确认是谁占用了这个端口
  2. 停掉冲突的 DNS 服务,或重新规划 DNS 角色
  3. 再回到页面重新初始化

什么时候最值得开启

它最适合下面这些场景:

  1. 你已经把主要访问方式定成 子域模式
  2. 平时既会在外网访问,也会在家里 Wi-Fi 下继续访问
  3. 不想让 auth.example.comalist.example.com 这类地址在局域网里还继续绕公网
  4. 你可以控制路由器 DHCP DNS,或至少能改自己设备上的 DNS

如果你连局域网 DNS 都不方便控制,这个功能就算能开,也不一定会带来明显效果。

相关阅读

QQ群:1081609274