Tailscale 官方内置了很多 DERP 中继服务器,分步在全球各地,但不包含中国大陆,这就导致了流量通过 DERP 服务器进行中继时的延时较高。为了提升使用体验,我们可以参考 Tailscale 官方文档自建私有的 DERP 中继服务器。
01 在服务器中安装 Tailscale 客户端
根据官方教程,使用以下命令即可在 Linux 系统中安装 Tailscale 客户端:
curl -fsSL https://tailscale.com/install.sh | sh
安装成功后,使用命令tailscale up
启动服务,第一次启动时需要根据提示访问指定网址以完成账户认证。
02 部署 DERP 中继服务
在想要存放配置文件的文件夹(本例为/root/Tailscale-DERP
)中通过命令vi docker-compose.yml
新建一个Docker Compose 文件:
version: '3'
services:
Tailscale-DERP:
image: fredliang/derper:latest
container_name: Tailscale-DERP
restart: always
ports:
- "3478:3478/udp"
- "16789:16789"
environment:
- DERP_CERT_MODE=manual
- DERP_DOMAIN=derp.example.com
- DERP_ADDR=:16789
- DERP_HTTP_PORT=-1
- DERP_VERIFY_CLIENTS=true # 很重要,避免被别人滥用
volumes:
- "/root/Tailscale-DERP/cert:/app/certs"
- "/var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock"
在本例中,需要将域名derp.example.com
的 SSL 证书放入/root/Tailscale-DERP/cert
目录内,且证书文件名必须设置为derp.example.com.crt
和derp.example.com.key
。SSL 证书并非永久有效,记得在证书过期时及时更新网站和 DERP 中继服务的证书~
之后,使用docker-compose up -d
命令运行 docker 容器即可,可以通过命令docker logs -f Tailscale-DERP
查看容器日志以确认运行状态:
2024/04/22 09:33:48 no config path specified; using /var/lib/derper/derper.key
2024/04/22 09:33:48 STUN server listening on [::]:3478
2024/04/22 09:33:48 derper: serving on :16789 with TLS
此时,docker 容器已经成功运行,接下来我们需要做好域名的反向代理,在宝塔面板中可以如下设置:
那么现在,就可以进行测试啦——访问https://derp.example.com:16789
,如果出现如下页面,且地址栏的 SSL 证书标签显示正常可用,那就说明 Tailscale 的 DERP 中继服务部署成功啦!
如果没有成功,请检查域名是否正确解析、是否为域名正确设置 SSL 证书以及端口3478
和16789
在安全组/防火墙中是否已经被放行等项目。
03 配置 Tailscale
进入 Tailscale 的 Access controls 页面来修改配置,将以下内容追加到原配置文件中并保存配置即可:
// Tailscale DERP
"derpMap": {
// OmitDefaultRegions 用来忽略官方的中继节点,一般自建后就看不上官方小水管了
"OmitDefaultRegions": true,
"Regions": {
"901": {
"RegionID": 901, // 901 三个地方保持一致,900开始,多个节点可以往后+1
"RegionCode": "sh",
"RegionName": "Shanghai",
"Nodes": [
{
"Name": "腾讯云-上海-1",
"RegionID": 901,
"HostName": "derp.example.com", // 换成你的子域名
"IPv4": "1.1.1.1", // 改成你的公网IP
"DERPPort": 16789,
"STUNPort": 3478,
"CanPort80": false,
},
],
},
},
},
此后,我们可以在任意设备中通过终端命令来验证 DERP 中继服务的连接情况,例如,在 Linux 系统中可使用命令tailscale netcheck
,可见,延迟真的非常非常低,只有7.4毫秒:
参考资料
[1] 使用Docker + Traefik + Derper 自建 Tailscale 中继服务器完整教程 (jungley.net)
[2] Tailscale 基础教程:部署私有 DERP 中继服务器 · 云原生实验室 (icloudnative.io)
[3] 搭建Tailscale中继节点|白嫖DERP中继节点|低调分享 - 爱墨迹 (imgki.com)
[4] 我的服务器系列:tailscale使用自定义derper服务器(docker部署) - 且炼时光 (always200.com)
版权属于:Angus
本文链接:https://blog.angustar.com/archives/Tailscale-DERP.html
所有原创文章采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可。 您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。