Tailscale 官方的 DERP 中继服务器全部在境外,距离最近的香港节点在国内的网络环境中也不一定能稳定连接。所以,还是很有必要建立自己的 DERP 服务器的。好在,操作起来并不难。

准备工作

  • 需要有自己的云服务器,有 docker 运行环境。
  • 需要有自己的域名
  • 需要申请 SSL 证书。

安装自定义derp服务

假设你的域名为 xiao.nu,对应的证书为 xiao.nu.crt,私钥为 xiao.nu.key,DERP 对外提供服务的端口为 8443。
一行 docker 命令即可创建 DERP 服务器:

docker run -d \
--name derp \
--restart=always \
-p 0.0.0.0:3478:3478/udp \
-p 0.0.0.0:8443:8443 \
-v /path/to/xiao.nu.crt:/app/certs/xiao.nu.crt \
-v /path/to/xiao.nu.key:/app/certs/xiao.nu.key \
#防止被人白漂,映射一下tailscaled.sock
-v /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock \
-e DERP_DOMAIN=xiao.nu \
-e DERP_ADDR=:8443 \
-e DERP_CERT_MODE=manual \
#防白漂处方
-e DERP_VERIFY_CLIENTS=true \
fredliang/derper:latest

启动 3478 端口不要修改(服务器如果有防火墙,记得放行3478 UDP 数据),8443 端口(),DERP_ADDR 变量后面的端口好需要与之前的保持一致,但是这里的冒号不能丢。

接下来来到 Tailscale 管理页面 – Access controls 标签页中,将编辑区域的内容清空,并填入以下内容:

{
    "derpMap": {
        "Regions": {
            "900": {
                "RegionID":   900,
                "RegionCode": "bj",
                "RegionName": "Beijing",
                "Nodes": [
                    {
                        "Name":     "xiao.nu",
                        "RegionID": 900,
                        "HostName": "xiao.nu",
                        "DERPPort": 8443
                    }
                ]
            }
        }
    }
}

RegionCode 与 RegionName 可以自定义,建议使用纯字母。DERPPort 需要与启动 docker 时设置的端口一致。点击保存之后即可。

当使用 tailscale ping 命令去 ping 一个客户端的时候,就可以看到真正使用上了我们自己的节点。

pong from (...*) via DERP(bj) in 60ms
pong from (...) via ...: in 58ms

在本地终端或者命令提示符中运行 tailscale netcheck 命令检查一下,看你设置的节点是否出现在下方的列表之中。

via