tailscale 自建DERP服务中继教程

2025-06-15

自建tailscale的DERP中继教程

通过Tailscale可以使用内网穿透管理和访问不同局域网中的设备,但是官方提供的公用服务器一般情况下不在大陆,所以延迟很高;并且由于公有的原因,网络条件经常不稳定。为了降低延迟、提高带宽,所以要自建DERP。

1. DERP中继服务器介绍

tailscale所有客户端之间的连接都是DERP模式(中继模式),这意味着连接立即就能建立,用户不需要任何等待。然后会开始并行的路径发现,通常在几秒钟之后,tailscale就能发现一条更优路径,然后将现有连接透明升级(upgrade)过去,变成点对点(peer to peer)连接。因此,DERP可以作为tailscale在NAT穿透失败时的保底通信方式。

实际上,tailscale官方建立了很多DERP服务器,分布在全球各地(除了中国大陆)。这就导致一点流量通过公共DERP服务器进行中继,延时会非常高。

我们可以通过在国内公网服务器上自建DERP中继的方式来解决这一问题。公网云服务器可以选择一些ECS或者轻量应用服务器,各大云服务器厂商都有提供。这里我使用的是京东云服务器。

2. 搭建步骤

准备好一台公网云服务器后,就可以开始以下操作。

1. 安装go环境

首先安装所需软件(如果已安装,可以跳过这一步)

apt install -y wget git openssl curl

然后安装go

wget https://go.dev/dl/go1.23.5.linux-amd64.tar.gz && \
rm -rf /usr/local/go && \
tar -C /usr/local -xzf go1.23.5.linux-amd64.tar.gz 

添加环境变量(临时添加)

export PATH=$PATH:/usr/local/go/bin

如果想永久添加到环境变量

echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile && source /etc/profile

之后验证一下是否安装成功

go version

2. 通过go安装DERP

运行go下载DERP

go install tailscale.com/cmd/derper@latest

这里会访问tailscale官去下载软件包,如果卡住的话,可以切换一下go的镜像源。

3. 处理证书文件

安装完成后,需要处理证书文件,证书文件路径如下:

注释cert.go代码中的如下部分:

不同derper版本的代码内容可能不同,可以通过搜索 getCertification 函数快速定位。

4. 重新编译derper

然后在当前目录下用 go 重新编译一下,并输出的指定目录 /etc/derp/derper

go build -o /etc/derp/derper

检查是否编译成功

ls /etc/derp/derper

输出以下代码表示编译成功

/etc/derp/derper

5. 自签域名给DERP

接下来用命令自签一个 https 域名 derp.myself.com

openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout /etc/derp/derp.myself.com.key -out /etc/derp/derp.myself.com.crt -subj "/CN=derp.myself.com" -addext "subjectAltName=DNS:derp.myself.com"

接下来在服务器上使用以下命令:

cat > /etc/systemd/system/derp.service <<EOF
[Unit]
Description=TS Derper
After=network.target
Wants=network.target
[Service]
User=root
Restart=always
ExecStart=/etc/derp/derper -hostname derp.myself.com -a :33445 -http-port 33446 -certmode manual -certdir /etc/derp --verify-clients
RestartPreventExitStatus=1
[Install]
WantedBy=multi-user.target
EOF

注意这里需要打开云服务器上的 tcp 33445udp 3478 (STUN需要)端口安全组。

然后输入以下命令,打开自启,并立即启动derp服务:

systemctl enable derp
systemctl start derp

6. 验证DERP是否启动

在浏览器中输入 https://<your-ip>:33445/ 即可验证DERP是否启动

如果页面显示以上内容,说明服务启动成功了。

7. 在tailscale控制台添加DERP中转

接下来进入tailscale控制台设置DERP中转

在配置文件中添加以下内容:

  "derpMap": {
    "OmitDefaultRegions": true,
    "Regions": {
      "901": {
        "RegionID":   901,
        "RegionCode": "Myself",
        "RegionName": "Myself Derper",
        "Nodes": [
          {
            "Name":             "901a",
            "RegionID":         901,
            "DERPPort":         33445,
            "IPv4":             "youripv4",
            "InsecureForTests": true,
          },
        ],
      },
    },
  },

8. 检查tailscale中转是否添加成功

最后在服务器上查看tailscale中转是否添加成功

tailscale netcheck

若显示以下内容,说明添加成功