如果你有 NAS、家里的小主机、云服务器、办公室电脑,或者经常需要在外面连回家里的设备,大概率都遇到过这些问题:没有公网 IP、路由器端口映射麻烦、动态域名不稳定、公司网络拦截奇怪、SSH 暴露公网不放心。Tailscale 要解决的,就是这类“设备明明都是我的,却很难安全互相访问”的问题。
一句话概括:Tailscale 是一个基于 WireGuard 的私有组网工具。你把手机、电脑、NAS、VPS 都登录进同一个 Tailscale 网络里,它们就像处在同一个安全内网,可以互相访问,但不需要你手动配置传统 VPN 服务器,也通常不需要端口转发。
一、先用生活化方式理解 Tailscale
可以把 Tailscale 想象成一个只属于你的“隐形局域网”。你的 Mac、Windows 电脑、Linux 服务器、iPhone、Android 手机、群晖 NAS、软路由,只要装上 Tailscale 并登录到同一个账号或组织,它们就会进入同一个私有网络。这个私有网络在 Tailscale 里叫 tailnet。
加入 tailnet 以后,每台设备都会得到一个 Tailscale 内网 IP,常见是 100.x.x.x 这种地址。你可以用这个地址访问设备,也可以开启 MagicDNS 后用设备名访问,比如:
ssh root@home-server
http://nas:5000
rdp://office-pc
传统 VPN 往往是“所有人先连到一个中心服务器,再从这个中心服务器转发出去”。Tailscale 的思路更像“每台设备都知道该怎么安全找到另一台设备”。网络条件允许时,两台设备会尽量直连;直连不行时,再通过 Tailscale 的中继网络兜底。安全上,连接仍然由 WireGuard 加密。
二、Tailscale 到底适合什么场景
Tailscale 不是只给企业用的东西,个人用户反而很容易感受到它的价值。下面这些场景非常典型。
1. 在外访问家里的 NAS、小主机、软路由
这是最常见的个人场景。很多家庭宽带没有公网 IPv4,或者公网 IP 经常变化。用 Tailscale 后,你不需要折腾端口映射,也不用把 NAS 后台直接暴露到互联网。手机、笔记本连上 Tailscale,就可以访问家里 NAS 的相册、文件、Docker 服务、Home Assistant、Jellyfin、Immich 等应用。
2. 安全管理云服务器
如果你有几台 VPS,最推荐的做法是:SSH 端口不对公网开放,服务器加入 Tailscale,只允许从 tailnet 里访问。这样你的服务器管理面板、数据库、Redis、内网 API 都可以只监听内网或 Tailscale 地址,减少公网扫描和爆破风险。
3. 多地设备互联
家里一台 NAS、办公室一台电脑、云上一台服务器、朋友家一台备份机,物理位置完全不同,但加入同一个 tailnet 后,就能像在同一个内网里互相通信。对个人备份、异地容灾、开发测试都很方便。
4. 访问整个局域网,而不是只访问一台设备
有些设备不能安装 Tailscale,比如打印机、摄像头、某些路由器后台、老旧工控设备。这时可以把一台 Linux 小主机、NAS 或软路由设置成 子网路由器。它会把整个局域网网段发布到 tailnet 里,让外面的设备访问 192.168.1.0/24 这类内网地址。
5. 出口节点:让某台设备替你出网
出口节点可以理解为“把某台 Tailscale 设备当作网关”。比如你在外面用公共 Wi-Fi,希望流量从家里的软路由或自己的 VPS 出去,就可以启用出口节点。它不等同于访问某个内网服务,而是让当前设备的网络出口走另一台设备。
6. 临时分享本地服务
开发时你本机跑了一个网页、API 或测试服务,想让同一个 tailnet 里的设备访问,可以用 Tailscale Serve。它适合“只分享给自己或团队内部”。如果确实要公开给互联网上任何人访问,可以看 Tailscale Funnel,但 Funnel 是公开入口,要谨慎使用。
三、几个核心概念
| 概念 | 通俗解释 | 你什么时候会用到 |
|---|---|---|
| Tailnet | 你的私有 Tailscale 网络 | 所有设备都加入这里 |
| Device / Node | 加入 tailnet 的一台设备 | 电脑、手机、NAS、服务器 |
| MagicDNS | 用设备名代替 IP | 用 ssh nas 代替记 IP |
| ACL / Grants | 访问权限规则 | 控制谁能访问哪台设备和端口 |
| Subnet Router | 把一个局域网网段接入 tailnet 的网关 | 访问不能安装 Tailscale 的设备 |
| Exit Node | 让其他设备通过它访问互联网 | 公共网络、异地出口、集中出口 |
| Tailscale SSH | 用 Tailscale 身份控制 SSH | 减少 SSH 密钥分发和公网暴露 |
| Serve / Funnel | 分享本地服务 | 内网分享用 Serve,公网分享看 Funnel |
这里最容易混淆的是“子网路由”和“出口节点”。子网路由是让你访问某个内网网段,比如 192.168.1.10 的 NAS 后台;出口节点是让你所有或部分互联网流量从另一台设备出去。前者是“访问里面”,后者是“从那里出去”。
四、基础部署:两台设备互通
最简单的部署目标是:手机和家里的服务器都加入 Tailscale,然后手机可以访问服务器。
第 1 步:注册并创建 tailnet
打开 tailscale.com,用 Google、Microsoft、GitHub、Apple 或邮箱登录。第一次登录后,Tailscale 会为你创建一个 tailnet。个人用户通常不需要先配置复杂策略,先让设备互通,再逐步收紧权限。
第 2 步:在电脑和手机安装客户端
Windows、macOS、iOS、Android 都有官方客户端。安装后登录同一个账号,设备就会出现在 Tailscale 管理后台的 Machines 页面里。
Linux 服务器上可以用官方安装脚本:
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
执行 sudo tailscale up 后,终端会给出一个登录链接。打开链接完成授权,服务器就加入 tailnet 了。
第 3 步:检查连接状态
tailscale ip
tailscale status
tailscale ip 会显示这台设备的 Tailscale IP,tailscale status 会列出当前 tailnet 里的设备。你可以在另一台设备上直接访问这个 IP,例如:
ssh root@100.x.x.x
curl http://100.x.x.x:8080
如果开启了 MagicDNS,也可以直接使用设备名:
ssh root@home-server
curl http://home-server:8080
五、服务器长期在线:Auth Key、主机名和过期问题
普通电脑和手机可以手动登录,但服务器、Docker 容器、云主机更适合用 Auth Key 自动加入 tailnet。思路是:先在 Tailscale 管理后台创建一个密钥,然后在服务器上用这个密钥登录。
sudo tailscale up --auth-key=tskey-auth-你的密钥 --hostname=home-server
如果这是一台长期在线的 NAS、软路由或服务器,可以在 Machines 页面里给它关闭 key expiry,避免隔一段时间要求重新认证。但这只适合可信设备;如果设备丢失或系统被入侵,要立刻在后台移除它。
对于团队或生产环境,更推荐配合 tags 使用,例如 tag:server、tag:nas,然后用访问控制规则限制它能访问什么。
六、开启 MagicDNS:别再记 IP
MagicDNS 的价值很直接:你不用记住每台设备的 100.x.x.x 地址。比如服务器名叫 home-server,NAS 名叫 nas,以后就可以直接访问:
ssh root@home-server
http://nas:5000
http://home-assistant:8123
通常新建的 tailnet 会默认启用 MagicDNS。如果没有启用,可以在 Tailscale 管理后台的 DNS 页面打开。建议同时把设备名称整理好:macbook、nas、vps-sg、home-router 这种名字比一串默认主机名好维护。
七、配置子网路由:访问整个家里局域网
假设你的家里局域网是 192.168.1.0/24,你想在外面访问家里所有设备。可以选择一台一直开机的 Linux 设备,比如 NAS、软路由、Raspberry Pi、小主机,安装 Tailscale 后把它设置成子网路由器。
先开启 IP 转发:
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
再发布你家里的网段:
sudo tailscale set --advertise-routes=192.168.1.0/24
然后去 Tailscale 管理后台的 Machines 页面,找到这台设备,进入 route settings,把 192.168.1.0/24 勾选启用。其他客户端如果需要使用这条路由,Linux 上可以执行:
sudo tailscale set --accept-routes=true
macOS、Windows、手机端通常在客户端设置里打开“接受子网路由”或类似选项。完成后,你在外面就能访问家里内网地址,例如 http://192.168.1.10:5000。
八、配置出口节点:让一台设备成为网络出口
出口节点常见放在 VPS、家中软路由、海外服务器或办公室网关上。它会把其他设备的流量转发出去,所以这台机器的带宽、稳定性和可信程度很重要。
Linux 上先开启 IP 转发:
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf
然后把这台设备声明为出口节点:
sudo tailscale set --advertise-exit-node
接着到 Tailscale 管理后台 Machines 页面,找到这台设备,在 route settings 里勾选 Use as exit node。客户端使用时,在 Tailscale 客户端里选择这个出口节点即可。Linux 客户端也可以用命令:
sudo tailscale set --exit-node=你的出口节点名称
如果你使用出口节点时还想访问当前所在地的局域网,比如打印机或路由器后台,客户端里要打开“允许局域网访问”类似选项。
九、Tailscale SSH:别急着把 22 端口暴露公网
如果你主要用 Tailscale 管理服务器,可以考虑开启 Tailscale SSH。它让 Tailscale 根据 tailnet 身份和访问控制策略来管理 SSH 连接,减少手动分发 SSH 公钥的麻烦。
sudo tailscale set --ssh
开启后,还需要在 Tailscale 的访问控制策略里允许哪些用户可以 SSH 到哪些设备。个人使用时可以先保持简单;多人团队里,建议按用户组、标签、端口和登录用户做最小权限控制。
即使不用 Tailscale SSH,也建议让服务器 SSH 只监听内网或只允许 Tailscale 地址访问。这样公网扫描不到你的 SSH 服务,安全压力会小很多。
十、Serve 与 Funnel:分享本地服务
如果你在本机跑了一个服务,比如 localhost:3000,想让 tailnet 里的其他设备访问,可以用 Tailscale Serve:
tailscale serve 3000
Serve 的重点是“只在 tailnet 内分享”。适合开发预览、临时后台、家庭服务入口。
Funnel 则是公开到互联网,任何人都可能访问。它适合临时展示一个网页、接收 webhook、演示 demo,但不要随便把管理后台、数据库、NAS 面板直接 Funnel 出去。公开入口一定要有应用自身的认证和访问限制。
十一、访问控制:别长期使用默认全通
个人刚开始试用时,默认全通最省心。但只要设备变多,或者有家人、朋友、同事加入,就应该认真配置访问控制。Tailscale 现在更推荐使用 Grants,ACL 也仍然可用。
一个最基本的思路是:
- 手机和笔记本可以访问 NAS 的 Web 服务。
- 只有自己的主力电脑可以 SSH 到服务器。
- 访客设备只能访问指定服务,不能扫整个 tailnet。
- 服务器之间只开放必要端口,比如数据库只允许应用服务器访问。
如果你不知道怎么写策略,至少记住一句话:能用设备标签和用户组表达清楚的权限,不要靠脑子记。
十二、常见问题排查
| 问题 | 优先检查 |
|---|---|
| 设备看不到彼此 | 是否登录同一个 tailnet,Machines 页面里设备是否在线。 |
| 能看到设备但服务打不开 | 目标设备本身有没有启动服务,防火墙是否允许 Tailscale 网卡访问。 |
| MagicDNS 名称不好用 | DNS 页面是否开启 MagicDNS,设备名是否正确,客户端是否使用 Tailscale DNS。 |
| 访问速度慢 | 运行 tailscale status 或 tailscale ping 设备名,看是 direct 还是 relay。 |
| 子网路由访问不了 | 是否开启 IP 转发,后台是否批准路由,客户端是否接受路由。 |
| 出口节点不能用 | 是否开启 IP 转发,后台是否勾选 Use as exit node,客户端是否选择该出口。 |
| 服务器重启后失联 | tailscaled 服务是否自启动,设备 key 是否过期。 |
判断连接走直连还是中继,可以用:
tailscale status
tailscale ping 另一台设备名
如果一直显示 relay,通常不是安全问题,而是网络环境导致无法直连。中继仍然可用,只是速度和延迟可能不如直连。
十三、我的推荐部署方案
个人或小团队可以按这个顺序来:
- 先在手机、主力电脑、NAS 或服务器上安装 Tailscale,确认基础互通。
- 开启 MagicDNS,把设备名整理清楚。
- 服务器关闭公网管理入口,只通过 Tailscale 访问 SSH、面板、数据库。
- 家里放一台长期在线设备作为子网路由器,接入
192.168.1.0/24。 - 需要统一出口时,再选择 VPS 或软路由做出口节点。
- 设备超过五六台后,开始写 ACL 或 Grants,逐步从默认全通改成最小权限。
如果只是个人使用,Tailscale 最大的价值不是“更快”,而是“省掉大量网络折腾”。它把公网 IP、端口映射、动态域名、传统 VPN 网关、SSH 暴露公网这些问题收拢成一个更容易管理的私有网络。只要理解 tailnet、MagicDNS、子网路由、出口节点这几个概念,后面就能按自己的设备结构慢慢扩展。
参考资料
- Tailscale 官方文档:What is Tailscale?
- Tailscale 官方文档:What is a tailnet?
- Tailscale 官方文档:Install Tailscale on Linux
- Tailscale 官方文档:Configure a subnet router
- Tailscale 官方文档:Use exit nodes
- Tailscale 官方文档:Tailscale SSH
- Tailscale 官方文档:Tailscale Serve
- Tailscale 官方文档:Tailscale Funnel
- Tailscale 官方文档:Connection types