使用 Tailscale 让 NAS、iPhone、Mac mini 与 MacBook 实现安全异地组网
概述
很多人将 NAS 部署在家中,用来保存照片、视频和项目文件,并运行影音库、下载器、相册、密码管理器等本地服务。但离开家庭网络后,如何安全访问这些资源,往往会遇到几个问题:
- 家庭宽带没有公网 IPv4。
- 不想在路由器上开放 SMB、NAS 管理后台等端口。
- Mac 和 iPhone 平时还需要运行 Surge 或 Loon。
- iOS 通常无法让两个独立 VPN 隧道同时接管网络。
- 希望访问体验与局域网基本一致,而不是每次都进行复杂配置。
Tailscale 可以将 NAS、Mac mini、MacBook 和 iPhone 加入同一个虚拟局域网,也就是 Tailnet。设备无论位于家庭宽带、公司网络、酒店 Wi-Fi 还是蜂窝网络中,都可以通过加密连接相互访问。
本文以 Unraid 7 为 NAS 示例。TrueNAS、Synology、QNAP 等其他 NAS 的总体思路相同,但客户端安装位置、子网路由和容器集成方式需要参考各自系统文档。
整个方案不需要将 NAS 的 SMB、管理后台或 Docker 服务直接映射到公网。Tailscale 构建在 WireGuard 之上,并增加身份认证、访问控制、NAT 穿透、DERP 中继和 MagicDNS 等能力。只有经过授权并满足 Tailnet 访问策略的设备才能通信。
安全目标本文的目标是通过 Tailnet 私下访问 NAS,而不是将 NAS 服务公开到互联网。配置完成后,应删除不再需要的公网端口映射,并避免对 SMB、管理后台和私人 Docker 服务使用 Tailscale Funnel。
网络结构
完成后的网络结构大致如下:
Internet │ Tailscale 加密虚拟网络 │ ┌────────────────────┼────────────────────┐ │ │ │ NAS 服务器 Mac mini MacBook 以 Unraid 为例 Tailscale 客户端 Tailscale / Surge │ ├── SMB 文件共享 ├── NAS 管理后台 ├── Docker 本地服务 └── 局域网其他设备(可选) │ iPhone Surge 内置 Tailscale设备加入 Tailnet 后,会获得一个位于 100.64.0.0/10 范围内的 Tailscale IPv4 地址,例如:
100.101.102.103开启 MagicDNS 后,还可以使用设备名称访问:
unraidunraid.example-tailnet.ts.netTailscale 地址在设备保持注册期间通常稳定,但删除设备、重置节点或重新安装系统后可能变化。长期配置访问策略时,可以使用设备标签或及时更新地址。
开始前的准备
需要准备以下设备和软件:
- 一台家庭 NAS,本文使用 Unraid 7 举例。
- 一台 Mac mini。
- 一台 MacBook。
- 一台 iPhone。
- 一个 Tailscale 账户。
- Surge Mac 6.7.0 或更高版本。
- Surge iOS 5.20.0 或更高版本。
Unraid 7 已提供官方维护的 Tailscale 集成。访问 Unraid 宿主机、WebGUI 和 SMB 共享时,应安装 Tailscale (Plugin),而不是旧的 Tailscale Docker 模板。
创建 Tailnet
首次在任意设备上登录 Tailscale 时,系统会自动创建一个 Tailnet。建议先进入 Tailscale 管理后台,完成基础设置。
开启 MagicDNS
MagicDNS 可以让设备通过名称互相访问,不必记住每台设备的 100.x.x.x 地址。
推荐使用清晰的设备名称:
unraidmac-minimacbookiphone完整 MagicDNS 名称通常采用以下格式:
<设备名>.<tailnet-name>.ts.net同一 Tailnet 内的原生 Tailscale 客户端通常可以使用短名称。Surge 内置 Tailscale 和跨 Tailnet 分享场景优先使用完整域名:
unraid.example-tailnet.ts.net保护登录账户
Tailscale 的安全边界依赖登录账户和设备授权。建议为用于登录 Tailscale 的 Apple、Google、Microsoft 或 GitHub 账户开启双重验证。
还应定期检查管理后台中的设备,删除已经出售、重装或不再使用的节点。
谨慎设置设备名称
避免使用姓名、家庭地址或公司名称作为设备名。
如果为设备启用 Tailscale HTTPS 证书,机器名称可能出现在公开证书日志中,因此应使用自己愿意公开的名称。
在 Unraid 上安装 Tailscale
安装官方插件
打开 Unraid WebGUI,依次进入:
Apps→ 搜索 Tailscale→ 选择 Tailscale (Plugin)→ Install不要选择旧版 Docker 模板。
安装后进入:
Settings→ Network Services→ Tailscale选择:
Reauthenticate→ Connect登录与其他设备相同的 Tailscale 账户。
检查设备状态
进入 Tailscale 管理后台的设备页面,应该可以看到 Unraid 节点:
unraid100.101.102.103Connected如果 Tailnet 开启了设备审批,还需要手动批准该节点。
然后从另一台已经加入 Tailnet 的设备测试访问:
http://100.101.102.103或者:
https://unraid.example-tailnet.ts.net实际协议和端口取决于 Unraid 的管理访问设置。
判断是否需要子网路由
单纯访问以下内容时,通常不需要配置子网路由:
- Unraid WebGUI。
- Unraid 宿主机上的 SMB 共享。
- 已映射到 Unraid 宿主机端口的 Docker 服务。
直接使用 Unraid 的 Tailscale IP 或 MagicDNS 名称即可。
只有以下场景需要子网路由:
- Docker 容器使用独立的
br0局域网 IP。 - 需要访问家庭局域网中的打印机、摄像头或其他设备。
- 希望继续使用设备原来的
192.168.x.x地址。
假设家庭网络是:
192.168.1.0/24可以进入:
Settings→ Tailscale→ Advertise Routes根据需求广播:
192.168.1.50/32 只开放单台设备192.168.1.0/24 开放整个家庭网段保存后,还需要在 Tailscale 管理后台批准该路由。
最小开放范围只需要访问一台容器或局域网设备时,优先广播
/32。没有访问整个家庭网络的需求时,不要直接开放整个/24网段。
Unraid 7 容器集成
Unraid 7 可以让部分 Docker 容器直接加入 Tailnet,每个容器拥有独立身份、主机名和 Tailscale 地址。
这种方式适合:
- 只共享某个容器,而不是整个 NAS。
- 为不同容器配置独立 Grants。
- 让容器独立使用 HTTPS、Serve 或其他 Tailscale 功能。
如果服务已经映射到 Unraid 宿主机端口,通常不需要让容器单独加入 Tailnet。
容器网络模式存在兼容性限制,不应在关键容器上直接试验。尤其不要把旧 Tailscale Docker 模板与 Unraid 7 的官方容器集成混为一谈。配置前应查看当前 Unraid 版本的发行说明,并先在非关键容器上测试。
在 Mac mini 上配置 Tailscale
Mac mini 往往承担家庭常开服务器、远程开发机或下载机的角色,因此建议安装完整的 Tailscale 系统客户端。
完整客户端可以让其他 Tailnet 设备主动访问 Mac mini,例如:
- SSH。
- 屏幕共享。
- Web 服务。
- 本地 API。
- 文件共享。
- 远程开发工具。
Surge 内置 Tailscale 是应用层出站策略,不能接受其他 Tailnet 设备的主动入站连接,也不能把当前设备作为子网路由器或出口节点进行广播。
因此,作为服务器使用的 Mac mini 应优先安装 Tailscale 官方客户端。
同时使用 Surge
推荐组合是:
Tailscale:保持连接Surge:开启系统代理Surge 增强模式:非必要不启用Surge 的系统代理主要处理浏览器和遵循系统代理的应用;SMB、SSH 和其他访问 100.x.x.x 的连接继续由 macOS 路由到 Tailscale。
这种方式的优点是:
- Tailscale 可以接受其他设备的入站连接。
- Surge 继续处理互联网代理流量。
- SMB 和 SSH 不需要经过代理节点。
- 两者不必争抢相同的系统路由。
如果开启 Surge 增强模式后出现 Tailnet 无法访问、路由被覆盖或另一项 VPN 被关闭,应优先关闭增强模式,改用系统代理模式。
macOS 可以同时安装多种网络工具,但其他 VPN 的路由、防火墙以及 100.64.0.0/10 地址冲突仍可能造成问题。Surge 的高级接口绑定方案依赖实际 utun 接口,不适合作为所有设备通用的默认配置。
在 MacBook 上同时使用 Surge 和 Tailscale
MacBook 通常主要作为访问端,可以选择两种模式。
模式一:原生 Tailscale 加 Surge 系统代理
这是最容易理解,也最适合需要完整 Tailscale 功能的方案。
Tailscale App:保持连接Surge:开启系统代理Surge 增强模式:关闭此时流量大致为:
网页和普通代理流量 → Surge100.x.x.x 和 Tailnet 流量 → TailscaleSMB、SSH 等非 HTTP 流量 → Tailscale该模式适合以下需求:
- MacBook 需要被其他 Tailscale 设备访问。
- 需要使用 Taildrop。
- 需要使用 Tailscale CLI。
- 需要完整的系统级 MagicDNS 和路由。
- 不要求 Surge 增强模式接管所有应用。
模式二:使用 Surge 内置 Tailscale
Surge iOS 5.20.0 和 Surge Mac 6.7.0 开始提供原生 Tailscale 策略。该策略会在 Surge 内部加入 Tailnet,并将规则选中的流量发送到 Tailscale,不需要建立第二个系统 VPN 隧道。
这种模式适合:
- Surge 必须开启增强模式。
- 只需要从 MacBook 主动访问 NAS。
- 不需要其他设备主动访问 MacBook。
- 希望代理和异地组网由一个客户端统一管理。
Surge 内置策略可以作为客户端使用已批准的子网路由和出口节点,但不能提供入站服务、广播子网路由或把当前设备作为出口节点。
创建专用 Auth Key
进入 Tailscale 管理后台创建 Auth Key,建议设置:
Pre-authorized:根据设备审批策略开启Reusable:关闭有效期:尽量短每台设备:单独创建一个密钥Surge 内置 Tailscale 不提供交互式网页登录,因此需要使用 Auth Key 完成设备注册。
WARNINGAuth Key 等同于设备注册凭据。不要把真实密钥发到群聊、截图、公开仓库或订阅配置中。撤销 Auth Key 不会自动删除已经注册的设备,泄露后还需要在设备页面移除可疑节点。
Surge 配置示例
在 Surge 配置中添加:
[Proxy]Home Tailnet = tailscale, section-name=home-tailnet
[Tailscale home-tailnet]auth-key = tskey-auth-在这里填写密钥hostname = surge-macbook然后在规则区域添加:
[Rule]DOMAIN-SUFFIX,example-tailnet.ts.net,Home TailnetIP-CIDR,100.64.0.0/10,Home Tailnet,no-resolve需要将:
example-tailnet.ts.net替换为管理后台显示的实际 Tailnet DNS 后缀。
100.64.0.0/10 规则匹配 Tailscale IPv4 地址,域名规则匹配完整 MagicDNS 名称。
如果需要使用 Tailscale IPv6 或已批准的家庭子网路由,还需要根据实际地址范围添加对应规则。只配置 100.64.0.0/10 不能覆盖所有 Tailscale 路由。
不要把所有互联网流量无条件指向 Home Tailnet,也不要让 Tailscale 控制服务器的连接再次匹配到相同策略,否则可能形成递归依赖。
在 iPhone 上同时使用代理和 Tailscale
iPhone 上的核心问题是系统 VPN 隧道冲突。iOS 通常只允许一个活动 VPN,因此无法可靠地同时开启 Surge App 和 Tailscale App 两个独立隧道。
解决方式是让 Surge 自己加入 Tailnet。
使用 Surge iOS
使用 Surge iOS 5.20.0 或更高版本,为 iPhone 创建独立 Auth Key,然后加入类似配置:
[Proxy]Home Tailnet = tailscale, section-name=home-tailnet
[Tailscale home-tailnet]auth-key = tskey-auth-在这里填写iPhone专用密钥hostname = surge-iphone
[Rule]DOMAIN-SUFFIX,example-tailnet.ts.net,Home TailnetIP-CIDR,100.64.0.0/10,Home Tailnet,no-resolve此时只需要开启 Surge:
普通互联网流量 → Surge 原有代理规则NAS 和 Tailnet → Surge 内置 TailscaleSurge 内置策略支持规则选中的 TCP 和 UDP 出站流量,可以访问 Tailnet 节点、MagicDNS 名称以及经过批准的子网路由。
不需要再同时开启官方 Tailscale App。
Loon 当前状态
Loon 已计划加入原生 Tailscale 支持,但截至本文发布时间,该功能尚未在正式版中发布。
Surge iOS:已支持内置 TailscaleLoon:已计划支持 Tailscale,等待正式版发布Loon 当前支持 WireGuard,但这不等同于已经原生支持 Tailscale。在正式功能发布前,Loon 仍无法替代 Surge 完成本文中的单隧道代理与 Tailnet 分流。
来源不明的修改版客户端、描述文件或包含 Auth Key 的第三方模块会扩大凭据泄露风险,应避免使用。
通过 Mac 访问 NAS SMB
先在 Unraid 中创建单独的 SMB 用户,并为共享目录配置权限。
推荐设置:
共享模式:Private 或 Secure访客访问:关闭用户权限:按需设置只读或读写不要为了方便将重要目录长期设置为 Public。
使用 Finder 连接
在 Mac 上打开:
访达→ 前往→ 连接服务器也可以直接按:
Command + K输入 Tailscale IP 和共享名称:
smb://100.101.102.103/Media或者使用完整 MagicDNS 地址:
smb://unraid.example-tailnet.ts.net/MediamacOS 官方支持以下格式:
smb://DNS名称/共享名称smb://IP地址/共享名称如果不填写共享目录:
smb://unraid.example-tailnet.ts.net登录后可以再选择需要挂载的共享。
连接成功后,可以把共享目录拖到 Finder 边栏。需要登录时自动挂载,可以将已经挂载的 SMB 宗卷加入:
系统设置→ 通用→ 登录项跨地区网络延迟较高时,SMB 打开大量小文件会明显慢于本地局域网;大文件连续传输通常更加稳定。
通过 iPhone 访问 NAS SMB
iPhone 自带的“文件”App 可以连接 SMB 服务器,不需要额外安装文件管理器。
依次打开:
文件→ 浏览→ 右上角“···”→ 连接服务器输入 NAS 的 Tailscale IP、完整 MagicDNS 名称或网络地址,例如:
100.101.102.103unraid.example-tailnet.ts.net部分系统版本也可以直接填写:
smb://unraid.example-tailnet.ts.net选择:
注册用户然后输入 Unraid SMB 用户名和密码。
连接成功后,NAS 会出现在“文件”App 的“共享”区域,可以浏览、上传、移动和复制文件。
如果 iPhone 使用 Surge 内置 Tailscale,应在 Surge 最近请求中确认连接命中:
Home Tailnet而不是普通代理节点。
访问 NAS 上的 Docker 服务
如果 Docker 服务已经映射到 Unraid 宿主机端口,例如:
Plex:32400qBittorrent:8080Immich:2283Home Assistant:8123可以直接访问:
http://100.101.102.103:8080http://unraid.example-tailnet.ts.net:8080其他服务同理。
容器使用独立局域网 IP
假设容器地址是:
192.168.1.50可以选择两种方法。
配置子网路由
让 Unraid 广播:
192.168.1.50/32需要访问整个家庭网络时才广播:
192.168.1.0/24保存后在 Tailscale 管理后台批准路由。
使用 Unraid 7 容器集成
让容器直接加入 Tailnet,获得独立的 Tailscale 身份和地址。这样可以只授权某个容器,而不是允许客户端访问整个 Unraid 或家庭局域网。
这种方式权限更清晰,但存在容器网络模式和版本兼容性限制,应先在非关键容器上测试。
安全配置建议
Tailscale 能减少公网暴露,但安全性仍取决于账户、设备、访问策略和应用权限。
删除公网端口映射
使用 Tailscale 后,通常不应继续把以下端口映射到公网:
445 SMB22 SSH3389 RDP80 HTTP443 HTTPSNAS 管理后台端口Docker 管理端口Tailscale 本身不要求将这些业务端口开放到公网。
区分 Serve 与 Funnel
Tailscale Serve 只向 Tailnet 内经过授权的设备和用户提供服务;Funnel 会将服务发布到整个互联网。
| 功能 | 访问范围 | 适合场景 |
|---|---|---|
| Serve | Tailnet 内部 | 私有 Web 服务和管理页面 |
| Funnel | 公网 | 明确需要公开的 Web 服务 |
Funnel 不适合 SMB,也不应默认用于 NAS WebGUI 和私人 Docker 服务。
可以使用:
Tailscale 设备地址MagicDNSTailscale Serve除非明确知道自己正在公开什么,否则不要使用:
Tailscale Funnel公网端口映射公开反向代理每台设备使用独立 Auth Key
不要让 iPhone、MacBook 和其他设备共用同一个可重复使用密钥。
推荐:
surge-iphone:独立一次性密钥surge-macbook:独立一次性密钥自动化容器:独立密钥、标签或 OAuthAuth Key 优先使用短有效期、一次性、预授权并限制权限的配置。不要把密钥留在公开配置、Shell 历史或截图中。
定期清理设备
定期检查 Tailscale 管理后台,删除:
- 已出售的手机。
- 已重装的旧系统。
- 不再使用的临时节点。
- 名称相似但无法确认来源的设备。
- 已失效的 Surge 临时节点。
保留 SMB 独立认证
即使 SMB 只能通过 Tailnet 访问,也应该:
- 关闭访客访问。
- 使用独立 Unraid 用户。
- 设置强密码。
- 不让普通用户拥有不必要的写入权限。
- 将备份和重要资料设置为只读或分开管理。
Tailscale 负责网络层身份和加密,但不会替代 SMB 自身的用户名、密码和文件权限。
使用 Grants 限制端口
新建 Tailnet 的默认策略可能允许成员设备广泛互访。Tailscale 当前推荐使用 Grants 实施最小权限控制。
例如,将 Unraid 定义为固定主机后,只允许成员访问 SMB、HTTP 和 HTTPS:
{ "hosts": { "unraid": "100.101.102.103" }, "grants": [ { "src": ["autogroup:member"], "dst": ["unraid"], "ip": [ "tcp:445", "tcp:80", "tcp:443" ] } ]}有 Docker 服务时,再添加实际需要的端口:
"tcp:8080","tcp:8123","tcp:32400"Grants 中:
src定义访问来源。dst定义目标设备、标签或地址。ip限制协议和端口。
修改访问策略前应保存原配置并逐步测试。多条 Grants 的权限会合并,更具体的规则不会自动覆盖之前过宽的授权。只保留示例规则也可能导致其他设备间连接被拒绝,需要根据实际用途补充。
连接测试与故障排查
测试 Unraid WebGUI
使用浏览器打开:
http://100.101.102.103或者:
https://unraid.example-tailnet.ts.net测试 SMB 端口
在使用原生 Tailscale 客户端的 Mac 上运行:
nc -vz 100.101.102.103 445成功时一般会显示:
succeeded测试 Tailscale 路径
使用原生 Tailscale 客户端时:
tailscale ping unraid如果显示:
direct说明设备之间建立了点对点直连。
如果显示 DERP 或 relay,连接仍然经过加密,只是使用 Tailscale 中继,速度和延迟可能不如直连。
Surge 内置 Tailscale 可以在策略状态中查看当前节点、地址以及连接是 direct 还是 relay。DERP 是正常的备用连接状态,并不代表连接失败。
Surge 中看不到请求
检查以下规则是否位于其他可能提前匹配的规则之前:
DOMAIN-SUFFIX,example-tailnet.ts.net,Home TailnetIP-CIDR,100.64.0.0/10,Home Tailnet,no-resolve同时确认使用的是完整 MagicDNS 地址:
unraid.example-tailnet.ts.net如果访问的是家庭子网路由或 Tailscale IPv6 地址,还需要增加实际地址范围的规则。
Web 服务可用但 SMB 不通
依次检查:
- Unraid SMB 服务是否开启。
- 共享目录是否允许当前用户访问。
- TCP 445 是否被 Grants 或防火墙拦截。
- SMB 地址和共享名称是否填写正确。
- Surge 请求是否命中
Home Tailnet。 - 是否错误地将 SMB 流量发送到普通代理节点。
- Unraid 服务是否只监听某个局域网接口。
Docker 服务无法访问
如果服务使用 Unraid 宿主机端口,应访问:
Unraid 的 Tailscale IP:端口如果容器拥有独立的 192.168.x.x 地址,则需要:
- 配置并批准子网路由。
- 或让容器单独加入 Tailnet。
总结
通过 Tailscale,可以把分布在不同网络中的家庭 NAS、Mac mini、MacBook 和 iPhone 组成一个安全的虚拟局域网。
与公网端口映射相比,这套方案具有以下优势:
- 不依赖家庭宽带公网 IP。
- 不直接公开 NAS 管理后台。
- 不将 SMB 445 端口暴露给互联网。
- 设备之间基于 WireGuard 加密通信。
- Mac 可以继续使用 Surge。
- iPhone 可以在保持代理的同时访问 NAS。
- Finder 和“文件”App 可以直接使用 SMB。
- Docker 服务可以按设备、端口或容器精细授权。
真正需要注意的不是“安装 Tailscale 后会不会自动暴露公网”,而是避免主动开启 Funnel、保留公网端口映射、泄露 Auth Key,以及给所有设备过大的访问权限。
坚持不做公网端口映射、不对私人服务使用 Funnel、开启账户双重验证,并为 SMB 和 Tailnet 设置合理权限,就可以在安全性和使用便利之间取得较好的平衡。