自建Tailscale的Derp服务器

方案:使用Docker搭建,公网IP

Dockerfile

1.2.3.4:替换成公网IP

20010:替换成自定义端口

bash 复制代码
# 构建阶段:编译 derper
FROM golang:1.25-alpine AS builder

WORKDIR /app

# 设置国内 Go 模块代理
ENV GOPROXY=https://goproxy.cn,direct

# 安装 git
RUN apk add --no-cache git

# 下载并编译 derper
RUN go install tailscale.com/cmd/derper@main && \
    # 验证是否生成成功
    if [ ! -f /go/bin/derper ]; then \
        echo "Error: derper binary not found!"; \
        exit 1; \
    fi

# 运行阶段
FROM alpine:3.20

WORKDIR /app

# 安装 openssl 用于生成自签证书
RUN apk add --no-cache openssl

# 复制编译好的 derper
COPY --from=builder /go/bin/derper /app/derper

# 创建证书目录
RUN mkdir -p /etc/derp/certs && chmod 755 /etc/derp/certs

# 生成自签证书(使用公网IP)
RUN openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
    -keyout /etc/derp/certs/derp.key -out /etc/derp/certs/derp.crt \
    -subj "/CN=1.2.3.4" -addext "subjectAltName=IP:1.2.3.4" && \
    # 验证证书是否生成成功
    if [ ! -f /etc/derp/certs/derp.crt ] || [ ! -f /etc/derp/certs/derp.key ]; then \
        echo "Error: Certificate files not found!"; \
        exit 1; \
    fi

# 暴露端口
EXPOSE 20010/tcp

# 启动命令
CMD ["/app/derper", "--hostname=1.2.3.4", "--certmode=manual", "--certdir=/etc/derp/certs", "--a=:20010"]

docker-compose.yml

bash 复制代码
version: '3'
services:
  my_derp:
    build: ./
    container_name: my_derp
    network_mode: host
    restart: always

配置Tailscale

登录https://login.tailscale.com/admin/acls/file,配置Access controls,使用"JSON editor",配置如下:

bash 复制代码
"derpMap": {
    "OmitDefaultRegions": true,
    "Regions": {
	    "901": {
            "RegionID":   901,
            "RegionCode": "Myself",
			"RegionName": "Myself Derper",
			"Nodes": [
			    {
				    "Name":"901a",
					"RegionID":901,
					"DERPPort":20010,
					"IPv4":"公网IP",
					"InsecureForTests": true,
			    },
			],
		},
	},
},

验证方法

1、网页访问https://公网IP:端口,看是否能访问

2、命令行:tailscale netcheck

相关推荐
jdyzzy5 小时前
2小时,我搭建了一套可追踪的任务管理流程
运维·devops·项目统计表
我和我导针锋相队5 小时前
在撰写项目书时,如何在有限的篇幅里平衡呈现“问题链”“合作证据链”和“创新落地计划”,避免内容冗余又能清晰传递核心信息?
大数据·运维·人工智能
白云千载尽5 小时前
ssh远程连接之后的scp命令工具来操作文件
运维·服务器·ssh
m0_564914925 小时前
Altium Designer,AD如何修改原理图右下角图纸标题栏?如何自定义标题栏?自定义原理图模版的使用方法
java·服务器·前端
想进部的张同学5 小时前
RK3588开发板安装GStreamer硬件加速插件完整指南 成功版本(docker)
运维·docker·容器·rkmpp
输出输入5 小时前
git和git hub区别
服务器
康康的AI博客5 小时前
AI辅助文献综述:基于Gemini 2.5 Pro的自动化研究革命
运维·自动化
陈聪.5 小时前
HRCE简单实验
linux·运维·数据库
涟漪海洋5 小时前
docker启动容器覆盖镜像中的命令
运维·docker·容器
haluhalu.5 小时前
从 Linux 线程控制到 pthread 库
java·linux·服务器