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

【实战指南】Tailscale DERP中继节点自建:从零到一,无需公网IP与域名

1. 为什么需要自建DERP中继节点

Tailscale作为一款基于WireGuard的现代组网工具,最大的优势就是能够自动建立点对点连接。但在实际使用中,约30%的情况下会因为NAT类型限制、防火墙策略等因素导致直连失败。这时就需要DERP(Detour Encrypted Routing for Packets)中继服务器来兜底转发流量。

我去年在给团队搭建跨地区开发环境时就遇到过这个问题:上海和北京的同事经常出现连接不稳定,视频会议卡成PPT。后来排查发现是因为某些办公网络的Symmetric NAT(对称型NAT)导致打洞失败。自建DERP节点后,不仅解决了连接问题,还将跨国传输延迟从380ms降到了210ms。

传统方案需要公网IP和域名才能搭建中继服务器,这对个人开发者和小团队来说门槛较高。而Tailscale的DERP服务有个独特优势:支持使用自签名证书和任意域名(包括虚构域名),这意味着你完全可以在没有真实域名的情况下,用一台最基础的云服务器完成部署。

2. 环境准备与依赖安装

2.1 服务器选择建议

实测下来,腾讯云或阿里云的1核1G轻量应用服务器就足够支撑20人左右的团队使用。我比较推荐Ubuntu 22.04系统,对新手更友好。需要注意的是:

  • 国内服务器建议选BGP线路,国际业务则优先香港/新加坡节点
  • 内存不要低于512MB,编译Go程序时容易OOM
  • 系统盘剩余空间需≥5GB

登录服务器后先做基础配置:

# 更新软件源 apt update && apt upgrade -y # 安装基础工具 apt install -y wget git openssl curl nano

2.2 Go语言环境配置

Tailscale的derper服务需要用Go编译,这里有个小技巧:如果服务器在国内,建议先配置镜像加速:

# 设置Go模块代理 go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct

接着安装特定版本的Go(以1.21.5为例):

wget https://go.dev/dl/go1.21.5.linux-amd64.tar.gz rm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz

配置环境变量时,建议同时写入bashrc和profile:

echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.bashrc echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile source ~/.bashrc

验证安装是否成功:

go version # 应该输出类似:go version go1.21.5 linux/amd64

3. 编译与配置derper服务

3.1 获取derper源码

直接通过go install获取最新代码:

go install tailscale.com/cmd/derper@main

编译好的二进制文件会出现在~/go/bin/目录。但我推荐手动编译到系统目录:

mkdir -p /etc/derp cd $(go list -f '{{.Dir}}' tailscale.com/cmd/derper) go build -o /etc/derp/derper

3.2 自签名证书生成

DERP服务需要TLS证书,但没有真实域名也能玩:

openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \ -keyout /etc/derp/derp.myself.com.key \ -out /etc/derp/derp.myself.com.crt \ -subj "/CN=derp.myself.com" \ -addext "subjectAltName=DNS:derp.myself.com"

这里有个坑要注意:证书的CommonName(CN)必须和后续的hostname参数完全一致,否则会导致客户端验证失败。

4. 服务部署与系统集成

4.1 创建systemd服务

新建服务配置文件/etc/systemd/system/derp.service

[Unit] Description=Tailscale DERP Server After=network.target [Service] User=root Restart=always ExecStart=/etc/derp/derper \ -hostname derp.myself.com \ -a :33445 \ -http-port 33446 \ -certmode manual \ -certdir /etc/derp \ -stun-port 3478 [Install] WantedBy=multi-user.target

关键参数说明:

  • -a指定DERP服务端口(可自定义)
  • -http-port用于状态检查的HTTP端口
  • -stun-portSTUN服务端口,建议保持默认3478

4.2 防火墙配置

云服务器通常有双重防火墙:

  1. 控制台安全组:放行TCP 33445和UDP 3478
  2. 系统防火墙(以ufw为例):
ufw allow 33445/tcp ufw allow 3478/udp ufw reload

启动服务并设置开机自启:

systemctl daemon-reload systemctl enable --now derp

检查服务状态:

systemctl status derp # 正常应该显示active (running)

5. Tailscale网络集成

5.1 ACL配置

登录Tailscale管理后台,修改ACL策略文件:

"derpMap": { "OmitDefaultRegions": true, "Regions": { "901": { "RegionID": 901, "RegionCode": "myderp", "RegionName": "My Private DERP", "Nodes": [ { "Name": "901a", "RegionID": 901, "DERPPort": 33445, "IPv4": "你的服务器IP", "InsecureForTests": true } ] } } }

重要安全提示:InsecureForTests参数仅限测试使用,正式环境应该配置合法证书并设为false。

5.2 客户端验证

在已加入Tailscale网络的设备上执行:

tailscale netcheck

正常输出应该包含你的自定义DERP区域:

DERP map: myderp: 你的服务器IP:33445 (via TCP)

如果显示连接失败,可以尝试:

tailscale ping 另一个客户端IP tailscale status

6. 安全加固与防滥用

6.1 启用Tailscale验证

为防止他人滥用你的中继服务器,需要在服务器上安装Tailscale客户端:

curl -fsSL https://tailscale.com/install.sh | sh tailscale up

然后修改derper服务配置,增加验证参数:

ExecStart=/etc/derp/derper \ -hostname derp.myself.com \ -a :33445 \ -http-port 33446 \ -certmode manual \ -certdir /etc/derp \ -stun-port 3478 \ -verify-clients

6.2 监控与维护

建议定期检查日志:

journalctl -u derp -f

常见问题处理:

  • 证书过期:重新生成并重启服务
  • 端口冲突:修改服务配置文件中的端口号
  • 内存泄漏:定期重启服务或限制内存用量

我在三台服务器上部署了这个方案,稳定运行超过半年。最关键的体会是:一定要做好监控,DERP服务虽然轻量,但在高并发时还是可能出现资源瓶颈。建议用crontab设置每天自动重启一次服务,可以有效避免内存泄漏问题。

http://www.jsqmd.com/news/1085397/

相关文章:

  • 从零到一:基于NuGet.Server构建企业级私有NuGet仓库
  • 从绿盟科技面试题看企业级安全工程师的核心技能栈
  • Zephyr MCUBoot:构建安全可靠的嵌入式固件升级方案
  • 高空驻空 “天眼 + 专网” 一体化全域演训透明化智能管控系统 技术解析白皮书
  • 实践指南:基于Docker在群晖NAS中部署企业级SVN版本控制服务
  • Protege与Cellfie实战:Excel数据批量导入OWL本体的典型错误排查指南
  • 金蝶EAS任意文件上传漏洞剖析:从原理到防御实战
  • 2026 网络安全完整自学指南,零基础小白进阶大神全套学习教程,收藏这篇就够了
  • [Android] 清鸽LocalAI -一键部署本地Ai模型
  • PP配置-生产车间控制-主数据-定义生产管理员(OPJ9-Define Production Supervisor)实战解析
  • 软考2026新科目备考黄金期只剩112天!资深命题组成员透露:这6类知识点已列入必考高频区
  • WindowsCleaner终极指南:快速解决C盘爆红问题的免费清理神器
  • PostgreSQL日期函数实战:从基础查询到智能时间处理
  • CVE-2019-2725漏洞深度剖析:从XML反序列化到WebLogic攻防实战
  • 3种神奇方法让任何设备变身游戏手柄:ViGEmBus虚拟控制器驱动完整指南
  • 工业驱动器接口EMC设计:从标准解读到实战滤波拓扑
  • Three.js 模型导航教程
  • 终极GTA5线上小助手完全指南:5个核心功能助你轻松玩转洛圣都
  • 前几天用AI搜自己产品,搜出来的全是竞品
  • 从USB2514i HUB芯片选型到稳定量产:硬件工程师的实战避坑指南
  • MTK芯片BROM模式完全指南:深度解密联发科设备底层通信机制
  • Windows Cleaner:3步解决C盘爆红问题的终极系统优化指南
  • 免费开源风扇控制神器:FanControl终极配置指南
  • PartKeepr开源库存管理系统:电子元件管理的最佳实践指南
  • WindowsCleaner:拯救爆满C盘,让你的Windows系统重获流畅体验
  • 3分钟解决TranslucentTB安装难题:Windows任务栏透明化终极指南
  • Beyond Standard Cells: A Practical Guide to Spare Cell, GDCAP, and DCAP in Advanced Node Tapeouts
  • Apache Tomcat CVE-2025-24813漏洞复现与安全加固实战
  • 《数电:绪论》1
  • 如何在Windows、Linux和macOS上高效部署MAA明日方舟助手?