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

1、目标

根据该教程,最终可以完成:
  1. 搭建自己的 Headscale:通过 Headscale 管理自己的节点。
  1. 搭建自己的 DERP 服务:通过自己搭建的 DERP 节点加速节点之间的访问。
  1. 部署 Caddy 服务:通过 Caddy 完成反向代理。
 
如果你不需要使用自己的 Headscale 管理自己的节点,只需要加速,那么只需要部署 DERP 服务即可。
 
本文中的 docker-compose 的代码仓库:
headscale
Github
headscale
Owner
xpzouying
Updated
Jan 9, 2025

2、准备

  1. 一台云服务器:必须。
    1. 作用:部署服务。
    2. 性能要求:入门款即可,我自己的服务器是:1C2G,2M带宽的入门款。
  1. 一个域名:在该教程中必须,没有域名的话,可能也可以,但是我没有尝试过。
    1. 可能需要备案。
 
💡
在该教程中的域名会假设 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 服务。
 
配置域名解析:
💡
将 headscale, derper 的子域名分别指向你的云服务器。
 
以 CloudFlare 为例,
notion image

3.2、创建 Docker 网络

 
运行效果,
notion image
 

3.3、部署 Headscale

目的:在云主机上完成 Headscale 的部署。
效果:部署完成后,可以通过 Headscale 管理自己的节点。
 
Headscale 的 docker 数据都放到 headscale 目录统一管理,其中包括:
  • docker-compose.yaml
  • container-data - headscale 的数据文件,包括数据库文件、密钥等。
  • container-config - headscale 配置文件,类似于 /etc/headscale/ 中的配置文件。
 

1)创建 docker-compose.yaml

创建 docker-compose.yaml,内容如下,
 

2)Headscale 配置文件

在 docker-compose.yaml 同级目录下,创建 2 个文件夹,
 
headscale
Github
headscale
Owner
juanfont
Updated
Oct 27, 2023
下载 headscale 服务的配置文件,
将该文件保存到:container-config/config.yaml。
 
变更 config.yaml 的部分配置(其他都不变)
 

3)启动 headscale 服务

经过上面配置后,目录内容如下,
notion image
 
启动 docker 实例,
 
运行结果:成功。
notion image
 

4)配置 Caddy 反向代理

此时 headscale 实例部署成功,但是因为我们没有将容器的端口暴露出来,所以需要使用 Caddy 反向代理到 headscale 实例的 8080 端口上。
 
notion image
 

3.4、部署 Caddy 服务

1)目的

  1. HTTPS 证书自动申请。
  1. 反向代理到 docker 实例的端口。
 

2)docker-compose.yaml

所有 Caddy 的文件都放到放到 caddy/ 目录下管理,创建 caddy/docker-compose.yaml 文件,内容如下,
 
同上一样,创建两个目录:
  • container-data/
  • container-config/
 
notion image

3)Caddy 配置文件

编辑 container-config/Caddyfile 内容,编辑如下,
 
说明:
 

4)启动 Caddy 实例

运行命令,
 
运行结果:成功。
notion image
 
效果
可以打开下列地址验证是否配置成功,
  • headscale.zouying.com/windows
 
我使用的是 MacOS,所以下面的教程都是使用 MacOS 为例,Windows 系统类似。
 
notion image
可以看到,
  1. HTTPS 证书成功配置。这里是通过 Caddy 申请。
  1. MacOS 接入 Headscale 的教程。我们的 Tailscale 版本是:Version 1.44.0 (App Store),所以按照第一部分教程进行接入。
 

4、Headscale 管理节点

通过上面的教程,已经完成了 Headscale 服务的部署,接下来对自己的节点进行管理。通过这节内容,你可以完成:
  1. 完成 Headscale 的配置管理:
    1. 用户管理
    2. 节点管理
 
注意:headscale 命令都是直接通过 headscale docker 实例运行。
 
比如,查看当前 headscale 管理的节点,
结果如下,
notion image
 

4.1、Headscale 创建用户信息

使用 headscale 实例创建用户信息,
  1. 新建 user:新建用户。旧版本中是 namespace:用户空间,每一个用户有个用户空间。
  1. 新建 user preauthkey:我们使用 preauthkey 的方式添加用户的节点

1)创建 namespace

运行结果:
notion image
 

2)创建用户 preauthkey

添加节点时,我们使用预授权 key 的方式添加节点。需要注意:
  1. preauthkey 有过期时间,太久没有使用该 key 添加节点的话,key 就自动过期了。
  1. 一个 key 最多只能添加一个节点,如果要添加新节点,则创建新的 key。
 
创建新的 preauthkey
运行结果:
notion image

4.2、添加节点

将我们家里的一台内网机器添加到 Headscale 中管理。
 

1)添加 Linux 节点

(这里运行在家里的 Linux 节点)
 
使用刚才创建的 key,将家里的机器添加到 Headscale 中管理。
运行结果:
notion image

2)查看添加的节点

(这里运行在部署 Headscale 服务的公有云)
运行结果:
notion image

3)添加 MacOS 节点

介绍如何将我的 Macbook 添加到 Headscale 上管理。
前提:
  • MacOS 已经安装好 Tailscale
按住 OPTION键 + Tailscale 在任务栏的图标,点击 Debug 菜单,选择 Add Account 选项。
notion image
填入 headscale 的地址,
notion image
添加成功后,会自动弹出一个 headscale 页面,指导我们如何在 headscale 服务端新增该 MacOS 节点。
 
弹出页面如下,
notion image
 
回到 headscale 云服务器上,运行下列命令添加 MacOS 节点,
 
运行结果:
notion image
 

4)测试

Linux 节点
 
运行结果如下,
notion image
 
MacOS 节点
在命令行中查看,(或者直接在菜单栏上的图标查看)

5、总结

通过上面的教程,我们完成了:
  1. Caddy 反向代理的配置
  1. Headscale 服务的搭建及配置
  1. 自己节点的添加
 
下一篇文章将教大家如何创建自己的 DERP 节点进行加速。
 
自建 DERP ServerGithub 配置 CI/CD Workflow
Loading...