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