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

自建 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)
http://www.xdnf.cn/news/12147.html

相关文章:

  • golang 如何定义一种能够与自身类型值进行比较的Interface
  • 【论文解读】MemGPT: 迈向为操作系统的LLM
  • 13.4 AI颠覆语言学习:预录制视频+GPT-4评估如何实现60%成本降低与40%留存飙升
  • 阿里云域名怎么绑定
  • Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
  • React---day9
  • Python爬虫与Java爬虫深度对比:从原理到实战案例解析
  • 用函数实现模块化程序设计(适合考研、专升本)
  • 自定义注解facade 实现切面 进行日志记录和参数校验
  • Xcode 16.4 + iOS 18 系统运行时崩溃:___cxa_current_primary_exception 符号丢失的原因与解决方案
  • 用 n8n 提取静态网页内容:从 HTTP Request 到 HTML 节点全解析
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice在线编辑word文件保存数据同时保存文件
  • Ubuntu20.04设置为开机后直接自动进入纯命令行界面
  • mysql复合查询mysql子查询
  • 深度学习姿态估计实战:基于ONNX Runtime的YOLOv8 Pose部署全解析
  • IDEA:配置 Git 需要完成 Git 路径设置、账号认证以及仓库关联三个主要步骤
  • 目标检测实战:让AI“看见“并定位物体(superior哥AI系列第11期)
  • [Zynq] Zynq Linux 环境下 AXI UART Lite 使用方法详解(代码示例)
  • ArcGIS Pro 3.4 二次开发 - 宗地
  • HarmonyOS:如何在启动框架中初始化HMRouter
  • 【前端】vue3性能优化方案
  • 【Linux】Linux基础指令1
  • RPA+AI:自动化办公机器人开发指南
  • 基于值函数的强化学习算法之Double Q-Learning详解
  • 129、QT搭建FFmpeg环境
  • vue3+ts实现百度地图鼠标绘制多边形
  • 【websocket】安装与使用
  • 在word中点击zotero Add/Edit Citation没有反应的解决办法
  • 前端js获取当前经纬度(H5/pc/mac/window都可用)
  • 腾讯云V3签名