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.crtderp.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 中继服务部署成功啦!

DERP 中继服务部署成功

如果没有成功,请检查域名是否正确解析、是否为域名正确设置 SSL 证书以及端口347816789在安全组/防火墙中是否已经被放行等项目。

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毫秒:

延迟仅有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)

最后修改:2024 年 04 月 23 日
如果觉得我的文章对你有用,请随意赞赏