Tailscale

在一些网络环境下,Tailscale 的官方 DERP 中继可能不稳定或者延迟较高。本文介绍如何在 VPS 上部署 自建 DERP 节点,以便通过 Tailscale 提供更快更稳定的中继服务,并实现 Trojan 代理共存。


前置准备

  • Tailscale 账户(用于身份认证和管理)
  • 域名(纯 IP DERP 中继无法防止白嫖)
  • Let’s Encrypt / acme.sh 证书(用于 HTTPS)

Step 1:在 VPS 上安装 Tailscale

首先,在 VPS 上安装并启动 Tailscale

# 安装 Tailscale
curl -fsSL https://tailscale.com/install.sh | sh

# 启动并登录
tailscale up

Step 2:使用 Docker 安装 Derper

可以选择 docker rundocker compose 两种方式部署

方法一:使用默认 Docker

docker run \
--name derper \
-e DERP_DOMAIN=123.com \
-e DERP_CERT_MODE=manual \
-e DERP_STUN=true \
-e DERP_VERIFY_CLIENTS=true \
-v /root/.acme.sh/123.com_ecc/:/app/certs \
-v /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock \
-p 23443:443 \
-p 2380:80 \
-p 3478:3478/udp \
fredliang/derper

参数说明:

DERP_DOMAIN 你的域名

DERP_CERT_MODE=manual手动证书模式

DERP_STUN=true开启 STUN

DERP_VERIFY_CLIENTS=true 验证客户端身份,防止被白嫖

-v 证书路径、Tailscale socket

-p 端口映射:3478(UDP 最好不要修改),Derper 必须要 44380 端口,而这些端口很容易被网站、Trojan 代理占用,所以使用 Docker 部署,可以自定义为 234432380 或其他

方法二:使用 Docker Compose

services:
  derper:
    image: fredliang/derper
    environment:
      - DERP_DOMAIN=123.com
      - DERP_CERT_MODE=manual
      - DERP_STUN=true
      - DERP_VERIFY_CLIENTS=true
    volumes:
      - /root/.acme.sh/123.com_ecc/:/app/certs
      - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock
    ports:
      - 12443:443
      - 1280:80
      - 3478:3478/udp

启动服务: docker compose up -d

注意:容器内 derper 默认会找 xxx.crt 和 xxx.key,但实际可能只有 .cer 文件

解决方法: 先找到 fullchain.cer 位置

ls -l /root/.acme.sh/123.com_ecc/

再进行软连接:

ln -s fullchain.cer 123.com.crt

再次启动容器


Step 3: 进入 Tailscale 控制台 - Access controls,选择 JSON editor 模式,修改新增 derpMap

记得提前保存 Tailscale ACL 原配置,以防 bug

    "derpMap": {
        "OmitDefaultRegions": true, // 设置为 True 则丢弃所有 Tailscale 官方中转节点
        "Regions": {
            "900": {
                "RegionID":   900, // tailscale 900-999 是保留给自定义 derper
                "RegionCode": "HK", // 随便命名
                "RegionName": "HK123", // 随便命名
                "Nodes": [
                    {
                        "Name":             "AAA", // 随便命名
                        "RegionID":         900,
                        "Hostname":         "123.com", // 你的 VPS 域名
                        "DERPPort":         23443, //上面 Docker 自定义的端口
                        "InsecureForTests": true, // 因为是自签名证书,所以客户端不做校验
                    },
                ],
            },
        },
    },

测试

tailscale netcheck

看到自己的 VPS RegionName 即可

也可以 tailscale ping xxxx 测试一下