官方derp节点都在境外,速度感人,大陆用户一般会选择自建derp节点来加速网络连接。下面记录无域名的情况下使用docker自建derp节点,并防止他人盗用的一种方式。
极速教程
VPS安装tailscale
# vps上运行
curl -fsSL https://tailscale.com/install.sh | sudo sh
安装完成后输入sudo tailscale up
获取登录链接,将链接复制到浏览器上打开,完成登录后终端会打印success表示登录成功。
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": "自建节点",
},
},
},
检查
到这里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.大佬教程