mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			171 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	

 | 
						|
 | 
						|

 | 
						|
 | 
						|
An open source, self-hosted implementation of the Tailscale control server.
 | 
						|
 | 
						|
Join our [Discord server](https://discord.gg/c84AZQhmpx) for a chat.
 | 
						|
 | 
						|
**Note:** Always select the same GitHub tag as the released version you use
 | 
						|
to ensure you have the correct example configuration. The `main` branch might
 | 
						|
contain unreleased changes. The documentation is available for stable and
 | 
						|
development versions:
 | 
						|
 | 
						|
- [Documentation for the stable version](https://headscale.net/stable/)
 | 
						|
- [Documentation for the development version](https://headscale.net/development/)
 | 
						|
 | 
						|
## What is Tailscale
 | 
						|
 | 
						|
Tailscale is [a modern VPN](https://tailscale.com/) built on top of
 | 
						|
[Wireguard](https://www.wireguard.com/).
 | 
						|
It [works like an overlay network](https://tailscale.com/blog/how-tailscale-works/)
 | 
						|
between the computers of your networks - using
 | 
						|
[NAT traversal](https://tailscale.com/blog/how-nat-traversal-works/).
 | 
						|
 | 
						|
Everything in Tailscale is Open Source, except the GUI clients for proprietary OS
 | 
						|
(Windows and macOS/iOS), and the control server.
 | 
						|
 | 
						|
The control server works as an exchange point of Wireguard public keys for the
 | 
						|
nodes in the Tailscale network. It assigns the IP addresses of the clients,
 | 
						|
creates the boundaries between each user, enables sharing machines between users,
 | 
						|
and exposes the advertised routes of your nodes.
 | 
						|
 | 
						|
A [Tailscale network (tailnet)](https://tailscale.com/kb/1136/tailnet/) is private
 | 
						|
network which Tailscale assigns to a user in terms of private users or an
 | 
						|
organisation.
 | 
						|
 | 
						|
## Design goal
 | 
						|
 | 
						|
Headscale aims to implement a self-hosted, open source alternative to the
 | 
						|
[Tailscale](https://tailscale.com/) control server. Headscale's goal is to
 | 
						|
provide self-hosters and hobbyists with an open-source server they can use for
 | 
						|
their projects and labs. It implements a narrow scope, a _single_ Tailscale
 | 
						|
network (tailnet), suitable for a personal use, or a small open-source
 | 
						|
organisation.
 | 
						|
 | 
						|
## Supporting Headscale
 | 
						|
 | 
						|
If you like `headscale` and find it useful, there is a sponsorship and donation
 | 
						|
buttons available in the repo.
 | 
						|
 | 
						|
## Features
 | 
						|
 | 
						|
Please see ["Features" in the documentation](https://headscale.net/stable/about/features/).
 | 
						|
 | 
						|
## Client OS support
 | 
						|
 | 
						|
Please see ["Client and operating system support" in the documentation](https://headscale.net/stable/about/clients/).
 | 
						|
 | 
						|
## Running headscale
 | 
						|
 | 
						|
**Please note that we do not support nor encourage the use of reverse proxies
 | 
						|
and container to run Headscale.**
 | 
						|
 | 
						|
Please have a look at the [`documentation`](https://headscale.net/stable/).
 | 
						|
 | 
						|
## Talks
 | 
						|
 | 
						|
- Fosdem 2023 (video): [Headscale: How we are using integration testing to reimplement Tailscale](https://fosdem.org/2023/schedule/event/goheadscale/)
 | 
						|
  - presented by Juan Font Alonso and Kristoffer Dalby
 | 
						|
 | 
						|
## Disclaimer
 | 
						|
 | 
						|
This project is not associated with Tailscale Inc.
 | 
						|
 | 
						|
However, one of the active maintainers for Headscale [is employed by Tailscale](https://tailscale.com/blog/opensource) and he is allowed to spend work hours contributing to the project. Contributions from this maintainer are reviewed by other maintainers.
 | 
						|
 | 
						|
The maintainers work together on setting the direction for the project. The underlying principle is to serve the community of self-hosters, enthusiasts and hobbyists - while having a sustainable project.
 | 
						|
 | 
						|
## Contributing
 | 
						|
 | 
						|
Please read the [CONTRIBUTING.md](./CONTRIBUTING.md) file.
 | 
						|
 | 
						|
### Requirements
 | 
						|
 | 
						|
To contribute to headscale you would need the latest version of [Go](https://golang.org)
 | 
						|
and [Buf](https://buf.build) (Protobuf generator).
 | 
						|
 | 
						|
We recommend using [Nix](https://nixos.org/) to setup a development environment. This can
 | 
						|
be done with `nix develop`, which will install the tools and give you a shell.
 | 
						|
This guarantees that you will have the same dev env as `headscale` maintainers.
 | 
						|
 | 
						|
### Code style
 | 
						|
 | 
						|
To ensure we have some consistency with a growing number of contributions,
 | 
						|
this project has adopted linting and style/formatting rules:
 | 
						|
 | 
						|
The **Go** code is linted with [`golangci-lint`](https://golangci-lint.run) and
 | 
						|
formatted with [`golines`](https://github.com/segmentio/golines) (width 88) and
 | 
						|
[`gofumpt`](https://github.com/mvdan/gofumpt).
 | 
						|
Please configure your editor to run the tools while developing and make sure to
 | 
						|
run `make lint` and `make fmt` before committing any code.
 | 
						|
 | 
						|
The **Proto** code is linted with [`buf`](https://docs.buf.build/lint/overview) and
 | 
						|
formatted with [`clang-format`](https://clang.llvm.org/docs/ClangFormat.html).
 | 
						|
 | 
						|
The **rest** (Markdown, YAML, etc) is formatted with [`prettier`](https://prettier.io).
 | 
						|
 | 
						|
Check out the `.golangci.yaml` and `Makefile` to see the specific configuration.
 | 
						|
 | 
						|
### Install development tools
 | 
						|
 | 
						|
- Go
 | 
						|
- Buf
 | 
						|
- Protobuf tools
 | 
						|
 | 
						|
Install and activate:
 | 
						|
 | 
						|
```shell
 | 
						|
nix develop
 | 
						|
```
 | 
						|
 | 
						|
### Testing and building
 | 
						|
 | 
						|
Some parts of the project require the generation of Go code from Protobuf
 | 
						|
(if changes are made in `proto/`) and it must be (re-)generated with:
 | 
						|
 | 
						|
```shell
 | 
						|
make generate
 | 
						|
```
 | 
						|
 | 
						|
**Note**: Please check in changes from `gen/` in a separate commit to make it easier to review.
 | 
						|
 | 
						|
To run the tests:
 | 
						|
 | 
						|
```shell
 | 
						|
make test
 | 
						|
```
 | 
						|
 | 
						|
To build the program:
 | 
						|
 | 
						|
```shell
 | 
						|
make build
 | 
						|
```
 | 
						|
 | 
						|
### Development workflow
 | 
						|
 | 
						|
We recommend using Nix for dependency management to ensure you have all required tools. If you prefer to manage dependencies yourself, you can use Make directly:
 | 
						|
 | 
						|
**With Nix (recommended):**
 | 
						|
```shell
 | 
						|
nix develop
 | 
						|
make test
 | 
						|
make build
 | 
						|
```
 | 
						|
 | 
						|
**With your own dependencies:**
 | 
						|
```shell
 | 
						|
make test
 | 
						|
make build
 | 
						|
```
 | 
						|
 | 
						|
The Makefile will warn you if any required tools are missing and suggest running `nix develop`. Run `make help` to see all available targets.
 | 
						|
 | 
						|
## Contributors
 | 
						|
 | 
						|
<a href="https://github.com/juanfont/headscale/graphs/contributors">
 | 
						|
  <img src="https://contrib.rocks/image?repo=juanfont/headscale" />
 | 
						|
</a>
 | 
						|
 | 
						|
Made with [contrib.rocks](https://contrib.rocks).
 |