首先在服务器上安装tailscale(后面要用于验证是自己的机器,防止被偷流量): 在这里有每种Linux机型的安装代码 https://pkgs.tailscale.com/stable 对于腾讯云宝塔:
# Add the tailscale repository
sudo dnf config-manager --add-repo https://pkgs.tailscale.com/stable/centos/8/tailscale.repo
# Install Tailscale
sudo dnf install tailscale
# Enable and start tailscaled
sudo systemctl enable --now tailscaled
登录:
sudo tailscale up
确认sock文件是否存在
ls /var/run/tailscale/tailscaled.sock
一键:
docker run -d --name tailscale-derp \
-p 36666:36666 -p 3478:3478/udp \
--restart=always \
-v /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock \
javaow/tailscale-derp \
./derper -hostname derp.javaow.com -a :36666 -certmode manual -certdir /ssl --verify-clients
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
docker build -f dockerfile -t tailscale-derp
docker images
docker run -d --name tailscale-derp -p 36666:36666 -p 3478:3478/udp --restart=always tailscale-derp 主要注意点就是,随着版本更新cert.go文件中的代码行数可能发生变化,这时就需要修改dockerfile中的91,93d删除行数,只要保证把下面红框里的3行代码删除即可,这三行就是证书验证代码: if hi.Servername != m.hostname{
}
进入官方后台替换如下:
"derpMap": {
"OmitDefaultRegions": false,
"Regions": {
"910": {
"RegionID": 910,
"RegionCode": "自建节点",
"Nodes": [
{
"Name": "910",
"RegionID": 910,
"HostName": "xx.xx.xx.xx",
"InsecureForTests": true,
"DERPPort": 36666,
},
],
"RegionName": "自建节点",
},
},
},
或者使用composefile:
services:
tailscale-derp:
image: javaow/tailscale-derp
container_name: tailscale-derp
ports:
- "36666:36666"
- "3478:3478/udp"
volumes:
- /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock
command:
- ./derper
- -hostname
- "derp.javaow.com"
- -a
- ":36666"
- -certmode
- manual
- -certdir
- "/ssl"
- --verify-clients
restart: always
放在docker-compose.yaml文件里,然后
docker compose up -d
最后检查自建节点是否出现即可:
tailscale netcheck
tailscale status
tailscale ping xxxx
测试节点: tailscale debug derp 910
