type
status
date
slug
summary
tags
category
icon
password

1、目标
根据该教程,最终可以完成:
- 搭建自己的 Headscale:通过 Headscale 管理自己的节点。
- 部署 Caddy 服务:通过 Caddy 完成反向代理。
- 搭建自己的 DERP 服务:通过自己搭建的 DERP 节点加速节点之间的访问。
根据上一篇文章《HeadScale 管理虚拟机》,我们已经完成了 1 和 2。我们将在这一篇文章中,完成 DERP Server 的部署。
本文中的 docker-compose 的代码仓库:

headscale
Github
headscale
Owner
xpzouyingUpdated
Jan 9, 20251.1、写在最前面(2025年1月12日更新)
现在最新的官方部署非常非常简单,
假设你已经有 Golang 的环境,直接运行下面即可完成 DERP 自建的安装和部署,
参考文章:
2、准备
- 一台云服务器:必须。
- 作用:部署服务。
- 性能要求:入门款即可,我自己的服务器是:1C2G,2M带宽的入门款。
- 一个域名:在该教程中必须,没有域名的话,可能也可以,但是我没有尝试过。
- 可能需要备案。
在该教程中的域名会假设
zouying.com
,该域名在部署时更换成你的域名。我们会把 DERP Server 解析到 [derper.zouying.com] 的域名。
3、部署
3.1、部署说明
在整个部署环节会使用 Docker 进行部署和管理,所以要求:
- 云主机上安装好了 Docker 服务。
在部署中使用 Caddy2 进行反向代理,实际上使用它的主要作用是使用它帮我们申请 https 的证书。
最终整个网络的架构示意图如下,

说明:
- headscale-network:docker network,所有的容器都挂载在它上面。
- Caddy:反向代理管理。
- headscale.zouying.com - 指向 Headscale 服务。
- derper.zouying.com - 指向 DERP 服务。
我们这一篇文章仅仅围绕 DERP 的部署,其他的内容参考之前的文章。
3.2、部署 DERP Server
目的:在云主机上完成 DERP 节点的部署。
效果:部署完成后,可以将自建的 DERP 节点添加到 Tailscale 中,极大的加速访问。
1)自建的原因
运行命令
tailscale netcheck
检查当前的网络,
通过上面的结果看到 tailscale 默认的 DERP 节点,在中国大陆地区没有部署官方的 DERP 节点,最近的 DERP 是 [Hong Kong] 香港节点。所以当我们使用 DERP 连接我们自己节点时,就会跳转到 [Hong Kong] 节点后,再访问到对应的服务器节点,从而访问延迟就大大加大。
运行命令查看延迟情况,
运行结果如下,

通过运行结果,可以看到当前有 3 个节点可用,其中以 [mj] 节点为例,当我们通过连接 mj 时,需要通过 DERP(tok) 节点进行访问,即东京的服务器节点访问。
比如,我在北京,公司的电脑「zouying-node」访问「mj」节点,就会变成下面的情况,

因此,通过 [tailscale ping] 请求也可以看到延迟大概在 200ms 左右。
2)部署
跟之前一样,创建 [derper/] 目录,将 derper 相关的配置都放在改目录下。
创建
derper/docker-compose.yaml
文件,内容如下,Docker 镜像使用的是:https://hub.docker.com/r/fredliang/derper
注意:
- container_name: 容器名称 [derper]。
- networks: 挂载网络到 [headscale-network]。一定要跟 Caddy 容器挂载到一起。
- 环境变量:详细的环境变量可以参考镜像页面。
- DERP_DOMAIN: derper 的域名。一定要修改成你的域名。一会儿 Caddy 配置需要使用该容器名。
- DERP_CERT_MODE: letsencrypt。帮你申请 HTTPS 证书。
- DERP_ADDR: [:19850],监听端口在 19850 端口上面。因为都挂在
headscale-network
网络上,所以 caddy 是可以找到同一个网络中的 derper:19850 服务。 - DERP_VERIFY_CLIENTS:默认为 false,大家都可以使用,也就是只要别人的 tailscale ACLs 里面配置你的 DERP 信息,就可以白嫖。修改 true 后,你就需要在 DERP 的节点上安装 tailscale,只有你自己 tailscale 连接的节点才可以使用你这个 DERP。
备注:这里我尝试使用默认的 443 端口,在配置 Caddy 反向代理时就会出错。
如果使用DERP_VERIFY_CLIENTS则需要挂载tailscaled.sock,使容器能访问到外部机器derper进程。(参考 https://always200.com/tailscale-derper-docker)
挂载:/var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock
云主机务必开启:
* UDP 3478 端口
* UDP 41641 端口
具体端口开放的官方说明:https://tailscale.com/kb/1082/firewall-ports/
3)运行
运行,
运行结果,

现在 Docker 容器的实例运行成功,接下来使用 Caddy 将 [derper.zouying.com] 的域名代理到容器上。
3.3、配置 Caddy
打开 [caddy/container-config/Caddyfile] 配置文件,增加 DERP 的解析,
注意:
- 这里 19850 端口与 DERP 中 DERP_ADDR 指定的端口需要保持一致。
运行,
检查运行结果,使用浏览器打开 DERP 指定的域名:[https://derper.zouying.com/],

能打开该域名,并且 HTTPS 证书正常。
3.4、增加自定义 DERP 节点
1)官方的 Tailscale Admin Console
在官方的 Tailscale 中增加自定义的 DERP 节点,
点击状态栏中的 Tailscale 图标,选择用户信息,选择「Admin Console」。

打开 「Access controls」 页面,

在下面的增加 DERP 节点,在 derpMap 下面增加节点项。下面是我的配置示例,
注意:
- HostName: derper.zouying.com。必须修改成你自己的 DERP 域名。
- IPv4: 必须修改成自己的 IP 地址。注意:我测试的时候必须写 IP 地址,否则就不生效。
增加后,保存。
查看效果,
运行
tailscale netcheck

可以从运行结果中看到新增加的 DERP 节点,添加 DERP 节点成功。
2)自建 Headscale
下面给自建的 Headscale 增加自建的 DERP 节点。
A)修改 headscale 配置文件
修改 headscale 服务的配置文件,打开 [headscale/container-config/config.yaml]。
修改配置文件中的 derp 参数,
注意:
- server 参数
- enabled: false。不使用 headscale 自带的 DERP 功能,因为我们前面单独创建了 DERP 服务。
- paths:(重点)
- [/etc/headscale/derp.yaml]: 增加 DERP 节点的配置文件。
B)增加 DERP 节点的配置
前面已经建立了 DERP 节点,我们需要将节点的信息增加到 Headscale 中,类似于 Tailscale admin console 的配置文件功能。
新建 DERP 节点配置文件,新建 [headscale/container-config/derp.yaml] 文件,内容如下,
说明:(跟 Tailscale Admin Console 的 json 配置项类似)
- hostname: 修改成你的 DERP 的域名
- DERP 配置文件的详细实例参考 headscale 官方示例。
增加配置文件后,[headscale/] 文件夹内容如下,

C)重启 headscale 服务
运行结果如下,

增加节点后,查看效果,

运行
tailscale netcheck
查看效果:已经能看到自建的 DERP 节点。运行
tailscale status
可以看到访问其他节点已经可以通过自建 DERP 节点进行访问。
测试一下 ping 的延迟,对比一下前后效果。

对比以前之前的效果,从 200ms 下降到 20ms。
4、测试
4.1. 测试端口
先在本机上面查看,derper 的端口是否正确。
首先从另外一台机器请求,测试端口的连接性。
5、 system 启动管理
- 增加 derper 服务文件
注意修改 derper 所在的路径:
2. 重新加载 systemd:
3. 启动服务:
- 设置开机自启:
- 检查服务状态:
6、总结
通过上面的教程,我们完成了:
- ✅ 自建的 DERP 节点的部署
- ✅ 增加 DERP 节点进行加速
- 作者:zouying
- 链接:https://haha.ai/derper
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章