Tailscale完全指南:从自建DERP服务器到Mac子网路由
- Published on
- ...
- Authors

- Name
- Huashan
- @herohuashan
背景介绍
Tailscale是一款优秀的组网工具,但在中国大陆使用时,由于官方DERP服务器位于海外,连接速度通常很慢,甚至不稳定。通过自建DERP服务器,可以大幅提升Tailscale的连接速度和稳定性。此外,配合Mac mini和Surge设置DHCP服务,可以为整个家庭网络提供路由功能。
本指南将详细介绍如何在国内服务器上部署DERP服务器,配置Mac mini作为路由器,以及在各平台上安装和使用Tailscale。
💡 延伸阅读: 如果你想了解如何将Mac Mini作为家庭云服务器并配合Tailscale使用,可以参考 [Mac_mini_to_cloud](/Mac Mini M2 到云端) 这篇文章。关于在VPS上部署其他服务,还可以参考 [substore 部署使用教程](/substore 部署使用教程)。
什么是DERP?
DERP (Designated Encrypted Relay for Packets) 是Tailscale使用的中继服务器。当两个设备无法直接进行P2P连接时,流量会通过DERP服务器中转。特点如下:
- 处理NAT穿透失败的情况
- 提供STUN服务协助P2P连接建立
- 中继数据采用端到端加密,服务器无法解密
- 提高连接成功率和稳定性
连接类型说明
Tailscale连接有三种方式:
- 直接连接: 设备间直接建立P2P连接,速度最快
- STUN打洞: 通过STUN协议打洞实现P2P连接
- DERP中继: 当上述方式失败时,通过DERP服务器中继连接
各平台Tailscale安装指南
macOS安装
有三种方式安装Tailscale到macOS:
推荐方式:从Tailscale官网下载安装包
访问 https://tailscale.com/download 下载Mac安装包App Store安装:
在Mac App Store搜索"Tailscale"并安装命令行安装(高级用户):
brew install tailscale
安装后,点击菜单栏图标并登录您的Tailscale账户。
iOS/iPadOS安装
- 在App Store中搜索"Tailscale"
- 安装后打开应用
- 点击"Get Started"
- 允许VPN配置安装
- 使用SSO身份提供商登录
Android安装
- 在Google Play Store中搜索"Tailscale"
- 安装后打开应用
- 点击"Get Started"
- 允许VPN配置安装
- 使用Google账号或其他SSO身份提供商登录
Windows安装
- 访问Tailscale下载页面下载Windows安装程序
- 运行.exe安装文件
- 安装完成后,点击系统托盘中的Tailscale图标
- 点击"Log in"并使用SSO身份提供商登录
自建DERP服务器
准备工作
部署自建DERP服务器需要:
- 一台拥有公网IP的服务器(阿里云、腾讯云等)
- 基本的Linux命令操作能力
- 远程连接工具(SSH)
部署步骤
1. 登录服务器
ssh root@你的服务器IP
2. 安装Docker
如果服务器已安装Docker,可以跳过此步骤。
curl -fsSL https://get.docker.com | sh
systemctl start docker
systemctl enable docker
3. 拉取并运行DERP容器
我们使用专为纯IP部署优化的Docker镜像:
# 拉取镜像
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. 检查服务状态
# 查看容器运行状态
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格式和逗号位置):
"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上:
# 退出
/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服务器
- 打开Surge for Mac
- 点击菜单栏中的Surge图标
- 选择"更多功能" -> "网关模式"
- 点击"打开设置"
- 在网关模式面板中:
- 启用"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网络设置
- 给Mac mini设置静态IP(与上面设置的网关IP一致):
- 打开系统设置 -> 网络
- 选择主要网络连接(以太网或Wi-Fi)
- 配置IPv4:手动
- 设置IP地址(例如:192.168.31.1)
- 设置子网掩码(通常为:255.255.255.0)
- 设置路由器地址(上级路由器的IP)
3. 启用IP转发
在Mac终端中执行:
# 临时启用
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子网路由
# Mac终端执行
/Applications/Tailscale.app/Contents/MacOS/Tailscale up --advertise-routes=192.168.31.0/24 --accept-routes
2. 在Tailscale管理控制台批准路由
- 登录Tailscale管理控制台
- 进入"Machines"页面
- 找到Mac mini设备
- 点击"...",选择"Edit route settings"
- 批准192.168.31.0/24子网路由
3. 确保Surge配置正确
在Surge配置中添加规则,允许Tailscale流量:
# 在Surge规则集中添加
IP-CIDR,100.64.0.0/10,DIRECT
IP-CIDR,192.168.31.0/24,DIRECT
设置出口节点(Exit Node)
Tailscale可以将特定设备设置为出口节点,使其他设备的流量通过该节点访问互联网。
1. 在境外服务器上配置Exit Node
Linux服务器设置
安装Tailscale:
curl -fsSL https://tailscale.com/install.sh | sh启用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
在控制台允许Exit Node
- 登录Tailscale管理控制台
- 找到该服务器
- 点击"...",选择"Edit..."
- 勾选"Use as exit node"
- 点击"Save"
2. 在其他设备上使用Exit Node
macOS
# 命令行设置
/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
也可以通过图形界面设置:
- 点击菜单栏Tailscale图标
- 选择"Settings"
- 找到"Use Exit Node"选项
- 选择你的出口节点
iOS/Android
- 打开Tailscale应用
- 进入"Settings"
- 点击"Exit Node"
- 选择你配置的出口节点
- 如需访问本地网络,启用"Allow LAN access"
Windows
- 右键点击系统托盘中的Tailscale图标
- 选择"Settings"
- 在"Exit Node"下拉菜单中选择出口节点
检查连接和排障
1. 检查设备是否直连
# 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. 网络环境检查
# 运行网络检查
/Applications/Tailscale.app/Contents/MacOS/Tailscale netcheck
这会显示NAT类型、可用的DERP服务器及延迟信息。
3. 常见故障排除
容器启动失败
# 检查日志
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
连接仍然很慢
# 检查网络状态
/Applications/Tailscale.app/Contents/MacOS/Tailscale netcheck
# 确认已重启客户端
/Applications/Tailscale.app/Contents/MacOS/Tailscale down
/Applications/Tailscale.app/Contents/MacOS/Tailscale up
端口被占用
# 查找占用端口的进程
netstat -tulpn | grep -E '59443|3478'
# 杀死占用进程
kill -9 进程ID
子网路由无法访问
- 检查IP转发是否启用
- 确认路由已在控制台批准
- 检查防火墙规则
- 在Surge中确认规则配置正确
优化建议
- 选择合适的服务器位置:尽量选择靠近你实际位置的服务器
- 调整MTU值:如果连接不稳定,可尝试
--mtu=1280参数 - 多节点部署:在不同区域部署多个DERP节点,提高可用性
- 监控服务:定期检查DERP服务是否正常运行
- 组合使用出口节点:在不同地区部署多个出口节点,根据需要切换
参考资料
- Tailscale官方文档:DERP服务器
- Tailscale官方文档:Exit Nodes
- Tailscale官方文档:Subnet Routers
- GitHub: yangchuansheng/ip_derper
- Tailscale网络原理
祝你使用愉快!如有问题,欢迎在社区讨论。
被引用
被 1 篇文章引用