type
status
date
slug
summary
tags
category
icon
password
之前一直使用 Tailscale 管理自己的虚拟机,研究了一下如何使用 HeadScale 管理自己的虚拟机集群。
虚拟机访问
虚拟机访问

1、目标

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

1.1、写在最前面(2025年1月12日更新)

现在最新的官方部署非常非常简单,
假设你已经有 Golang 的环境,直接运行下面即可完成 DERP 自建的安装和部署,
 
参考文章:

2、准备

  1. 一台云服务器:必须。
    1. 作用:部署服务。
    2. 性能要求:入门款即可,我自己的服务器是:1C2G,2M带宽的入门款。
  1. 一个域名:在该教程中必须,没有域名的话,可能也可以,但是我没有尝试过。
    1. 可能需要备案。
 
💡
在该教程中的域名会假设 zouying.com ,该域名在部署时更换成你的域名。
 
我们会把 DERP Server 解析到 [derper.zouying.com] 的域名。

3、部署

3.1、部署说明

 
在整个部署环节会使用 Docker 进行部署和管理,所以要求:
  • 云主机上安装好了 Docker 服务。
 
在部署中使用 Caddy2 进行反向代理,实际上使用它的主要作用是使用它帮我们申请 https 的证书。
 
最终整个网络的架构示意图如下,
notion image
 
说明:
  1. headscale-network:docker network,所有的容器都挂载在它上面。
  1. Caddy:反向代理管理。
    1. headscale.zouying.com - 指向 Headscale 服务。
    2. derper.zouying.com - 指向 DERP 服务。
 
我们这一篇文章仅仅围绕 DERP 的部署,其他的内容参考之前的文章
 

3.2、部署 DERP Server

目的:在云主机上完成 DERP 节点的部署。
效果:部署完成后,可以将自建的 DERP 节点添加到 Tailscale 中,极大的加速访问。
 

1)自建的原因

运行命令 tailscale netcheck 检查当前的网络,
tailscale netcheck
tailscale netcheck
通过上面的结果看到 tailscale 默认的 DERP 节点,在中国大陆地区没有部署官方的 DERP 节点,最近的 DERP 是 [Hong Kong] 香港节点。所以当我们使用 DERP 连接我们自己节点时,就会跳转到 [Hong Kong] 节点后,再访问到对应的服务器节点,从而访问延迟就大大加大。
 
运行命令查看延迟情况,
运行结果如下,
tailscale status
tailscale status
通过运行结果,可以看到当前有 3 个节点可用,其中以 [mj] 节点为例,当我们通过连接 mj 时,需要通过 DERP(tok) 节点进行访问,即东京的服务器节点访问。
 
比如,我在北京,公司的电脑「zouying-node」访问「mj」节点,就会变成下面的情况,
 
DERP(tok) 访问示意图
DERP(tok) 访问示意图
因此,通过 [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 服务。
      • 备注:这里我尝试使用默认的 443 端口,在配置 Caddy 反向代理时就会出错。
    • DERP_VERIFY_CLIENTS:默认为 false,大家都可以使用,也就是只要别人的 tailscale ACLs 里面配置你的 DERP 信息,就可以白嫖。修改 true 后,你就需要在 DERP 的节点上安装 tailscale,只有你自己 tailscale 连接的节点才可以使用你这个 DERP。
      • 如果使用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)运行

运行,
 
运行结果,
notion image
 
现在 Docker 容器的实例运行成功,接下来使用 Caddy 将 [derper.zouying.com] 的域名代理到容器上。
 

3.3、配置 Caddy

打开 [caddy/container-config/Caddyfile] 配置文件,增加 DERP 的解析,
注意:
  • 这里 19850 端口与 DERP 中 DERP_ADDR 指定的端口需要保持一致。
 
运行,
 
检查运行结果,使用浏览器打开 DERP 指定的域名:[https://derper.zouying.com/],
notion image
能打开该域名,并且 HTTPS 证书正常。
 

3.4、增加自定义 DERP 节点

 

1)官方的 Tailscale Admin Console

在官方的 Tailscale 中增加自定义的 DERP 节点,
 
点击状态栏中的 Tailscale 图标,选择用户信息,选择「Admin Console」
notion image
 
打开 「Access controls」 页面,
notion image
 
在下面的增加 DERP 节点,在 derpMap 下面增加节点项。下面是我的配置示例,
注意:
  • HostName: derper.zouying.com。必须修改成你自己的 DERP 域名。
  • IPv4: 必须修改成自己的 IP 地址。注意:我测试的时候必须写 IP 地址,否则就不生效。
增加后,保存。
 
查看效果,
运行 tailscale netcheck
查看新增 DERP 节点
查看新增 DERP 节点
可以从运行结果中看到新增加的 DERP 节点,添加 DERP 节点成功。

2)自建 Headscale

下面给自建的 Headscale 增加自建的 DERP 节点。
 
A)修改 headscale 配置文件
修改 headscale 服务的配置文件,打开 [headscale/container-config/config.yaml]。
 
修改配置文件中的 derp 参数,
注意:
  1. server 参数
    1. enabled: false。不使用 headscale 自带的 DERP 功能,因为我们前面单独创建了 DERP 服务。
  1. paths:(重点)
    1. [/etc/headscale/derp.yaml]: 增加 DERP 节点的配置文件。
 
B)增加 DERP 节点的配置
前面已经建立了 DERP 节点,我们需要将节点的信息增加到 Headscale 中,类似于 Tailscale admin console 的配置文件功能。
 
新建 DERP 节点配置文件,新建 [headscale/container-config/derp.yaml] 文件,内容如下,
说明:(跟 Tailscale Admin Console 的 json 配置项类似)
  1. hostname: 修改成你的 DERP 的域名
  1. DERP 配置文件的详细实例参考 headscale 官方示例
 
增加配置文件后,[headscale/] 文件夹内容如下,
notion image
 
C)重启 headscale 服务
 
运行结果如下,
headscale 重启
headscale 重启
 
增加节点后,查看效果,
查看自建 DERP 节点
查看自建 DERP 节点
运行 tailscale netcheck 查看效果:已经能看到自建的 DERP 节点。
 
运行 tailscale status 可以看到访问其他节点已经可以通过自建 DERP 节点进行访问。
notion image
 
测试一下 ping 的延迟,对比一下前后效果。
通过自建 DERP 后 ping 延迟
通过自建 DERP 后 ping 延迟
对比以前之前的效果,从 200ms 下降到 20ms

4、测试

4.1. 测试端口

先在本机上面查看,derper 的端口是否正确。
首先从另外一台机器请求,测试端口的连接性。
 
 

5、 system 启动管理

  1. 增加 derper 服务文件
注意修改 derper 所在的路径:
2. 重新加载 systemd:
3. 启动服务:
  1. 设置开机自启:
  1. 检查服务状态:
 

6、总结

通过上面的教程,我们完成了:
  1. ✅ 自建的 DERP 节点的部署
  1. ✅ 增加 DERP 节点进行加速
自建密码管理服务 Bitwarden / VaultwardenHeadScale 管理虚拟机
Loading...