官方derp节点都在境外,速度感人,大陆用户一般会选择自建derp节点来加速网络连接。下面记录无域名的情况下使用docker自建derp节点,并防止他人盗用的一种方式。

极速教程

VPS安装tailscale

# vps上运行
curl -fsSL https://tailscale.com/install.sh | sudo sh

1.png

安装完成后输入sudo tailscale up获取登录链接,将链接复制到浏览器上打开,完成登录后终端会打印success表示登录成功。

2.png

docker安装derp

mkdir tailscale-derp
cd tailscale-derp
# 配置docker-compose.yml文件
echo "services:
  tailscale-derp:
    image: javaow/tailscale-derp
    container_name: tailscale-derp
    ports:
      - "0.0.0.0:10050:36666"
      - "0.0.0.0:3478:3478/udp"
    command:
      - ./derper
      - -hostname
      - "derp.javaow.com"
      - -a
      - ":36666"
      - -certmode
      - "manual"
      - -certdir
      - "/ssl"
      - --verify-clients
    volumes:
      - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock # 映射本地 tailscale 客户端验证连接,用来验证是 否被偷
    restart: always" > docker-compose.yml
# docker compose启动程序
docker compose up -d

最后访问https://your_ip/10050,如果网页显示如下表示derp安装成功:

DERP
This is a Tailscale DERP server.

Documentation:

About DERP
Protocol & Go docs
How to run a DERP server

配置ACL规则

打开官网的ACL页面,添加配置,点击保存

// 自建derp代理
    "derpMap": {
        "OmitDefaultRegions": true,
        "Regions": {
            "910": {
                "RegionID":   910, 
                "RegionCode": "自建节点",
                "Nodes": [
                    {
                        "Name":             "xxx", //随便写
                        "RegionID":         910,
                        "HostName":         "your_ip", //vps公网IP
                        "InsecureForTests": true,
                        "DERPPort":         10050, //和docker-compose文件的0.0.0.0:10050:36666对应
                    },
                ],
                "RegionName": "自建节点",
            },
        },
    },

3.png

检查

到这里derp就安装完成了,检查下tailscale组网状态吧

tailscale netcheck
tailscale status

进阶版-详细教程

我想自己编译Docker镜像?

没问题,Dockerfile如下:

# 编译
FROM golang:alpine AS builder

# 切换模块源为中国Go模块代理服务器
# RUN go env -w GOPROXY=https://goproxy.cn,direct

# 拉取代码
RUN go install tailscale.com/cmd/derper@latest

# 去除域名验证(删除cmd/derper/cert.go文件的91~93行)
RUN find /go/pkg/mod/tailscale.com@*/cmd/derper/cert.go -type f -exec sed -i '91,93d' {} +

# 编译
RUN derper_dir=$(find /go/pkg/mod/tailscale.com@*/cmd/derper -type d) && \
    cd $derper_dir && \
    go build -o /etc/derp/derper

# 生成最终镜像
FROM alpine:latest

WORKDIR /apps

COPY --from=builder /etc/derp/derper .

RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo 'Asia/Shanghai' > /etc/timezone

ENV LANG C.UTF-8

# 创建软链接 解决二进制无法执行问题 Amd架构必须执行,Arm不需要执行
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2

# 添加源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories

# 安装openssl
RUN apk add openssl && mkdir /ssl

# 生成自签10年证书
RUN openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout /ssl/derp.javaow.com.key -out /ssl/derp.javaow.com.crt -subj "/CN=derp.javaow.com" -addext "subjectAltName=DNS:derp.javaow.com"


CMD ./derper -hostname derp.javaow.com -a :36666 -certmode manual -certdir /ssl

注意1:最好使用国外服务器,国内github和docker连通性不是很好
注意2:此版本是Amd架构,如果要在Arm架构打包需要把 RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2 这一行注释或者删除(此行为了解决Amd架构下alpine镜像无法执行二进制问题)
注意3:随着版本更新,cert.go文件中的代码行数可能发生变化,当前版本是注释91\~93行这3行即可,编译前最好去官方仓库看下,否则编译不通过

参考链接:

1.大佬教程

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