异地组网工具的讨论以及tailscale Derper部署
写在前面
随着手中设备的不断增多,管理与互联的需求也在快速膨胀。无论是 iPad Pro 与 Windows 主机间的丝滑串流,HomeLab 通过云服务器的反向代理对外服务,还是使用 Portainer 对多台服务器的 Docker 容器进行统一管理,都需要稳定且高效的网络支撑。
相比单纯依赖 Frp 进行内网穿透,我更渴望为这些分布在不同地域的设备打造一个专属内网。评估了 EasyTier、ZeroTier、WireGuard 等多种方案后,Tailscale 成为了我的最终选择——它几乎完美契合了我的使用场景。
选择原因
以下内容仅为个人体验与观点,受限于个人知识面与能力,难免存在不全面或偏颇之处,仅供参考与探讨。
ZeroTier
在组网体验方面,ZeroTier 的表现令人满意,与 Tailscale 相比在稳定性和连接速度上不相上下。然而,由于两者的中转服务器均位于海外,受国内运营商 UDP 限制,仍存在打洞失败的情况。在必要场景下需要自建中继(Derper)以保障通信。相较之下,ZeroTier 的中继部署与配置相对繁琐,且其管理界面偏复古风格,交互体验不够现代化,因此未被列入我的最终方案。
EasyTier
EasyTier 的去中心化异地组网理念颇具新意,从概念上令人眼前一亮。然而,在我阅读其文档(2025-05)并进行实践后,发现无论是命令行还是 GUI 的使用逻辑都较为混乱,学习成本较高。其 GUI 由第三方设计,可视化操作与 JSON 导入功能体验并不友好;日志信息也难以直观定位问题。更为关键的是,iOS 与 Android 设备无法参与组网。这些因素使得我暂时难以将 EasyTier 作为主要的异地组网工具,但仍期待其未来的功能完善。
WireGuard
WireGuard 是一款极为简洁且安全的隧道协议,需自行部署与维护。在隐私性与安全性方面,它几乎无可挑剔,但在我的个人使用场景中,由于缺乏集中化服务支持,整体稳定性不如成品化的异地组网方案。此外,配置与维护需要一定的网络基础,这对于想要“即开即用”的场景而言并非最佳选择。
Tailscale
Tailscale 的综合体验最契合我的需求。它基于 WireGuard 协议,安全性与隐私性有着天然保障,同时提供了完整的集中化管理服务,无需自行搭建复杂的控制节点。其客户端覆盖 iOS、Android、Windows、macOS、Linux 等主流平台,安装与配置都极为简单,几乎可做到“开箱即用”。
在连接稳定性方面,Tailscale 同样依赖海外中转节点,因此在国内网络环境下也会遇到 UDP 打洞失败的情况,但通过自建 Derper 中继即可有效解决。在启用强制中转(Derper)的情况下,Tailscale 会让各节点通过 Derper 中继服务器转发流量,将 WireGuard 数据封装在 TCP(HTTPS)连接中,从而规避国内运营商对 UDP 的限制。综合来看,Tailscale 在易用性、功能完善度与安全性之间达到了较好的平衡,这也是我最终将其作为异地内网核心方案的主要原因。
Derper 的搭建
中转服务器配置
我采用的是 Docker 部署方案,使用域名搭建中转服务(如需使用 IP 搭建可参考下方资料)。
version: '3.8'
services:
derper:
image: ghcr.io/yangchuansheng/derper:latest
container_name: derper
restart: always
environment:
- DERP_CERT_MODE=manual # 手动设置证书
- DERP_ADDR=:10080 # 中转端口
- DERP_DOMAIN=xxx.xxx.com # 服务器域名
- DERP_VERIFY_CLIENTS=true # 验证客户端身份
ports:
- "10080:18888"
- "19999:3478/udp"
volumes:
- /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock # tailscale 客户端进程,用于验证客户端身份
- /data/certs:/app/certs # SSL 证书存放地址Tailscale 配置
在 Access controls → JSON editor 中,增加以下配置以启用 Derper:
"derpMap": {
"OmitDefaultRegions": false, // 是否不启用官方中转服务器
"Regions": {
"900": {
"RegionID": 900, // tailscale 900-999 是保留给自定义 derper 的
"RegionCode": "aliyun",
"RegionName": "GuangZhou",
"Nodes": [
{
"Name": "1",
"RegionID": 900, //对应上面的900序号
"HostName": "xxx.xxx.com", //# 域名
"DERPPort": 10080, // 中转接口
"STUNPort": 19999, // UDP接口
"STUNOnly": false,
},
],
},
},
},验证部署是否成功
tailscale netcheck如输出中包含自建节点,例如:
Nearest DERP: GuangZhou
- aliyun: 27.4ms (GuangZhou)尝试Ping组网内的设备
root@ubuntu:~# tailscale ping 100.88.0.1
pong from yuwei-win11 (100.88.0.1) via DERP(aliyun) in 51ms即可确认已通过中继服务器(Derper)通信。
强制使用中继服务器通信
即使在打洞成功的情况下,由于国内运营商对 UDP 的限制,在异地且非同运营商的环境中,强制通过中转服务器进行通信的整体体验,往往优于直接打洞连接。
Windows
管理员权限打开 PowerShell 执行以下命令:
启用
$reg = "HKLM:\SYSTEM\CurrentControlSet\Services\Tailscale"
$val = "TS_DEBUG_ALWAYS_USE_DERP=true"
if (Get-ItemProperty -Path $reg -Name Environment -ErrorAction SilentlyContinue) {
$cur = Get-ItemPropertyValue -Path $reg -Name Environment
if ($cur -notcontains $val) {
Set-ItemProperty -Path $reg -Name Environment -Value ($cur + $val)
}
} else {
New-ItemProperty -Path $reg -Name Environment -Value $val -PropertyType MultiString
}
Restart-Service Tailscale -Force禁用
$reg = "HKLM:\SYSTEM\CurrentControlSet\Services\Tailscale"
$val = "TS_DEBUG_ALWAYS_USE_DERP=true"
if (Get-ItemProperty -Path $reg -Name Environment -ErrorAction SilentlyContinue) {
$cur = Get-ItemPropertyValue -Path $reg -Name Environment
$new = $cur | Where-Object { $_ -ne $val }
if ($new.Count -eq 0) {
Remove-ItemProperty -Path $reg -Name Environment
} else {
Set-ItemProperty -Path $reg -Name Environment -Value $new
}
}
Restart-Service Tailscale -ForceLinux
启用
sudo mkdir -p /etc/systemd/system/tailscaled.service.d
echo -e "[Service]\nEnvironment=TS_DEBUG_ALWAYS_USE_DERP=true" | sudo tee /etc/systemd/system/tailscaled.service.d/override.conf
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart tailscaled禁用
sudo rm -f /etc/systemd/system/tailscaled.service.d/override.conf
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart tailscaled注意事项
- 中转服务器需启动 Tailscale 客户端进程。
/data/certs内的证书文件名必须为:xxx.xxx.com.crt xxx.xxx.com.key- 截至 Tailscale 1.84.2 版本,由于 bug,如果同一台 Linux 服务器既作为 DERP 中转服务器,又运行 Tailscale 客户端并启用强制中转,该客户端自身的 Tailscale 会掉线。
请勿在 DERP 服务器上启用强制中转,否则会导致其自身的 Tailscale 服务中断。
参考资料
Sleepstars 的记录室:https://blog.sleepstars.net/archives/ji-yu-docker-compose
如何强制Tailscale走Derp中转:https://linux.do/t/topic/752216