Tailscale 可以说是我的互联网基建,每次有了新设备都会第一时间安装 Tailscale,但是如果异地网络条件不好的话就不能稳定打洞。

以前都是同城在家里和工位打洞,体感一直都还不错,然而上周想和朋友联机玩玩游戏,跨省打洞失败,流量得走官方的 hk 中继绕一圈,延迟400ms+基本是不可用状态。于是只能自建中继服务器了。

以前自建中继服务器很麻烦,需要配置域名和证书,众所周知国内域名备案又很不便。但是在某次更新中 Tailscale 官方发布了纯 ip 自签证书部署 derp 服务器的功能,省去了域名和证书的麻烦,下面记录一下具体的部署步骤。

部署步骤

1. 安装 derper

首先安装 derper 中继服务器程序:

go install tailscale.com/cmd/derper@latest
sudo cp ~/go/bin/derper /usr/bin/

2. 安装并配置 Tailscale

安装 Tailscale 客户端:

curl -fsSL https://tailscale.com/install.sh | sh

安装成功后申请 auth_key 并登录

sudo tailscale up --authkey <your_auth_key>

运行后台程序 tailscaled

sudo systemctl enable tailscaled
sudo systemctl start tailscaled

3. 启动 derper 服务

启动 derper,将 <ip> 替换为自己的 VPS 公网 IP。这里修改了 derp 和 stun 的默认端口,需要在 VPS 的防火墙放行 40007(TCP)和 40008(UDP) 端口。执行后自动在当前目录下生成证书。

derper --hostname="<ip>" -certmode manual -certdir ./  -http-port -1 -a :40007 -stun-port 40008   -verify-clients

这个命令会生成一系列信息,用于下一步填入 Access controls。

4. 配置 Access controls

在 tailscale 的控制界面->Access controls 添加如下内容:

配置说明:

  • OmitDefaultRegions: 设置为 true 将禁用所有 Tailscale 官方中继(可选)
  • RegionID: 自定义区域 ID,官方建议从 900 到 999 之间选择
  • RegionCode: 自定义名称,会显示在 netcheck 中
  • HostName: 你的中继服务器公网 IP 地址
  • CertName: 粘贴上一步获取的证书名称
{
"derpMap": {
"OmitDefaultRegions": true,
"Regions": {
"900": {
"RegionID": 900,
"RegionCode": "my-derp-1",
"RegionName": "My First DERP",
"Nodes": [
{
"Name": "my-node-1",
"RegionID": 900,
"HostName": "YOUR_SERVER_PUBLIC_IP",
"DERPPort": 40007,
"STUNPort": 40008,
"CertName": "sha256-raw:f829..."
}
]
}
}
}
}

如需部署多个地区的中继,可添加 “901”: { … } 等配置

5. 验证配置

使用以下命令查看 derp 服务器延时:

tailscale netcheck

如果配置正确,你应该能看到自己部署的 derp 服务器信息以及延迟情况。

最后

因为每个中继都得装 go 环境,比较麻烦,所以我打包了一个 docker 镜像可以直接使用
仓库地址:Tailscale DERP 中继服务器 Docker 镜像

和朋友两天玩了快20h泰拉瑞亚,累死哩

参考

Tailscale 配置文档