Tailscale完全指南:从自建DERP服务器到Mac子网路由

背景介绍

Tailscale是一款优秀的组网工具,但在中国大陆使用时,由于官方DERP服务器位于海外,连接速度通常很慢,甚至不稳定。通过自建DERP服务器,可以大幅提升Tailscale的连接速度和稳定性。此外,配合Mac mini和Surge设置DHCP服务,可以为整个家庭网络提供路由功能。

本指南将详细介绍如何在国内服务器上部署DERP服务器,配置Mac mini作为路由器,以及在各平台上安装和使用Tailscale。

什么是DERP?

DERP (Designated Encrypted Relay for Packets) 是Tailscale使用的中继服务器。当两个设备无法直接进行P2P连接时,流量会通过DERP服务器中转。特点如下:

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

连接类型说明

Tailscale连接有三种方式:

  1. 直接连接: 设备间直接建立P2P连接,速度最快
  2. STUN打洞: 通过STUN协议打洞实现P2P连接
  3. DERP中继: 当上述方式失败时,通过DERP服务器中继连接

各平台Tailscale安装指南

macOS安装

有三种方式安装Tailscale到macOS:

  1. 推荐方式:从Tailscale官网下载安装包

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

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

    1
    2
    
    # 使用Homebrew安装
    brew install tailscale
    

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

iOS/iPadOS安装

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

Android安装

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

Windows安装

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

自建DERP服务器

准备工作

部署自建DERP服务器需要:

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

部署步骤

1. 登录服务器

1
ssh root@你的服务器IP

2. 安装Docker

如果服务器已安装Docker,可以跳过此步骤。

1
2
3
4
5
6
# 安装Docker
curl -fsSL https://get.docker.com | sh

# 启动Docker
systemctl start docker
systemctl enable docker

3. 拉取并运行DERP容器

我们使用专为纯IP部署优化的Docker镜像:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 拉取镜像
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

4. 检查服务状态

1
2
3
4
5
6
7
8
# 查看容器运行状态
docker ps

# 查看容器日志
docker logs derper

# 测试DERP服务
curl -k https://localhost:59443

正常情况下,你应该看到DERP欢迎页面。

5. 配置服务器防火墙

确保以下端口已开放:

  • TCP 59443(DERP主端口)
  • UDP 3478(STUN端口)

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

配置Tailscale使用自建DERP

1. 登录Tailscale管理控制台

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

2. 修改ACL配置

在ACL配置文件中添加以下内容(注意JSON格式和逗号位置):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
"derpMap": {
  "OmitDefaultRegions": false,
  "Regions": {
    "901": {
      "RegionID": 901,
      "RegionCode": "sh",
      "RegionName": "Shanghai Aliyun",
      "Nodes": [{
        "Name": "901",
        "RegionID": 901,
        "HostName": "你的服务器IP",
        "DERPPort": 59443,
        "IPv4": "你的服务器IP",
        "InsecureForTests": true,
        "STUNPort": 3478
      }]
    },
    "1": null,
    "2": null,
    "4": null,
    "6": null,
    "8": null,
    "9": null,
    "10": null,
    "11": null,
    "12": null,
    "13": null,
    "14": null,
    "15": null,
    "16": null,
    "17": null,
    "18": null,
    "19": null,
    "21": null,
    "22": null,
    "23": null,
    "24": null,
    "25": null
  }
},

重要提示

  • "你的服务器IP" 替换为你的服务器实际公网IP
  • IP地址必须用双引号括起来
  • 确保JSON格式正确,特别是逗号的位置

3. 重启Tailscale客户端

配置修改后,需要在所有设备上重启Tailscale客户端:

在Mac上

1
2
3
4
5
# 退出
/Applications/Tailscale.app/Contents/MacOS/Tailscale down

# 重新连接(如果配置了子网路由,需带上参数)
/Applications/Tailscale.app/Contents/MacOS/Tailscale up --advertise-routes=192.168.31.0/24 --accept-routes

在手机上

  • 打开设置 -> 应用 -> Tailscale -> 强制停止
  • 重新启动Tailscale应用

Mac Mini + Surge作为网关和DHCP服务器

Surge DHCP服务器设置

Surge是一款强大的网络工具,它可以配合Mac mini作为家庭网络的DHCP服务器和网关。

1. 设置Surge作为DHCP服务器

  1. 打开Surge for Mac
  2. 点击菜单栏中的Surge图标
  3. 选择"更多功能" -> “网关模式”
  4. 点击"打开设置"
  5. 在网关模式面板中:
    • 启用"DHCP服务器"
    • 设置DHCP IP范围(例如:192.168.31.100 - 192.168.31.200)
    • 设置网关IP(Mac mini的IP地址,例如:192.168.31.1)
    • 设置DNS服务器(通常为Surge的内部DNS:198.18.0.2)

2. 配置Mac网络设置

  1. 给Mac mini设置静态IP(与上面设置的网关IP一致):
    • 打开系统设置 -> 网络
    • 选择主要网络连接(以太网或Wi-Fi)
    • 配置IPv4:手动
    • 设置IP地址(例如:192.168.31.1)
    • 设置子网掩码(通常为:255.255.255.0)
    • 设置路由器地址(上级路由器的IP)

3. 启用IP转发

在Mac终端中执行:

1
2
3
4
5
# 临时启用
sudo sysctl -w net.inet.ip.forwarding=1

# 永久启用
echo "net.inet.ip.forwarding=1" | sudo tee -a /etc/sysctl.conf

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

1. 设置Tailscale子网路由

1
2
# Mac终端执行
/Applications/Tailscale.app/Contents/MacOS/Tailscale up --advertise-routes=192.168.31.0/24 --accept-routes

2. 在Tailscale管理控制台批准路由

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

3. 确保Surge配置正确

在Surge配置中添加规则,允许Tailscale流量:

1
2
3
# 在Surge规则集中添加
IP-CIDR,100.64.0.0/10,DIRECT
IP-CIDR,192.168.31.0/24,DIRECT

设置出口节点(Exit Node)

Tailscale可以将特定设备设置为出口节点,使其他设备的流量通过该节点访问互联网。

1. 在境外服务器上配置Exit Node

Linux服务器设置

  1. 安装Tailscale:

    1
    
    curl -fsSL https://tailscale.com/install.sh | sh
    
  2. 启用IP转发:

    1
    2
    3
    
    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
    
  3. 将服务器设置为Exit Node:

    1
    
    sudo tailscale up --advertise-exit-node
    

在控制台允许Exit Node

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

2. 在其他设备上使用Exit Node

macOS

1
2
3
4
5
# 命令行设置
/Applications/Tailscale.app/Contents/MacOS/Tailscale up --exit-node=<出口节点IP或名称>

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

也可以通过图形界面设置:

  1. 点击菜单栏Tailscale图标
  2. 选择"Settings"
  3. 找到"Use Exit Node"选项
  4. 选择你的出口节点

iOS/Android

  1. 打开Tailscale应用
  2. 进入"Settings"
  3. 点击"Exit Node"
  4. 选择你配置的出口节点
  5. 如需访问本地网络,启用"Allow LAN access"

Windows

  1. 右键点击系统托盘中的Tailscale图标
  2. 选择"Settings"
  3. 在"Exit Node"下拉菜单中选择出口节点

检查连接和排障

1. 检查设备是否直连

1
2
3
4
5
# Mac终端执行
/Applications/Tailscale.app/Contents/MacOS/Tailscale ping 100.xx.xx.xx

# 查看连接详情
/Applications/Tailscale.app/Contents/MacOS/Tailscale status -peers

直连显示为"direct",中继显示为"relay"或"via DERP"。

2. 网络环境检查

1
2
# 运行网络检查
/Applications/Tailscale.app/Contents/MacOS/Tailscale netcheck

这会显示NAT类型、可用的DERP服务器及延迟信息。

3. 常见故障排除

容器启动失败

1
2
3
4
5
6
# 检查日志
docker logs derper

# 尝试更换端口
docker rm -f derper
docker run --restart always --name derper -d -p 12345:443 -p 3478:3478/udp ghcr.io/yangchuansheng/ip_derper:latest

连接仍然很慢

1
2
3
4
5
6
# 检查网络状态
/Applications/Tailscale.app/Contents/MacOS/Tailscale netcheck

# 确认已重启客户端
/Applications/Tailscale.app/Contents/MacOS/Tailscale down
/Applications/Tailscale.app/Contents/MacOS/Tailscale up

端口被占用

1
2
3
4
5
# 查找占用端口的进程
netstat -tulpn | grep -E '59443|3478'

# 杀死占用进程
kill -9 进程ID

子网路由无法访问

  1. 检查IP转发是否启用
  2. 确认路由已在控制台批准
  3. 检查防火墙规则
  4. 在Surge中确认规则配置正确

优化建议

  1. 选择合适的服务器位置:尽量选择靠近你实际位置的服务器
  2. 调整MTU值:如果连接不稳定,可尝试 --mtu=1280 参数
  3. 多节点部署:在不同区域部署多个DERP节点,提高可用性
  4. 监控服务:定期检查DERP服务是否正常运行
  5. 组合使用出口节点:在不同地区部署多个出口节点,根据需要切换

参考资料


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