type
Post
status
Published
slug
2024/11/09/Self-built-tailscaler-derper-relay-service
summary
Self-built tailscaler derper relay service
tags
工具
category
技术分享
icon
password
new update day
Property
Nov 9, 2024 01:38 AM
created days
Last edited time
Nov 9, 2024 01:38 AM
Derper 中继节点
某些网络不佳的情况下,P2P 无法打洞成功,流量将通过 Tailscale 的中继节点,也称为 Derper,进行流量的转发。
但由于 Tailscale 在中国大陆境内并没有中继节点,会导致速度非常缓慢,影响使用体验。
可以通过自己搭建 Derper 节点来解决这个问题。
官方提供也提供了操作手册:
构建支持 Derper 自签证书的镜像
tailscale-derper 原始工具添加了 ssl 证书的验查机制,导致自签名证书无法使用,通过关闭下面的验查机制让 derper 工具能够正常运行。
cert.go
tailscale
为了开箱即用,我新建了下面的一个 GitHub 项目,使用 GitHub Actions 进行镜像自动构建。
tailscale-derper
expoli • Updated Dec 7, 2024
该镜像集成了证书自动生成程序,并根据所传入的环境变量自动生成对应配置域名的 ssl 自签证书,你可以通过环境变量来控制 derper 的工作行为。
默认接收四个环境变量具体的名称与作用如下
DOMAIN_NAME
[默认值:derper.example.com]- 第一个参数为自签证书的域名,你应该根据自己的需求去修改它,注意这是自签名证书。
- 证书默认存储位置
/opt/ssl/
你可以根据需要自己传入自己需要的证书 - 支持自签 IP 地址证书
DERPER_PORT
[默认值:443]- 第二个参数为 derper 程序运行的端口,根据自己的需求去修改定制
COMMAND_LINE
[默认为空]- 其他额外的 derper 参数命令,你应该原样输入 derper 命令参数,多个参数应该使用双引号包括起来
ADVANCED_MODE
[默认值:false]- 高级模式,高级模式下,derper 所有的参数都从 COMMAND_LINE 环境变量中读取,不再自动自签证书。
docker 运行命令示例⌘
- 从 docker hub 拉取
docker run -it --rm -e DOMAIN_NAME=test.com -e DERPER_PORT=2333 -p 2333:2333 tangcuyu/tailscale-derper
- 从 GitHub package 拉取
docker pull ghcr.io/expoli/tailscale-derper:latest
配置 tailscale Access Controls 规则
进入 Tailscale 后台,选择 Access Controls 配置。
在下面的配置文件中,在最后添加自己的 Derper。
我的配置如下:可以在 nodes 部分中添加多个 derper 节点
// ... other parts of ACL/Policy JSON "derpMap": { // "OmitDefaultRegions": true, "Regions": { "900": { "RegionID": 900, "RegionCode": "cn", "RegionName": "my-cn-derps", "Nodes": [ { "Name": "Aliyun Zhangjiajie 1", "RegionID": 900, "HostName": "derp1", "IPv4": "xxx.xxx.xxx.xxx", "DERPPort": 8888, "STUNPort": 8889, "InsecureForTests": true, "CanPort80": false, }, { "Name": "Tencent Beijing 1", "RegionID": 900, "HostName": "derp2", "IPv4": "xxx.xxx.xxx.xxx", "DERPPort": 8888, "STUNPort": 8889, "InsecureForTests": true, "CanPort80": false, }, ], }, }, },
测试连接
- netcheck 命令
- 可以从下面输出中的 DERP latency cn 部分以及对应的配置名称,即是配置成功。
tailscale.exe netcheck Report: * UDP: true * IPv4: yes, 172.17.0.1:45395 * IPv6: no, but OS has support * MappingVariesByDestIP: true * PortMapping: * CaptivePortal: false * Nearest DERP: my-cn-derps * DERP latency: - cn: 29ms (my-cn-derps) - tok: 119.3ms (Tokyo) - sfo: 144.6ms (San Francisco) - lax: 152.6ms (Los Angeles) - sin: 161.9ms (Singapore) - sea: 166.2ms (Seattle) - den: 172ms (Denver) - ord: 197.4ms (Chicago) - mia: 208.5ms (Miami) - dfw: 208.7ms (Dallas) - hnl: 208.7ms (Honolulu) - tor: 209.2ms (Toronto) - nyc: 214.2ms (New York City) - fra: 229.1ms (Frankfurt) - lhr: 229.7ms (London) - par: 237.1ms (Paris) - mad: 253.6ms (Madrid) - ams: 260.7ms (Amsterdam) - blr: 270.6ms (Bangalore) - waw: 282.3ms (Warsaw) - syd: 321.3ms (Sydney) - sao: 337.3ms (São Paulo) - dbi: 353.4ms (Dubai) - nai: 392.8ms (Nairobi) - jnb: 411.8ms (Johannesburg) - hkg: (Hong Kong)
- ping 命令,通过ping命令可以发现无法打洞成功的机器会从 DERP 中继节点中通过。工作状态符合预期。
tailscale.exe ping archlinux-gongkong pong from archlinux-gongkong (xxx.xxx.xxx.xxx) via DERP(cn) in 43ms pong from archlinux-gongkong (xxx.xxx.xxx.xxx) via DERP(cn) in 41ms pong from archlinux-gongkong (xxx.xxx.xxx.xxx) via DERP(cn) in 46ms pong from archlinux-gongkong (xxx.xxx.xxx.xxx) via DERP(cn) in 43ms pong from archlinux-gongkong (xxx.xxx.xxx.xxx) via DERP(cn) in 43ms pong from archlinux-gongkong (xxx.xxx.xxx.xxx) via DERP(cn) in 43ms pong from archlinux-gongkong (xxx.xxx.xxx.xxx) via DERP(cn) in 42ms pong from archlinux-gongkong (xxx.xxx.xxx.xxx) via DERP(cn) in 45ms pong from archlinux-gongkong (xxx.xxx.xxx.xxx) via DERP(cn) in 44ms pong from archlinux-gongkong (xxx.xxx.xxx.xxx) via DERP(cn) in 43ms direct connection not established
欢迎加入“喵星计算机技术研究院”,原创技术文章第一时间推送。

- 作者:tangcuyu
- 链接:https://expoli.tech/articles/2024/11/09/Self-built-tailscaler-derper-relay-service
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章