Summer

Summer

自建 DERP 中继服务器 中转Tailscale

2024-06-17
自建 DERP 中继服务器 中转Tailscale

准备

  • 一个域名

  • 一台VPS

部署

安装Docker

bash <(curl -sSL https://linuxmirrors.cn/docker.sh)

部署DERP

Letsencrypt自动申请证书

新建文件夹用来存放docker-compose.yaml文件

mkdir derp && cd derp

创建docker-compose.yaml文件

nano docker-compose.yaml

填入:

version: "3"
services:
  derper:
    image: fredliang/derper:latest
    volumes:
    - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock # sock映射出来给客户端验证
    ports:
    - 80:80
    - 443:443 
    - 3478:3478/udp # 默认情况下也会开启 STUN 服务,UDP 端口是 3478
    restart: unless-stopped
    environment:
    - DERP_DOMAIN=derp.xxx.com
    - DERP_CERT_MODE=letsencrypt
    - DERP_VERIFY_CLIENTS=true

注意要提前解析服务器IP到域名

环境变量解释

更多环境变量请参考原项目

变量名称

是否必须

描述

DERP_DOMAIN

你的域名

DERP_CERT_DIR

获取证书的模式。

DERP_VERIFY_CLIENTS

通过本地尾缩实例验证此 DERP 服务器的客户端。

手动申请证书

提前申请好证书和私钥,并存放至/root/derp/certs

假设我的域名是 123456.xyz 那么证书文件的名称就是 123456.xyz.crt 私钥文件的名称就是 123456.xyz.key

如果申请出来的证书是.pem格式的 那么请将 fullchain.pem 改为 fullchain.crt | privkey.pem 改为 privkey.key

version: "3"
services:
  derper:
    image: fredliang/derper:latest
    volumes:
    - /root/derp/certs:/app/certs
    - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock # sock映射出来给客户端验证
    ports:
    - 3443:443 
    - 3478:3478/udp # 默认情况下也会开启 STUN 服务,UDP 端口是 3478
    restart: unless-stopped
    environment:
    - DERP_DOMAIN=derp.123456.xyz
    - DERP_CERT_MODE=manual
    - DERP_VERIFY_CLIENTS=true

使用

修改Tailscale的配置文件,添加如下内容

        "derpMap": {
                "OmitDefaultRegions": true,
                // OmitDefaultRegions 忽略官方的中继节点
                "Regions": {
                        // 这里的 901 从 900 开始随便取数字
                        "901": {
                                // RegionID 和上面的相等
                                "RegionID": 901,
                                // RegionCode 名称
                                "RegionCode": "Vultr-SG",
                                "Nodes": [
                                        {
                                                // Name 保持 1不动
                                                "Name":     "1",
                                                // 这个也和 RegionID 一样
                                                "RegionID": 901,
                                                // 域名
                                                "HostName": "<你的域名>",
                                                // 端口号
                                                "DERPPort": 443,
                                        },
                                ],
                        },
                },
        },