自建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

相关推荐
RisunJan1 小时前
Linux命令-scriptreplay(终端会话回放)
linux·运维·chrome
x²+(y-√³x²)²=12 小时前
Linux打包文件到Windows,文件/文件类型丢失
linux·运维·windows
世人万千丶2 小时前
去重插入与超限淘汰:ArkTS 实现鸿蒙搜索历史的 LIMIT 艺术
运维·服务器·学习·华为·harmonyos·鸿蒙
未来之窗软件服务3 小时前
企业自动化运营-电子合同预览-东方仙盟
运维·自动化·仙盟创梦ide·东方仙盟
程序员与背包客_CoderZ3 小时前
Linux D-Bus通信协议详解:从入门到C/C++编码实战
linux·服务器·c语言·c++·嵌入式硬件·嵌入式软件·dbus
Android系统攻城狮3 小时前
Linux PipeWire深度解析之pw_properties_iterate调用流程与实战(六十五)
linux·运维·服务器·音频进阶·pipewire音频进阶
研华科技Advantech4 小时前
案例 | 从离线巡检到在线看护:研华PHM解决方案赋能石油钻井平台智能运维
运维·人工智能·边缘计算
難釋懷4 小时前
Nginx主动健康检查
运维·nginx
ITyunwei09874 小时前
内存溢出报错,实战处理记录
运维·服务器·企业微信
Elastic 中国社区官方博客4 小时前
你的 AI agent 不需要你的 API 密钥:使用 OAuth 2.1 对 Elasticsearch MCP 服务器进行身份验证
大数据·运维·人工智能·elasticsearch·搜索引擎·全文检索