Logo

Tailscale完全指南:从入门到高阶玩法

Published on
...
Authors

一、背景介绍

Tailscale 是一款基于 WireGuard 的现代化组网工具,可以帮助你在任何网络环境下安全地连接所有设备。无论你是想远程访问家里的 NAS、连接办公室的开发环境,还是在多个云服务器之间建立私有网络,Tailscale 都能简单高效地完成。

最近随着 vibe coding 的大行其道,越来越多开发者希望在外也能直接连回自己的主力电脑,调用本地开发环境、模型和自动化脚本。这个场景让「稳定、安全、跨网络」的远程连接需求迅速放大,也让 Tailscale 的关注度明显升温。

然而,在中国大陆使用时,由于官方 DERP 服务器位于海外,连接速度通常很慢。本指南将从基础到高阶,全面介绍 Tailscale 的使用方法,包括自建 DERP 服务器优化连接速度。

💡 延伸阅读: 如果你想了解如何将 Mac Mini 作为家庭云服务器并配合 Tailscale 使用,可以参考 Mac Mini 上云:打造属于自己的私有云工作站。关于在 VPS 上部署更多服务,可以参考 阿里云VPS打造家庭网络中枢


二、Tailscale 核心概念

2.1 什么是 Tailnet?

Tailnet 是你的私有 Tailscale 网络,所有加入同一 Tailnet 的设备都可以相互访问。每个设备会获得一个 100.x.x.x 段的唯一 IP 地址。

2.2 连接类型说明

Tailscale 连接通常有四种方式(按优先级):

  1. 直接连接(Direct): 设备间直接建立 P2P 连接,速度最快
  2. STUN 打洞: 通过 STUN 协议穿透 NAT 实现 P2P 连接
  3. Peer Relay: 无法直连时的 UDP 中继,通常优先于 DERP
  4. DERP 中继: 最后回退路径,通过 DERP 服务器中继连接

2.3 什么是 DERP?

DERP (Designated Encrypted Relay for Packets) 是 Tailscale 使用的中继服务器。特点如下:

  • 处理 NAT 穿透失败的情况
  • 提供 STUN 服务协助 P2P 连接建立
  • 中继数据采用端到端加密,服务器无法解密
  • 提高连接成功率和稳定性

三、各平台安装指南

3.1 macOS 安装

有三种方式安装 Tailscale:

  1. 推荐方式:从官网下载

    # 访问 https://tailscale.com/download 下载 Mac 安装包
    
  2. App Store 安装

    Mac App Store 搜索 "Tailscale" 并安装
    
  3. 命令行安装(高级用户):

    brew install tailscale
    

安装后,点击菜单栏图标并登录你的 Tailscale 账户。

3.2 iOS/iPadOS 安装

  1. 在 App Store 中搜索 "Tailscale"
  2. 安装后打开应用
  3. 点击 "Get Started"
  4. 允许 VPN 配置安装
  5. 使用 SSO 身份提供商登录

3.3 Android 安装

  1. 在 Google Play Store 中搜索 "Tailscale"
  2. 安装后打开应用
  3. 点击 "Get Started"
  4. 允许 VPN 配置安装
  5. 使用 Google 账号或其他 SSO 身份提供商登录

3.4 Windows 安装

  1. 访问 Tailscale 下载页面下载 Windows 安装程序
  2. 运行 .exe 安装文件
  3. 安装完成后,点击系统托盘中的 Tailscale 图标
  4. 点击 "Log in" 并使用 SSO 身份提供商登录

3.5 Linux 安装

# 一键安装脚本
curl -fsSL https://tailscale.com/install.sh | sh

# 启动并登录
sudo tailscale up

四、自建 DERP 服务器(中国用户必备)

4.1 为什么需要自建 DERP?

Tailscale 官方的 DERP 服务器大多位于海外,对于中国大陆用户来说延迟很高(通常 200ms+)。通过在国内服务器上自建 DERP,可以将延迟降低到 30ms 以内。

4.2 准备工作

  • 一台拥有公网 IP 的国内服务器(阿里云、腾讯云等轻量级 VPS 即可)
  • 基本的 Linux 命令操作能力
  • 远程连接工具(SSH)

4.3 Docker 部署 DERP

# 登录服务器
ssh root@你的服务器IP

# 安装 Docker(如已安装可跳过)
curl -fsSL https://get.docker.com | sh
systemctl start docker
systemctl enable docker

# 拉取并运行 DERP 容器(专为纯 IP 部署优化)
docker pull ghcr.io/yangchuansheng/ip_derper:latest

docker run --restart always \
  --name derper \
  -d \
  -p 59443:443 \
  -p 3478:3478/udp \
  ghcr.io/yangchuansheng/ip_derper:latest

# 检查服务状态
docker ps
docker logs derper
curl -k https://localhost:59443

4.4 配置服务器防火墙

确保以下端口已开放:

端口协议用途
59443TCPDERP 主端口
3478UDPSTUN 端口

如果使用阿里云/腾讯云,需要在控制台的安全组中添加相应规则。

4.5 配置 Tailscale 使用自建 DERP

  1. 访问 Tailscale 管理控制台,进入 "Access Controls" 页面

  2. 在 ACL 配置文件中添加以下内容:

"derpMap": {
  "OmitDefaultRegions": false,
  "Regions": {
    "901": {
      "RegionID": 901,
      "RegionCode": "sh",
      "RegionName": "Shanghai Aliyun",
      "Nodes": [{
        "Name": "901",
        "RegionID": 901,
        "HostName": "你的服务器IP",
        "DERPPort": 59443,
        "IPv4": "你的服务器IP",
        "STUNPort": 3478
      }]
    }
  }
}

配置说明

  • "你的服务器IP" 替换为实际公网 IP
  • OmitDefaultRegions: false 保留官方 DERP 作为备用
  • 如果只想使用自建 DERP,可以将官方区域设为 null(如 "1": null
  • 建议优先使用域名 + 有效证书;InsecureForTests 仅用于临时测试,不建议长期开启
  • 2026 之后如果启用了 Peer Relay,实际走 DERP 的流量通常会明显减少
  1. 重启所有设备上的 Tailscale 客户端使配置生效

五、子网路由(Subnet Router)

子网路由允许 Tailscale 网络中的设备访问你本地局域网中的其他设备,即使这些设备没有安装 Tailscale。

5.1 配置 Mac Mini 作为子网路由器

# 启用 IP 转发
sudo sysctl -w net.inet.ip.forwarding=1
echo "net.inet.ip.forwarding=1" | sudo tee -a /etc/sysctl.conf

# 首次登录或重新认证(只需一次)
/Applications/Tailscale.app/Contents/MacOS/Tailscale up

# 设置 Tailscale 子网路由(将 192.168.31.0/24 替换为你的局域网网段)
/Applications/Tailscale.app/Contents/MacOS/Tailscale set --advertise-routes=192.168.31.0/24

# 如需接收其它节点宣告的路由
/Applications/Tailscale.app/Contents/MacOS/Tailscale set --accept-routes=true

5.2 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-routes=192.168.1.0/24 --accept-routes=true

5.3 在控制台批准路由

  1. 登录 Tailscale 管理控制台
  2. 进入 "Machines" 页面
  3. 找到子网路由设备
  4. 点击 "...",选择 "Edit route settings"
  5. 批准相应的子网路由

5.4 典型使用场景

  • 🏠 在外访问家庭 NAS:家里的 Mac Mini 作为子网路由,远程访问群晖 NAS
  • 🏢 访问办公室内网:办公室 Linux 服务器作为子网路由,在家访问内网资源
  • 🔧 IoT 设备管理:远程管理智能家居设备

六、Exit Node 出口节点

出口节点允许你将设备的所有互联网流量通过 Tailscale 网络中的另一台设备发送。

6.1 典型使用场景

  • 🌏 科学上网:将境外服务器设为出口节点
  • 🔒 公共 WiFi 安全:使用家里的网络作为出口
  • 📺 访问地区限制内容:通过特定地区的服务器访问受限服务

6.2 配置出口节点(Linux 服务器)

# 启用 IP 转发
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

# 将服务器设置为 Exit Node
sudo tailscale set --advertise-exit-node=true

6.3 在控制台批准 Exit Node

  1. 登录 Tailscale 管理控制台
  2. 找到该服务器
  3. 点击 "...",选择 "Edit..."
  4. 勾选 "Use as exit node"
  5. 点击 "Save"

6.4 在客户端使用 Exit Node

macOS

# 命令行设置
/Applications/Tailscale.app/Contents/MacOS/Tailscale set --exit-node=<出口节点名称>

# 同时允许访问本地网络
/Applications/Tailscale.app/Contents/MacOS/Tailscale set --exit-node=<出口节点名称> --exit-node-allow-lan-access=true

提示:日常修改单个选项时,优先使用 tailscale set,避免反复 tailscale up 覆盖其它已启用参数。

也可以通过 GUI 设置:点击菜单栏 Tailscale 图标 → Settings → Use Exit Node

iOS/Android

  1. 打开 Tailscale 应用
  2. 进入 "Settings"
  3. 点击 "Exit Node"
  4. 选择你配置的出口节点

七、MagicDNS(魔法域名)

MagicDNS 让你可以使用易记的设备名称而不是 IP 地址来访问设备。

7.1 启用 MagicDNS

  1. 登录 Tailscale 管理控制台
  2. 在 DNS 设置页面启用 "MagicDNS"
  3. 配置完成后,可以直接使用设备名访问

7.2 使用示例

# 使用设备名而不是 IP
ssh username@my-macbook
ping my-nas
curl http://my-server:8080

7.3 自定义搜索域

你可以配置自定义的搜索域,例如设置 home 作为后缀:

  • my-macbook.home
  • my-nas.home

八、Tailscale SSH(推荐)

Tailscale SSH 让你无需管理 SSH 密钥,直接使用 Tailscale 身份进行 SSH 认证。

8.1 优势

  • 🔑 无需管理密钥:使用 Tailscale 身份认证
  • 🔒 更安全:基于 WireGuard 加密
  • 🌐 无需端口转发:NAT 穿透自动处理
  • 📋 会话记录:可在控制台查看 SSH 会话

8.2 在服务器上启用 Tailscale SSH

# Linux
sudo tailscale set --ssh=true

# macOS
/Applications/Tailscale.app/Contents/MacOS/Tailscale set --ssh=true

8.3 配置 ACL 规则

在 Tailscale 控制台的 ACL 中添加 SSH 规则:

{
  "ssh": [
    {
      "action": "accept",
      "src": ["autogroup:members"],
      "dst": ["autogroup:self"],
      "users": ["autogroup:nonroot"]
    }
  ]
}

8.4 连接 SSH

# 使用 tailscale ssh 命令
tailscale ssh username@device-name

# 或者使用普通 ssh 命令
ssh username@device-name

8.5 SSH Console(浏览器访问)

Tailscale 还提供了浏览器版 SSH 控制台,无需本地 SSH 客户端:

  1. 登录 Tailscale 管理控制台
  2. 进入 "Machines" 页面
  3. 点击目标设备右侧的 "..." → "SSH Console"

九、Funnel 和 Serve(服务分享)

9.1 Serve:内网服务分享

Serve 允许你将本地服务分享给 Tailnet 内的其他设备。

# 分享本地 3000 端口的开发服务器
tailscale serve 3000

# 分享文件目录
tailscale serve /path/to/directory

# 查看当前分享状态
tailscale serve status

9.2 Funnel:公网服务暴露

Funnel 可以将本地服务安全地暴露到公网,无需公网 IP!

启用步骤

  1. 在 DNS 设置中启用 MagicDNS 和 HTTPS
  2. 在 ACL 中启用 Funnel 权限
  3. 运行 Funnel 命令
# 将本地 8080 端口暴露到公网
tailscale funnel 8080

# 后台运行
tailscale funnel --bg 8080

运行后,你会得到一个类似 https://your-device.your-tailnet.ts.net 的公网 URL。

9.3 使用场景

  • 🛠️ 临时演示:向客户展示本地开发的网站
  • 🔗 Webhook 接收:接收第三方服务的回调
  • 📱 本地开发测试:在手机上测试本地开发的应用

十、Taildrop(文件传输)

Taildrop 是 Tailscale 的点对点文件传输功能,简单快速。

10.1 启用 Taildrop

在 Tailscale 管理控制台中启用 Taildrop 功能。

10.2 发送文件

macOS/iOS/Android/Windows

  1. 右键文件 → 分享
  2. 选择 Tailscale
  3. 选择目标设备

Linux 命令行

tailscale file cp myfile.txt device-name:

10.3 接收文件

文件通常会保存到下载文件夹。Linux 上可以指定接收目录:

# 配置接收目录
tailscaled --statedir=/var/lib/tailscale --tun=userspace-networking

十一、ACL 访问控制

ACL(Access Control Lists)让你精细控制 Tailnet 中设备间的访问权限。

11.1 基本概念

  • Groups:用户分组(如 group:admins
  • Tags:设备标签(如 tag:servers
  • default-deny:默认拒绝所有连接

11.2 示例配置

{
  "groups": {
    "group:admins": ["[email protected]"],
    "group:devs": ["[email protected]", "[email protected]"]
  },
  "tagOwners": {
    "tag:server": ["group:admins"],
    "tag:dev": ["group:devs"]
  },
  "acls": [
    // 管理员可访问所有设备
    {"action": "accept", "src": ["group:admins"], "dst": ["*:*"]},
    
    // 开发者只能访问 dev 标签的设备
    {"action": "accept", "src": ["group:devs"], "dst": ["tag:dev:*"]},
    
    // 所有人可以访问 22 端口(SSH)
    {"action": "accept", "src": ["*"], "dst": ["*:22"]}
  ]
}

十二、Mullvad VPN 集成

Tailscale 与 Mullvad VPN 有官方集成,可以使用 Mullvad 的全球服务器作为出口节点。

12.1 启用 Mullvad 集成

  1. 在 Tailscale 控制台的 "General settings" 中找到 "Mullvad VPN"
  2. 点击 "Configure" 并购买许可证(约 $5/月,最多 5 设备)
  3. 为设备授权 Mullvad 访问权限

12.2 使用 Mullvad 出口节点

# 列出可用的 Mullvad 出口节点
tailscale exit-node list

# 使用指定的 Mullvad 出口节点
tailscale set --exit-node=<mullvad-node-name>

十三、Mac Mini + Surge 作为家庭网关

这是我的实际使用场景:用 Mac Mini 配合 Surge 作为家庭网络中枢。

13.1 架构说明

┌──────────────┐    ┌─────────────────┐    ┌──────────────┐
│   外网设备    │───▶│   阿里云 VPS    │◀───│   Mac Mini (手机/笔记本)  (DERP/中转)  (子网路由)└──────────────┘    └─────────────────┘    └──────────────┘
                                           ┌──────┴──────┐
                                           │  家庭局域网  │
NAS/IoT设备                                           └─────────────┘

13.2 Surge DHCP 服务器设置

  1. 打开 Surge for Mac
  2. 点击菜单栏图标 → "更多功能" → "网关模式"
  3. 配置 DHCP:
    • 启用 "DHCP 服务器"
    • 设置 IP 范围(如 192.168.31.100 - 192.168.31.200)
    • 设置网关 IP(Mac mini 的 IP)
    • 设置 DNS 服务器(198.18.0.2)

13.3 Surge 规则配置

# 允许 Tailscale 流量直连
IP-CIDR,100.64.0.0/10,DIRECT
IP-CIDR,192.168.31.0/24,DIRECT

十四、故障排查

14.1 检查连接状态

# 查看所有设备状态
tailscale status

# 检查与特定设备的连接
tailscale ping 100.x.x.x

# 运行网络诊断
tailscale netcheck

14.2 常见问题

问题:连接慢或不稳定

# 检查是否使用了 DERP 中继
tailscale netcheck
# 如果延迟高,考虑自建 DERP

问题:子网路由无法访问

  1. 检查 IP 转发是否启用:sysctl net.ipv4.ip_forward
  2. 确认路由已在控制台批准
  3. 检查防火墙规则

问题:DERP 容器启动失败

docker logs derper
# 检查端口是否被占用
ss -ltnup | grep -E '59443|3478'

十五、优化建议

  1. 选择合适的服务器位置:DERP 服务器尽量选择靠近你的区域
  2. 调整 MTU 值:如果连接不稳定,可尝试 --mtu=1280 参数
  3. 多节点部署:在不同区域部署多个 DERP 节点,提高可用性
  4. 定期更新:保持 Tailscale 客户端和 DERP 服务更新到最新版本
  5. 监控服务:使用 Uptime Kuma 等工具监控 DERP 服务可用性

十六、参考资料


祝你使用愉快!如有问题,欢迎在评论区讨论。

Tailscale完全指南:从入门到高阶玩法 | 原子比特之间