当前位置: 首页 > news >正文

自建 Derp 中继节点

第一次搞的时候很久都不通,最近618腾讯云搞活动弄了一台机器,再搭建一次好像又挺简单的了,没几分钟就搞定了。这里还是记录一下操作过程。

安装 Golang

还好我们平时就是Go语言开发,这一步驾轻就熟了。不过要注意国内比较难直接从官方下载Golang安装包。可以从阿里云的镜像上拉取。

我安装的是 1.24 最新版:https://mirrors.aliyun.com/golang/go1.24.3.linux-amd64.tar.gz

下载后,是一个 tar.gz 压缩包。解压一下。

tar -xzvf go1.24.3.linux-amd64.tar.gz

然后,把Go加到环境变量,修改.bashrc

export GO_HOME="~/go1.24.3"
export PATH=$PATH:"$GO_HOME/bin"

⚠️ 注意:因为解压后默认目录名是 go,容易和默认的GOPATH重合,所以我改了一下名字是go1.24.3

安装Derp

go install tailscale.com/cmd/derper@main

这一步没啥可说的。

生成自签名证书

DERP_IP="12.12.12.12"
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout ${DERP_IP}.key -out ${DERP_IP}.crt -subj "/CN=${DERP_IP}" -addext "subjectAltName=IP:${DERP_IP}"

最好把生成的这两个文件放到一个单独目录中,例如~/derp/下。

运行服务

sudo /home/ubuntu/go/bin/derper --hostname="12.12.12.12" -c derp.conf -a :18476 -certmode manual -certdir ./
  • hostname 用于指定绑定的域名,现在新版本的derper也支持绑定IP了
  • c:用于指定derper的配置文件,如果配置文件不存在,会自动生成一个默认的,所以这一步可以不用预先生成;但必须指定文件
  • a:指定derper绑定的地址,这里主要用于修改端口为自定义端口
  • certmode:设置为 manual 用于手动指定证书
  • certdir:证书目录位置,因为我是在证书目录下执行的,所以直接./

⚠️ 注意:必须使用 sudo 权限才能运行,否则会报权限不足。

配置防火墙

一般现在的云服务厂商都会有类似「安全组策略」或者「防火墙」之类的功能,只允许指定的端口访问。这里我们开了一个自定义的 18476 端口,就必须配置 18476 端口允许外部进行访问才行。

以腾讯云为例:

Tailscale 配置

去到 Tailscale 的 admin 控制台网页,修改 Access control。https://login.tailscale.com/admin/acls/file

在 acls 的下方增加 derpMap 配置:

// Example/default ACLs for unrestricted connections.
{// 省略部分默认配置……"acls": [// 省略部分默认配置……],"derpMap": {"OmitDefaultRegions": true,"Regions": {// 这里的 901 从 900 开始随便取数字"901": {// RegionID 和上面的相等"RegionID": 901,// RegionCode 自己取个易于自己名字"RegionCode": "tencent","RegionName": "Guangzhou","Nodes": [{"Name":             "custom","RegionID":         901,"HostName":         "12.12.12.12","DERPPort":         18476,"InsecureForTests": true,},],},},},// 省略部分默认配置……
}

验证

去到客户端执行 tailscale netcheck

tailscale netcheckReport:* Time: 2025-06-05T09:34:53.161265896Z* UDP: false* IPv4: (no addr found)* IPv6: no, but OS has support* MappingVariesByDestIP: * PortMapping: * CaptivePortal: false* Nearest DERP: Guangzhou* DERP latency:- tencent: 7.8ms   (Guangzhou)

我发现windows、linux上安装的 tailscale 默认都会带 tailsacle 的命令行工具。唯独 MacOS 上没有。

后经我研究发现 MacOS 上的 tailscale 也是可以有命令行模式的:

/Applications/Tailscale.app/Contents/MacOS/Tailscale netcheck

Derp 服务化

默认你只能在当前 Shell 运行命令启动 derper,不方便运维。总不能一直开着 shell,或者一重启机器就要重新人工执行命令。

最好的方案是将 Derp 制作成 Ubuntu 的 Service,然后设置开机启动。

生成服务配置文件:/etc/systemd/system/derp.service

[Unit]
Description=TS Derper
After=network.target
Wants=network.target[Service]
User=root
Restart=always
ExecStart=/home/ubuntu/go/bin/derper --hostname="12.12.12.12" -c /home/ubuntu/derp/derp.conf -a :18443 -certmode manual -certdir /home/ubuntu/derp/
RestartPreventExitStatus=1[Install]
WantedBy=multi-user.target

⚠️ 注意:这里不再是在derp目录下执行了,所以-c-certdir指定的路径都必须是绝对路径。

然后执行如下命令:

# 开机启动
sudo systemctl enable derp
# 现在立即启动
sudo systemctl start derp

去到客户端执行 tailscale netcheck

tailscale netcheckReport:* Time: 2025-06-05T09:58:17.150311805Z* UDP: false* IPv4: (no addr found)* IPv6: no, but OS has support* MappingVariesByDestIP: * PortMapping: * CaptivePortal: false* Nearest DERP: Guangzhou* DERP latency:- tencent: 7.5ms   (Guangzhou)

相关文章:

  • Apache Doris + MCP:Agent 时代的实时数据分析底座
  • Java-39 深入浅出 Spring - AOP切面增强 核心概念 通知类型 XML+注解方式 附代码
  • 【Go语言基础【四】】局部变量、全局变量、形式参数
  • IDEA 开发PHP配置调试插件XDebug
  • 论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
  • 解锁FastAPI与MongoDB聚合管道的性能奥秘
  • 面试总结。
  • 《C++初阶之类和对象》【命名空间 + 输入输出 + 缺省参数 + 函数重载】
  • Sentinel微服务保护
  • MATLAB仿真:偏振光在光纤通信中的应用研究_可复现,有问题请联系博主
  • 【设计模式】门面/外观模式
  • Java 高频面试题场景(四):社区老年大学在线学习平台系统
  • 【Go语言基础【2】】数据类型之基础数据类型:数字、字符、布尔、枚举、自定义
  • 【Rust宏编程】Rust有关宏编程底层原理解析与应用实战
  • Monorepo架构: Lerna、NX、Turbo等对比与应用分析
  • 【Flask】:轻量级Python Web框架详解
  • Python----目标检测(yolov5-7.0安装及训练细胞)
  • 8086寻址解剖图:7种武器解锁x86内存访问的基因密码
  • AirSim/Cosys-AirSim 游戏开发(二)使用自定义场景
  • Web-图片上传出现的错误
  • 成都做网站建设/短视频seo系统
  • 宁波住房与城乡建设部网站/郑州竞价托管
  • 北京网站建设方案/如何写营销软文
  • 自己怎么做优惠搜网站/百度海南分公司
  • wordpress图片站/中国国家培训网官网入口
  • 如何投诉网站制作公司/网站建设选亿企网络