Tailscale 是一个基于 WireGuard 的组网工具,可以让分散在不同网络中的电脑、服务器、手机和 NAS 像处于同一个局域网一样互相访问。它最大的特点是:不需要自己搭建传统 VPN 服务器,也不需要公网 IPv4,就可以实现设备之间的安全互联。对于家庭服务器、NAS、开发环境以及异地访问内网服务来说,Tailscale 是一个非常方便的方案。
一、Tailscale 是怎么工作的
传统的远程访问方案通常需要:
公网 IP
↓
路由器端口转发
↓
VPN / SSH / Web 服务
↓
内网设备
如果运营商没有提供公网 IPv4,就会变得比较麻烦。
例如家庭宽带可能是:
Internet
│
运营商 NAT
│
家庭路由器
│
192.168.1.0/24
│
服务器
此时外部设备无法直接通过公网 IPv4 访问家里的服务器。
Tailscale 的思路不一样:
Tailscale 网络
│
┌──────────┼──────────┐
│ │ │
Windows Mac 手机
│ │ │
└────── WireGuard ────┘
│
家庭服务器
每台加入 Tailnet 的设备都会获得一个 Tailscale IP。
例如:
Windows 100.x.x.10
Mac 100.x.x.20
服务器 100.x.x.30
手机 100.x.x.40
这些设备之间可以直接通信。
二、Tailscale 和传统 VPN 的区别
Tailscale 底层使用 WireGuard,但它并不是简单地给 WireGuard 加了一层 UI。
传统 WireGuard 通常需要自己管理:
- 密钥
- Peer
- IP 地址
- 路由
- NAT
- 端口
- 配置文件
例如 WireGuard 可能需要维护:
[Peer]
PublicKey = xxx
AllowedIPs = 10.0.0.2/32
Endpoint = xxx.xxx.xxx.xxx:51820
设备一多,维护成本会明显增加。
Tailscale 会帮助处理这些事情:
设备身份
↓
密钥管理
↓
设备发现
↓
WireGuard 加密连接
↓
NAT 穿透
↓
路由管理
所以可以把它理解成:
WireGuard + 身份认证 + 自动组网 + NAT 穿透 + 管理控制台
三、安装 Tailscale
3.1 Windows
Windows 可以直接下载安装 Tailscale 客户端。
安装完成后登录账号即可。
登录之后,在 PowerShell 中执行:
tailscale status
可以看到当前 Tailnet 中的设备。
例如:
100.100.100.10 desktop
100.100.100.20 server
100.100.100.30 macbook
3.2 macOS
macOS 可以使用 Homebrew:
brew install --cask tailscale
也可以安装官方客户端。
登录之后可以执行:
tailscale status
3.3 Linux
以 Ubuntu 为例:
curl -fsSL https://tailscale.com/install.sh | sh
然后启动:
sudo tailscale up
命令执行后会出现登录地址。
打开浏览器完成认证即可。
检查状态:
tailscale status
查看自己的 Tailscale IP:
tailscale ip
例如:
100.106.198.118
四、最基本的使用方式
假设现在有三台设备:
Windows
100.100.100.10
Mac
100.100.100.20
Linux Server
100.100.100.30
在 Windows 上:
ping 100.100.100.30
如果服务器开启 SSH:
ssh root@100.100.100.30
如果服务器上运行了 Web 服务:
http://100.100.100.30:8080
也可以直接访问。
这里有一个非常重要的特点:
不需要给 8080 做公网端口映射。
服务依然只需要监听服务器本身的网络接口。
五、MagicDNS
直接记住
100.100.100.30
当然可以,但设备多以后 IP 很难记。
Tailscale 提供了 MagicDNS。
开启之后,可以使用设备名称访问。
例如:
ssh root@server
或者:
ping server
而不是:
ssh root@100.100.100.30
可以把它理解成:
server
↓
MagicDNS
↓
100.100.100.30
对于家庭服务器尤其方便。
例如:
nas
server
docker
macbook
windows
可以直接通过设备名称访问。
六、Tailscale 的核心:Tailnet
Tailscale 中有一个非常重要的概念:
Tailnet
可以简单理解为:
属于同一个账号/组织的私有网络。
例如:
My Tailnet
├── MacBook
├── Windows
├── Home Server
├── NAS
├── Phone
└── Cloud Server
这些设备默认可以通过 Tailscale 网络进行通信。
每台设备都有自己的身份和密钥。
因此 Tailscale 不只是:
IP → IP
而更接近:
User / Device Identity
↓
Tailnet
↓
Network Policy
↓
Device Access
七、子网路由 Subnet Router
这是 Tailscale 非常实用的功能之一。
假设家庭网络:
192.168.1.0/24
但是只有服务器安装了 Tailscale:
Internet
│
│
Tailscale
│
100.x.x.x
│
Home Server
│
192.168.1.100
│
192.168.1.0/24
├── NAS
├── 摄像头
├── 路由器
├── TV
└── 其他设备
此时可以让 Home Server 作为:
Subnet Router
这样其他 Tailscale 设备就可以访问整个家庭局域网。
7.1 Linux 配置 Subnet Router
首先打开 IP Forwarding:
sudo sysctl -w net.ipv4.ip_forward=1
永久生效:
sudo nano /etc/sysctl.conf
加入:
net.ipv4.ip_forward = 1
然后:
sudo sysctl -p
启动 Tailscale:
sudo tailscale up --advertise-routes=192.168.1.0/24
这里:
192.168.1.0/24
就是你希望通过 Tailscale 暴露的局域网网段。
然后进入 Tailscale 管理后台批准这个 Route。
八、Subnet Router 的实际用途
比如家里的 NAS:
NAS
192.168.1.10
NAS 没有安装 Tailscale。
但是服务器:
Server
192.168.1.100
100.x.x.x
安装了 Tailscale,并且作为 Subnet Router。
那么外面的电脑:
Laptop
100.x.x.x
就可以:
ssh root@192.168.1.100
甚至访问:
http://192.168.1.10
也就是说:
只有一台设备安装 Tailscale,就可以让整个局域网被安全访问。
这对于 NAS、家庭服务器、打印机、摄像头等设备非常有用。
九、Exit Node
Subnet Router 是:
外部设备
↓
家庭网络
而 Exit Node 则反过来解决:
外部设备
↓
家庭服务器
↓
Internet
例如:
Laptop
│
│ Tailscale
↓
Home Server
│
↓
Internet
此时 Laptop 的互联网流量可以通过家庭服务器出去。
家庭服务器就是:
Exit Node
9.1 配置 Exit Node
Linux:
sudo tailscale up --advertise-exit-node
然后在管理后台批准该设备作为 Exit Node。
客户端选择:
Exit Node
↓
Home Server
之后:
Laptop
↓
Tailscale
↓
Home Server
↓
Internet
十、Exit Node 和 Subnet Router 的区别
这两个概念很容易混。
Subnet Router
主要用于访问指定的内网:
Laptop
↓
Tailscale
↓
192.168.1.0/24
Exit Node
让互联网流量都从指定设备出去:
Laptop
↓
Tailscale
↓
Home Server
↓
Internet
可以简单记:
Subnet Router = 访问内网
Exit Node = 借道上网
十一、ACL:控制谁可以访问谁
当设备越来越多之后,仅仅让所有设备互通并不是一个好方案。
例如:
管理员电脑
↓
服务器
普通设备
↓
只能访问 Jellyfin
这时候就需要 ACL。
ACL 可以定义:
谁
↓
可以访问
↓
哪台设备
↓
哪个端口
例如:
开发电脑
↓
server:22
server:3000
server:8080
而手机可能只允许:
phone
↓
jellyfin:8096
这样即使手机加入 Tailnet,也不能随意访问服务器上的其他服务。
十二、使用标签管理服务器
设备多了以后,可以使用 Tags。
例如:
tag:server
tag:nas
tag:dev
tag:production
然后 ACL 可以针对 Tag 设置规则。
例如:
developer
↓
tag:dev
admin
↓
tag:server
这种方式比一个个写设备名称更加容易维护。
十三、Tailscale SSH
Tailscale 还提供了 Tailscale SSH。
传统 SSH:
ssh root@100.x.x.x
通常还需要:
用户名
密码 / SSH Key
端口
防火墙
Tailscale SSH 可以把身份认证和 Tailscale 身份结合起来。
例如:
ssh server
访问链路变成:
User
↓
Tailscale Identity
↓
ACL
↓
Tailscale SSH
↓
Server
这样可以减少自己维护 SSH 公钥的工作。
不过生产环境仍然应该根据实际安全策略决定是否启用。
十四、Tailscale Funnel
Tailscale 默认解决的是:
私有网络
但 Funnel 可以把服务暴露到公网。
例如:
Internet
↓
Tailscale Funnel
↓
Your Server
↓
Web Application
这和普通 Tailscale 网络最大的区别是:
普通 Tailscale
只有 Tailnet 成员能够访问。
Funnel
互联网用户也可以访问。
因此 Funnel 应该谨慎使用。
如果只是:
自己访问
家人访问
开发环境访问
通常不需要 Funnel。
十五、Serve
Serve 和 Funnel 也容易混淆。
Serve 更适合:
Tailscale 网络内部
↓
某个 Web 服务
例如服务器上:
localhost:3000
可以通过 Tailscale Serve 暴露到 Tailnet。
整体结构:
Browser
↓
Tailscale
↓
Serve
↓
localhost:3000
这意味着 Web 服务甚至不一定需要直接监听:
0.0.0.0
可以继续保持:
127.0.0.1:3000
然后由 Tailscale 负责访问。
十六、Docker 中使用 Tailscale
Tailscale 和 Docker 配合非常常见。
例如服务器:
Server
├── Docker
│ ├── Jellyfin
│ ├── Sonarr
│ ├── Radarr
│ ├── qBittorrent
│ └── n8n
│
└── Tailscale
最简单的方式是:
Tailscale
│
↓
Server
│
↓
Docker Port
例如:
100.x.x.x:8096
↓
Jellyfin
↓
Docker
↓
8096
然后通过:
http://100.x.x.x:8096
访问。
这种方式非常简单,也不需要把每个 Docker 容器都加入 Tailnet。
十七、Docker + Tailscale 更复杂的场景
如果希望:
Tailscale
↓
Docker Network
↓
多个容器
可以考虑把 Tailscale 放到专门的容器中。
例如:
Tailscale Container
│
│
┌────────┴────────┐
│ │
Web Container API Container
这种方案可以让 Tailscale 成为 Docker 网络入口。
但同时会涉及:
- network namespace
- IP forwarding
- iptables
- subnet routing
- container capabilities
因此如果只是家庭服务器访问,通常没必要一开始就搞这么复杂。
十八、Kubernetes 中使用 Tailscale
在 Kubernetes 中,Tailscale 可以用来连接:
开发环境
↓
Kubernetes
↓
Service
例如:
Laptop
│
│ Tailscale
↓
Kubernetes
│
├── authing-api
├── postgres
├── redis
└── elasticsearch
这样开发人员可以直接访问集群内部资源,而不需要:
公网 LoadBalancer
公网 IP
端口暴露
VPN 网关
Tailscale 还提供 Kubernetes Operator,可以将 Tailscale 的能力集成到 Kubernetes 中。
对于:
家庭 K8s
开发 K8s
私有云
测试环境
非常方便。
十九、Tailscale 的 NAT 穿透
Tailscale 好用的一个重要原因就是 NAT Traversal。
假设:
设备 A
192.168.1.10
│
NAT
│
Internet
│
NAT
│
设备 B
192.168.2.20
两个设备都没有公网 IP。
Tailscale 会尝试建立:
A ←──────→ B
的直接连接。
如果 NAT 条件允许,就使用:
Direct Connection
如果无法直接建立连接,则可能通过:
DERP Relay
进行中继。
所以:
优先:
Device A ←──────→ Device B
无法直连:
Device A → DERP → Device B
这也是为什么即使没有公网 IPv4,Tailscale 通常依然可以工作。
二十、如何查看当前连接方式
执行:
tailscale status
可以看到设备状态。
还可以使用:
tailscale ping <device>
例如:
tailscale ping server
可以帮助判断连接是否为:
direct
还是:
relay
如果两个设备都在不同运营商网络下,发现连接走 DERP,不代表配置错误。
它通常意味着:
两端之间无法建立合适的直连路径。
二十一、为什么 Tailscale 不需要开放端口
传统 VPN 经常需要:
UDP 51820
然后路由器:
公网 IP:51820
↓
内网服务器:51820
Tailscale 会尽量利用已有的出站连接完成 NAT 穿透。
所以家庭网络通常不需要:
端口映射
公网 IPv4
VPN 服务端口
这也是它非常适合家庭宽带的原因。
二十二、家庭服务器推荐架构
如果你有一台家庭服务器,可以设计成:
Internet
│
┌───────┴───────┐
│ │
Tailscale Caddy
│ │
│ 公网服务
│
Home Server
│
┌───────────┼───────────┐
│ │ │
Docker NAS K8s
│
┌──────┼──────┬──────┐
│ │ │ │
Jellyfin Sonarr Radarr n8n
其中:
Tailscale
↓
负责私人访问
Caddy
↓
负责公网 Web 服务
两者职责分开。
二十三、Tailscale + Caddy
如果已经使用 Caddy,那么可以形成:
公网用户
↓
Caddy
↓
公网服务
而自己的管理服务:
自己
↓
Tailscale
↓
内网服务
例如:
公网:
blog.example.com
↓
Caddy
↓
Blog
私网:
admin.internal.example.com
↓
Tailscale
↓
Admin Panel
这样很多管理后台根本不需要暴露到公网。
例如:
Grafana
Portainer
Proxmox
NAS 管理后台
Kubernetes Dashboard
数据库管理工具
都可以优先考虑放在 Tailscale 网络中。
二十四、Tailscale + PostgreSQL
这是开发环境非常实用的一种方式。
例如服务器:
PostgreSQL
192.168.1.20:5432
通过 Subnet Router 或直接安装 Tailscale 后:
开发电脑
↓
Tailscale
↓
PostgreSQL
开发电脑可以直接使用:
Host: 100.x.x.x
Port: 5432
然后:
TablePlus
DBeaver
DataGrip
都可以通过 Tailscale 访问数据库。
相比直接开放:
5432
到公网,这种方式安全边界更加清晰。
二十五、Tailscale + SSH
远程维护服务器时:
ssh user@100.x.x.x
相比:
公网 IP
↓
22
↓
SSH
Tailscale 可以把 SSH 服务限制在 Tailnet 网络中。
例如:
Internet
X
│
│ 不开放 SSH
│
Server
│
└── Tailscale
↑
│
Laptop
这样服务器的公网防火墙甚至可以完全禁止:
TCP 22
只允许 Tailscale 网络访问 SSH。
二十六、常见问题排查
1. tailscale status 看不到设备
检查:
tailscale status
然后确认:
tailscale netcheck
检查网络环境。
2. 可以看到设备但是无法访问
先测试:
tailscale ping <device>
然后测试:
ping 100.x.x.x
如果:
tailscale ping
成功,但是:
ping
失败,需要继续检查:
- 系统防火墙
- ICMP
- Tailscale ACL
- 服务监听地址
- Docker 网络
- 路由
3. SSH 连接失败
检查:
ss -lntp | grep 22
确认 SSH 是否监听。
然后:
ssh user@100.x.x.x
如果服务只监听:
127.0.0.1:22
那么其他设备无法直接访问。
4. Subnet Router 不生效
检查:
tailscale status
确认路由是否发布。
然后:
tailscale debug prefs
检查配置。
同时确认:
net.ipv4.ip_forward
是否开启。
二十七、Tailscale 常用命令
查看状态:
tailscale status
查看 IP:
tailscale ip
检查网络:
tailscale netcheck
测试其他设备:
tailscale ping <device>
启动:
sudo tailscale up
退出:
sudo tailscale down
重新认证:
sudo tailscale up
查看当前配置:
tailscale debug prefs
查看版本:
tailscale version
二十八、实际使用时的一套思路
第一步:
电脑
服务器
手机
全部安装 Tailscale。
确认:
tailscale status
可以看到彼此。
第二步,开启:
MagicDNS
让设备可以通过名称访问。
第三步,把:
SSH
数据库
内部 Web 服务
逐渐迁移到 Tailscale 网络。
第四步,如果需要访问整个家庭局域网:
Subnet Router
第五步,如果需要让所有互联网流量经过家庭网络:
Exit Node
第六步,设备越来越多之后:
ACL
Tags
开始限制访问权限。
二十九、一个比较完整的家庭网络架构
最终可以形成:
Internet
│
┌─────────────┴─────────────┐
│ │
Caddy Tailscale
│ │
公网 Web 服务 Private Network
│
┌────────────────────┼───────────────────┐
│ │ │
Laptop Phone Server
│
┌───────────────────┼─────────────┐
│ │ │
Docker NAS K8s
│
┌──────────┼──────────┐
│ │ │
Jellyfin n8n Database
其中:
Caddy
负责:
公网服务
HTTPS
反向代理
而:
Tailscale
负责:
私人网络
远程访问
SSH
数据库
管理后台
家庭内网
两者配合起来会非常舒服。
三十、总结
Tailscale 真正解决的并不是“如何搭一个 VPN”这么简单的问题。
它解决的是:
如何让分散在不同网络中的设备,以一种简单、安全、低维护成本的方式组成一个私有网络。
最值得掌握的几个功能可以记成:
Tailscale
│
├── 基础组网
│
├── MagicDNS
│
├── Subnet Router
│
├── Exit Node
│
├── ACL
│
├── Tags
│
├── Tailscale SSH
│
├── Serve
│
├── Funnel
│
└── Kubernetes / Docker
如果只是个人使用,最常见的组合其实非常简单:
Tailscale
+
MagicDNS
+
ACL
家庭服务器进一步加入:
Subnet Router
需要远程访问全部互联网流量时再考虑:
Exit Node
而公网业务则继续交给:
Caddy / Nginx / Cloudflare
这样网络边界会比较清晰,也不会为了访问一个内部服务,把一堆端口直接暴露到公网。
