juanfont/headscale
GitHub: juanfont/headscale
Headscale 是 Tailscale 控制服务器的开源自托管实现,让你在自己的服务器上搭建私有化的 WireGuard mesh VPN 协调层。
Stars: 35995 | Forks: 1934


一个开源的、自托管的 Tailscale 控制服务器实现。
加入我们的 [Discord 服务器](https://discord.gg/c84AZQhmpx)进行交流。
**注意:** 请始终选择与您使用的发布版本相同的 GitHub 标签,
以确保您拥有正确的示例配置。`main` 分支可能
包含未发布的更改。文档适用于稳定版和
开发版:
- [稳定版文档](https://headscale.net/stable/)
- [开发版文档](https://headscale.net/development/)
## 什么是 Tailscale
Tailscale 是一个建立在 [Wireguard](https://www.wireguard.com/) 之上的 [现代 VPN](https://tailscale.com/)。
它 [像一个覆盖网络一样工作](https://tailscale.com/blog/how-tailscale-works/)
位于您网络中的计算机之间 - 使用 [NAT 穿透](https://tailscale.com/blog/how-nat-traversal-works/)。
Tailscale 中的所有内容都是开源的,除了专有操作系统(Windows 和 macOS/iOS)的 GUI 客户端,以及控制服务器。
控制服务器充当 Tailscale 网络中节点的 Wireguard 公钥交换点。它分配客户端的 IP 地址,在每个用户之间创建边界,允许用户之间共享机器,并公开您节点的广播路由。
一个 [Tailscale 网络 (tailnet)](https://tailscale.com/kb/1136/tailnet/) 是 Tailscale 分配给用户(就私人用户或组织而言)的私有网络。
## 设计目标
Headscale 旨在实现 [Tailscale](https://tailscale.com/) 控制服务器的自托管、开源替代方案。Headscale 的目标是为自托管爱好者和发烧友提供一个可用于其项目和实验室的开源服务器。它实现了一个较小的范围,即一个 _单一_ Tailscale 网络 (tailnet),适合个人使用或小型开源组织。
## 功能
请参阅文档中的 [“功能”](https://headscale.net/stable/about/features/)。
## 客户端操作系统支持
请参阅文档中的 [“客户端和操作系统支持”](https://headscale.net/stable/about/clients/)。
## 运行 headscale
**请注意,我们不支持也不鼓励使用反向代理和容器来运行 Headscale。**
请查看 [`文档`](https://headscale.net/stable/)。
对于 NixOS 用户,[`nix/`](./nix/) 中提供了一个模块。
## 演讲
- Fosdem 2026 (视频): [Headscale & Tailscale: The complementary open source clone](https://fosdem.org/2026/schedule/event/KYQ3LL-headscale-the-complementary-open-source-clone/)
- 由 Kristoffer Dalby 演讲
- Fosdem 2023 (视频): [Headscale: How we are using integration testing to reimplement Tailscale](https://fosdem.org/2023/schedule/event/goheadscale/)
- 由 Juan Font Alonso 和 Kristoffer Dalby 演讲
## 免责声明
本项目与 Tailscale Inc. 没有关联。
然而,Headscale 的一位活跃维护者 [受雇于 Tailscale](https://tailscale.com/blog/opensource),他被允许在工作时间为项目做出贡献。来自该维护者的贡献由其他维护者审查。
维护者们共同制定项目的方向。基本原则是为自托管者、发烧友和爱好者的社区服务——同时保持项目的可持续性。
### 要求
要为 headscale 做出贡献,您需要最新版本的 [Go](https://golang.org)
和 [Buf](https://buf.build) (Protobuf 生成器)。
我们建议使用 [Nix](https://nixos.org/) 来设置开发环境。这可以
通过 `nix develop` 完成,它将安装工具并为您提供一个 shell。
这保证您将拥有与 `headscale` 维护者相同的开发环境。
### 代码风格
为了确保我们在越来越多的贡献中保持一定的一致性,
本项目采用了代码检查和风格/格式化规则:
**Go** 代码使用 [`golangci-lint`](https://golangci-lint.run) 进行检查,
并使用 [`golines`](https://github.com/segmentio/golines) (宽度 88) 和
[`gofumpt`](https://github.com/mvdan/gofumpt) 进行格式化。
请配置您的编辑器在开发时运行这些工具,并确保在
提交任何代码之前运行 `make lint` 和 `make fmt`。
**Proto** 代码使用 [`buf`](https://docs.buf.build/lint/overview) 进行检查,
并使用 [`clang-format`](https://clang.llvm.org/docs/ClangFormat.html) 进行格式化。
**文档** 使用 [`mdformat`](https://mdformat.readthedocs.io) 进行格式化。
**其余部分** (Markdown, YAML 等) 使用 [`prettier`](https://prettier.io) 进行格式化。
查看 `.golangci.yaml` 和 `Makefile` 以查看具体配置。
### 安装开发工具
- Go
- Buf
- Protobuf 工具
安装并激活:
```
nix develop
```
### 测试和构建
项目的某些部分需要从 Protobuf 生成 Go 代码
(如果在 `proto/` 中进行了更改),并且必须使用以下命令(重新)生成:
```
make generate
```
**注意:** 请在单独的提交中提交 `gen/` 的更改,以便于审查。
要运行测试:
```
make test
```
要构建程序:
```
make build
```
### 开发工作流
我们建议使用 Nix 进行依赖管理,以确保您拥有所有必需的工具。如果您更喜欢自己管理依赖,可以直接使用 Make:
**使用 Nix(推荐):**
```
nix develop
make test
make build
```
**使用您自己的依赖:**
```
make test
make build
```
如果缺少任何必需的工具,Makefile 会警告您并建议运行 `nix develop`。运行 `make help` 查看所有可用目标。
## 贡献者
由 [contrib.rocks](https://contrib.rocks) 制作。
标签:EVTX分析, EVTX分析, Headscale, Linux运维, Mesh网络, NAT穿透, Python工具, SD-WAN, Tailscale, VPN, WireGuard, 内网穿透, 去中心化, 安全组网, 开源, 控制服务器, 日志审计, 私有网络, 网络覆盖, 网络通信, 自托管, 远程访问