0%

不用公网 IP,也能通过域名访问群晖 NAS:Tailscale + FlClash 实战教程

家里的群晖 NAS 上运行着 DSM、Docker、影音和其他自建服务。在局域网中访问很方便,但外出后如何继续用同一个 HTTPS 域名访问这些服务,而且不暴露公网端口?

我最终采用的方案是:群晖通过 Tailscale 发布家庭子网路由;FlClash 使用 Mihomo 内置的 type: tailscale 节点,按规则把家庭内网请求送进 Tailscale。 实际部署中还踩到了「IP 能访问、域名却报 SERVFAIL」的坑,最后通过 Mihomo 内核 Hosts 解决。

一、方案与网络拓扑

本文的示例环境如下(均为演示地址,按自己的环境替换):

项目 示例值
家庭局域网网段 192.168.123.0/24
群晖 NAS 局域网 IP 192.168.123.163
NAS 访问域名 nas.example.com
群晖 HTTPS 反向代理端口 443
FlClash 家庭网络策略组 Home

最终实现的链路:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Android / Mac
|
FlClash
|
Mihomo 分流
| 普通互联网请求
+-- nas.example.com --> Home / TS-HOME
| |
| Tailscale 网络
| |
| 群晖子网路由器
| |
| 192.168.123.0/24
| |
| 192.168.123.163:443
| |
| HTTPS 反向代理 / DSM
|
+-- 其他流量 ----------> 原有代理或 DIRECT

与普通的「通过公网 IP + DDNS + 端口映射」方案相比,这套方案不需要把 NAS 的业务端口暴露在公网,也不要求家里有可入站的公网 IP。

两者分工很明确:Tailscale 负责组网和访问家庭子网,Mihomo 负责流量分流。

二、群晖配置 Tailscale 子网路由

1. 安装 Tailscale

从 Tailscale 官方 Synology SPK 下载页 下载适合群晖 CPU 架构与 DSM 版本的安装包。

进入 DSM「套件中心 → 手动安装」,安装后登录自己的 Tailnet。

2. 启用 SSH 并发布子网

在 DSM「控制面板 → 终端机和 SNMP」中启用 SSH,在电脑终端连接群晖:

1
ssh 管理员用户名@192.168.123.163

发布家庭局域网网段:

1
sudo tailscale set --advertise-routes=192.168.123.0/24

这表示其他授权的 Tailscale 设备可以通过群晖访问 192.168.123.0/24 中的设备,包括没有单独安装 Tailscale 的路由器、摄像头以及 Docker 服务。

3. 在后台批准路由

打开 Tailscale Machines,找到群晖,进入子网路由设置并批准:

1
192.168.123.0/24

还需要确认 Tailnet 的 ACL/Grants、群晖防火墙和目标设备防火墙允许相应流量。

提示: 在 DSM 7 环境下,某些 Ping 测试不一定能代表实际 TCP/UDP 可达性。优先使用 Web、SSH 等实际服务测试。

三、配置群晖 HTTPS 反向代理

理想的访问方式是:

1
https://nas.example.com

而不是记住:

1
https://192.168.123.163:5001

进入 DSM「控制面板 → 登录门户 → 高级 → 反向代理」,添加一条规则。以代理到 DSM 登录页为例:

配置项 示例
来源协议 HTTPS
来源主机名 nas.example.com
来源端口 443
目标协议 HTTPS
目标主机名 127.0.0.1
目标端口 5001

不同服务需换成其对应的后端地址及端口。如果使用了 HTTPS 后端自签证书,还要考虑反向代理的证书验证设置。

为 nas.example.com 绑定有效的 TLS 证书;不开放公网 80/443 的情况下,可使用 DNS-01 验证签发或续期证书。

为什么 IP 直连 443 可能不工作? 因为浏览器使用域名访问时,会在 TLS 握手中提供 SNI,并在 HTTP 中发送 Host;反向代理可能依靠这些信息选择服务。因此,https://192.168.123.163 和 https://nas.example.com 不一定等价。

四、FlClash 配置内置 Tailscale 出站

1. 生成 Auth Key

登录 Tailscale Keys,生成用于首次注册的 Auth Key。

单台设备通常选择一次性 Key;要注册多台独立设备时,可以按需使用 Reusable,但必须妥善保管,避免泄露。Reusable Auth Key 并不意味着多台设备可以共用同一份已注册节点状态。

2. 添加 type: tailscale 节点

在已有 Mihomo YAML 的 proxies 列表内追加节点(不要覆盖原有 proxies):

1
2
3
4
5
6
7
- name: TS-HOME
type: tailscale
hostname: flclash-phone
auth-key: "tskey-auth-请替换成自己的密钥"
state-dir: ./tailscale-flclash-phone
accept-routes: true
udp: true

核心参数:

参数 含义
type: tailscale Mihomo 内置 Tailscale 出站
hostname 在 Tailnet 中显示的设备名
auth-key 首次注册使用的密钥
state-dir 节点身份及状态目录
accept-routes: true 接受群晖发布的家庭子网路由
udp: true 启用 UDP 支持

特别注意:Mac 和 Android 使用不同的状态目录和节点名称,例如 flclash-mac、flclash-phone。不要跨设备复制已注册的 Tailscale 状态数据,否则可能出现 Duplicate node key。

3. 添加 Home 策略组

在已有的 proxy-groups 列表中追加:

1
2
3
4
5
- name: Home
type: select
proxies:
- TS-HOME
- DIRECT

在 FlClash 中,将 Home 选择为 TS-HOME。

4. 添加家庭域名与网段规则

将下面的条目插入已有 rules 列表中,并放在通用 MATCH、私有地址直连等规则之前:

1
2
3
- DOMAIN,nas.example.com,Home
- IP-CIDR,192.168.123.0/24,Home,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve

这样实现:

  • nas.example.com → Tailscale;
  • 192.168.123.x → Tailscale;
  • 其他 192.168.x.x → 本地直连。

no-resolve 的意思是:为匹配这条 IP-CIDR 规则,不主动触发额外的 DNS 解析;它不是「禁止 DNS」开关。

注意系统代理和 TUN 有不同的接管范围。Mac 系统代理模式下,如果系统已经把 192.168.0.0/16 列入代理绕过列表,流量可能在进入 Mihomo 之前就被绕过,因此单靠分流规则无法挽回。

五、排障:IP 能访问,域名却打不开

实际配置时,我遇到了一种很奇怪的现象:

  • FlClash 内置 Tailscale 访问 192.168.123.163 正常;
  • 独立 Tailscale 客户端访问域名正常;
  • FlClash 的 SSH 出站访问同一个域名正常;
  • 但 FlClash 内置 type: tailscale 访问该域名时,会出现超时、TLS 握手中断或 SERVFAIL。

1. 查看 FlClash 连接记录

连接页面显示目标类似:

1
2
3
tcp://nas.example.com/192.168.123.163:443
Home → TS-HOME
上传 0B / 下载 0B

说明域名规则命中了预期的出站,但不代表底层连接已经成功。

2. 对比正常解析与强制指定 IP

在手机 Termux 中运行:

1
curl -4 -Iv https://nas.example.com/

当时可以看到 Mihomo 分配的 Fake-IP,例如:

1
2
3
IPv4: 198.18.0.7
Trying 198.18.0.7:443...
TLS connect error: unexpected eof while reading

198.18.0.7 是 Mihomo 的 Fake-IP 虚拟地址,出现这个地址本身不等于故障。

再强制指定真实局域网 IP,同时保留 HTTPS 域名:

1
2
3
curl -Iv \
--resolve nas.example.com:443:192.168.123.163 \
https://nas.example.com/

这次连接正常,出现了:

1
2
SSL certificate verify ok.
HTTP/2 200

这说明该次测试中,设备能够到达目标 IP,TLS 证书匹配,反向代理也正常。需要继续排查的是普通域名请求的 DNS 或出站拨号路径。

3. SERVFAIL 的线索

FlClash 曾出现:

1
all DNS requests failed, first error: server failure: SERVFAIL

Mihomo 有一个与此现象类似的报告:Issue #3375:Tailscale 出站重新解析域名。在部分实现/版本中,Tailscale 出站可能再次解析域名;如果其解析器没有可用上游,就可能连接失败。

注意: 这个 Issue 提供了很有价值的解释线索,但不能仅靠一次 SERVFAIL 日志就认定所有失败均由同一个 Bug 引起。

六、最终有效的修复:Mihomo 内核 Hosts

对我的环境来说,最简单、最稳定的办法,是在 FlClash 的 Mihomo 内核 Hosts 中直接写入域名和 NAS 私有 IP 的映射:

1
2
hosts:
nas.example.com: 192.168.123.163

有多个家庭域名时也可以继续添加:

1
2
3
4
hosts:
nas.example.com: 192.168.123.163
git.example.com: 192.168.123.163
media.example.com: 192.168.123.163

如果已有顶层 dns: 配置,请确保没有禁用 Hosts:

1
2
dns:
use-hosts: true

这是配置片段:如果原文件已有 dns:、hosts:,应当合并相应字段,不能复制出重复的顶层 YAML 键。

为什么内核 Hosts 能修复?

排障时曾经出现的失败链路:

1
2
3
4
5
6
7
8
9
访问 nas.example.com
↓
规则命中 Home / TS-HOME
↓
Tailscale 出站可能再次解析域名
↓
DNS 返回 SERVFAIL
↓
连接失败

设置 Hosts 后,在相关解析路径中可以直接获得:

1
nas.example.com → 192.168.123.163

从而避免这条查询再依赖失败的 DNS 上游。与此同时,浏览器访问的依然是 https://nas.example.com,所以 SNI、证书匹配和反向代理的 Host 路由不受影响。

这次实测验证有效的改动,是 Mihomo 内核 Hosts,而不是简单增加 DOMAIN 规则,也不是关闭全局 Fake-IP。

备选方案:Tailscale Split DNS

Tailscale 管理后台也支持配置域名专用 DNS:

https://login.tailscale.com/admin/dns

可以在 Nameservers 中添加 Custom DNS,并限定到 example.com,前提是该 DNS 服务器确实能够解析出正确的家庭私有 IP。

不过,Tailscale 的 DNS 设置属于 Tailnet 级别,可能影响其他启用了「Use Tailscale DNS settings」的客户端;在同时运行独立 Tailscale 和其他 TUN 代理时还可能遇到 DNS/路由冲突。

因此,对于仅访问少量家庭域名的场景,我更推荐在 FlClash 的内核 Hosts 中管理映射。

七、Mac 和 Android 的使用区别

Android:主要使用 FlClash 内置 Tailscale

Android 端的 FlClash 通常通过系统 VPN 接口接管流量。配置 TS-HOME 后,直接让相应规则选择 Home 即可,无须再同时运行另一套独立 Tailscale VPN。

Mac:两种方式任选其一

方案 A:FlClash TUN 开启,独立 Tailscale 关闭。

这是本文实际采用的整合方式:

  • FlClash 接管目标应用的网络流量;
  • 访问家庭内网的请求走 TS-HOME;
  • 普通互联网继续按原有规则分流。

方案 B:独立 Tailscale 开启,FlClash TUN 关闭,使用系统代理。

此时独立 Tailscale 负责系统路由。对已经可以通过 macOS 路由到达的家庭 IP,FlClash 规则可以视情况选择 DIRECT,由系统送入独立 Tailscale。但这种方式可能受到 macOS 的代理绕过列表影响。

不建议在没有规划的情况下,让两套 TUN/VPN 同时修改重叠网段的路由和 DNS。

八、常见问题速查

现象 排查方向
Tailscale 节点无法登录 Auth Key、节点状态、Tailnet 设备列表
Duplicate node key 是否跨设备复制了已注册的状态目录
家庭内网 IP 不通 accept-routes、子网路由批准、ACL、防火墙
IP 通但域名不通 内核 Hosts、DNS、出站拨号错误日志
DNS 返回 198.18.x.x 可能是正常 Fake-IP,结合实际连接判断
出现 SERVFAIL 区分 Mihomo DNS 和 Tailscale 内部解析器
HTTPS 报证书错误或返回错误站点 检查 SNI、Host、反向代理和证书
Mac 访问内网不正常 TUN、系统代理绕过列表和策略组选择
换设备后无法连接 重新注册节点,避免共用状态目录

额外建议:为群晖在路由器上设置 DHCP 地址保留,避免 IP 变化导致内核 Hosts 失效;为 Tailnet 设置适当的访问权限;不要在公开仓库提交真实 Auth Key、节点认证信息或完整代理配置。

九、总结

最初以为,只要能从外网访问家庭内网 IP,就能自然地通过域名访问群晖。实际部署后才发现,组网、分流、DNS 和 HTTPS 反向代理是不同层次的问题。

这套方案最终只需要四个关键步骤:

  1. 群晖通过 Tailscale 发布 192.168.123.0/24 子网路由;
  2. FlClash 添加 type: tailscale 节点并开启 accept-routes;
  3. 使用 DOMAIN 和 IP-CIDR 将家庭内网流量指向 Home;
  4. 用 Mihomo 内核 Hosts 让 NAS 域名稳定解析到私有 IP。

最终,无论在 Android 还是 Mac 上,都可以通过统一的 HTTPS 域名访问家里的 NAS,而不必在路由器上对公网开放 NAS 的业务端口,也不必为了访问家庭网络频繁切换独立 VPN。

参考资料

本文根据 2026 年 10 月底的实际部署及故障排查整理。不同 FlClash/Mihomo 版本的行为可能存在差异,具体以正在使用的内核及官方文档为准。

欢迎关注我的其它发布渠道