发布于 2026 年 5 月 5 日· 8 分钟阅读

Tailscale:五分钟组建私有局域网,手机直连家里 NAS

TailscaleWireGuardVPN组网自托管NASSSH运维

这是什么

Tailscale 是基于 WireGuard 的组网工具。注册账号、在每台设备上装客户端、登录同一账号,这些设备就自动在同一个虚拟局域网里,每台设备分配一个 100.x.x.x 的 IP 地址,P2P 直连,延迟接近本地网络。

你能做什么:

  • 在咖啡馆 SSH 回家里的电脑
  • 手机访问家里 NAS 的文件管理界面
  • 公司电脑远程桌面家里的 Windows
  • 把 VPS 变成所有设备的流量出口

关键词(可以展开学习): WireGuard 协议、UDP 打洞(hole punching)、Mesh VPN、DERP 中继


免费版够用吗

限制项 免费版
账号数 1 个
设备数 最多 100 台
Exit Node(出口节点) 支持
Subnet Routes(子网路由) 支持
MagicDNS 支持

个人用完全够,不需要付费。


安装

手机 / 平板

iOS / Android 直接在应用商店搜 Tailscale,安装后用 Google 或 GitHub 账号登录。

Mac

brew install tailscale
sudo tailscale up

或者直接从 App Store 安装 Tailscale。

Linux(Ubuntu / Debian)

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

Windows

从 tailscale.com/download 下载安装包,安装后在系统托盘登录。


第一次连接

  1. 在每台设备上安装并登录同一个 Tailscale 账号
  2. 打开 Tailscale 控制台,看到所有设备及其 100.x.x.x IP
  3. 在任意设备上 ping 另一台:
ping 100.64.0.1        # 换成你目标设备的 Tailscale IP
ssh user@100.64.0.1   # SSH 直连,不用端口转发

能 ping 通则组网成功。

Tailscale 控制台机器列表和 Exit Node 指引


MagicDNS:按机器名访问,不用记 IP

控制台 → DNS → 开启 MagicDNS

开启后可以直接用机器名访问:

ssh user@my-homeserver          # 机器名
curl http://nas.tail12345.ts.net:8080  # 完整 Tailscale 域名

Exit Node:把 VPS 当成流量出口

如果你有一台 VPS,可以让所有设备的流量从 VPS 出去,类似 VPN 的效果。

→ 还没有 VPS?见《用 $6 VPS 搭建你的第一个服务器》

在 VPS 上开启 Exit Node:

# 开启内核 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

# 注册为 Exit Node
sudo tailscale up --advertise-exit-node

在控制台里批准: 找到这台 VPS → Edit route settings → 勾选 Use as exit node

在其他设备上使用:

# 命令行
sudo tailscale up --exit-node=100.x.x.x  # VPS 的 Tailscale IP

# 或者在 Tailscale App 图形界面里选择 Exit Node

现在你手机的所有流量都走 VPS 出去了。


Subnet Routes:访问家里整个内网

家里有路由器、NAS、智能设备,不想每台都装 Tailscale?在一台已安装的机器上开启子网路由:

# 假设家里内网是 192.168.1.0/24
sudo tailscale up --advertise-routes=192.168.1.0/24

在控制台批准这条路由后,Tailscale 网络里的其他设备都能直接访问 192.168.1.x 的设备,比如路由器管理界面 192.168.1.1。


和 Cloudflare Tunnel 的区别

两者解决的问题不同,可以同时用:

Tailscale Cloudflare Tunnel
访问者 只有你的 Tailscale 设备 任何人(公网)
是否需要域名 否(MagicDNS 自动分配) 是
延迟 P2P 直连,延迟极低 经过 Cloudflare 节点
适合 个人设备互访、私有服务 向公网用户提供服务

→ 见《Cloudflare Tunnel:免费内网穿透》


⚠️ 别让 Tailscale 成为唯一的远程通道

这是我用了大半年才补上的一课。

Tailscale 好用到你会不知不觉把它当成唯一的入口——家里那台机器在 NAT 后面、 没有公网 IP,除了 Tailscale 根本进不去。然后某天早上:

$ ssh pie
ssh: connect to host 100.87.41.13 port 22: Operation timed out

$ tailscale status
pie    offline, last seen 7h ago

机器本身好好的、网络也正常,就是节点掉线了。那次我是恰好人在家、能用局域网 IP 救回来;要是人在外面,就只能等回家插显示器。

最容易踩的一颗雷:node key 180 天到期

Tailscale 的节点密钥默认 180 天过期,到期节点自动登出、掉线,要重新授权。 日志里长这样:

setClientStatus: netmap expiry timer triggered after 11h45m35s
Switching ipn state Running -> NeedsLogin
control: server reports new node key has expired

对笔记本、手机这种天天用的设备无所谓——你一眼就发现了。但对无人值守的常驻设备 (家里的 NAS、树莓派、机房的服务器),这等于埋了个 180 天定时炸弹,而且偏偏在你 不在场的时候引爆。

解法是在管理后台给这些设备关掉过期:

https://login.tailscale.com/admin/machines
→ 选中节点 → ⋯ → Disable key expiry

关掉之后列表里会显示 Expiry disabled。CLI 没有对应命令,只能在网页或 API 上操作。

顺带一提,tailscale login 重新授权只是把 key 续了 180 天,到期还会再来一次。 我第一次排查时误以为是 Tailscale 自动更新(auto-update)导致的登出,关掉自动更新 就完事了——结果那只是同一时间发生的另一件事,真正的原因是 key 到期。 排查时别停在最显眼的那条日志上,往前找状态迁移(Switching ipn state)。

给自己留第二条路

关掉 key expiry 只是堵住了一个已知触发点。更稳的做法是准备一条不依赖 Tailscale 的带外通道——让家里的机器主动向一台有公网 IP 的 VPS 建反向 SSH 隧道:

# 家里的机器主动外连(所以不需要公网 IP、不用做端口转发)
ssh -N -T -R 127.0.0.1:22022:127.0.0.1:22 user@your-vps

之后从任何地方:

ssh -J your-vps -p 22022 pi@127.0.0.1

做成 systemd 服务(Restart=always)就能开机自启、断线自愈。几个关键细节:

  • -R 只绑 127.0.0.1,配合 sshd 默认的 GatewayPorts no,隧道端口不会暴露公网
  • VPS 的 authorized_keys 里那把 key 要锁死: restrict,port-forwarding,permitlisten="127.0.0.1:22022",command="sleep infinity" ——即使私钥泄漏,拿到的也只是一个 sleep,开不了别的端口、执行不了任何命令
  • VPS 上必须设 ClientAliveInterval 30(默认 0 是不检测)。否则家里机器闪断后, 旧连接在 VPS 上变成死连接、一直占着 22022,新隧道再也建不起来——救命通道恰好 在最需要它的时候不可用
  • 客户端加 ExitOnForwardFailure=yes:端口没抢到就立刻退出让 systemd 重来, 而不是挂着一个没有隧道的连接、假装还活着

跳板选国内还是国外,差别比想象中大。 我一开始随手用了日本的 VPS,端到端建连要 6 秒;换成国内的机器之后变成 0.2 秒——因为数据不用再绕出去一圈,而家里那台机器 本来就在同城。两端 RTT 都要看:

            我→跳板    家里机器→跳板
国内 VPS      50 ms         52 ms
日本 VPS     218 ms        368 ms

最后,mosh 走不了这条隧道:mosh 靠 UDP 60000-61000 直连,而 SSH 的 -R 只转发 TCP。要 mosh 就还得走 Tailscale 或局域网。

常见问题

两台设备 ping 不通?
检查两台设备是否都显示在控制台且状态为 Connected。有时防火墙会阻止 UDP(WireGuard 用的协议)。如果 P2P 失败,Tailscale 会自动改用 DERP 中继,速度慢一点但仍然能通。

Tailscale 会看到我的流量吗?
不会。WireGuard 是端对端加密的,Tailscale 的服务器只负责帮设备找到彼此,流量本身走 P2P,Tailscale 无法解密。

手机关了 Tailscale 还能访问吗?
不能。需要 Tailscale 在后台运行,iOS 上记得允许后台刷新。