mirror of
https://github.com/juanfont/headscale.git
synced 2024-11-26 08:53:05 +00:00
Compare commits
6 commits
49edc3d060
...
a72f0c89f2
Author | SHA1 | Date | |
---|---|---|---|
|
a72f0c89f2 | ||
|
a7874af3d0 | ||
|
e7245856c5 | ||
|
2345c38e1e | ||
|
8cfaa6bdac | ||
|
4e44d57bf7 |
15 changed files with 86 additions and 67 deletions
|
@ -154,7 +154,7 @@ kos:
|
||||||
- "{{ if not .Prerelease }}v{{ .Major }}.{{ .Minor }}.{{ .Patch }}-debug{{ end }}"
|
- "{{ if not .Prerelease }}v{{ .Major }}.{{ .Minor }}.{{ .Patch }}-debug{{ end }}"
|
||||||
- "{{ if not .Prerelease }}v{{ .Major }}.{{ .Minor }}-debug{{ end }}"
|
- "{{ if not .Prerelease }}v{{ .Major }}.{{ .Minor }}-debug{{ end }}"
|
||||||
- "{{ if not .Prerelease }}v{{ .Major }}-debug{{ end }}"
|
- "{{ if not .Prerelease }}v{{ .Major }}-debug{{ end }}"
|
||||||
- "{{ if not .Prerelease }}stable{{ else }}unstable-debug{{ end }}"
|
- "{{ if not .Prerelease }}stable-debug{{ else }}unstable-debug{{ end }}"
|
||||||
- "{{ .Tag }}-debug"
|
- "{{ .Tag }}-debug"
|
||||||
- '{{ trimprefix .Tag "v" }}-debug'
|
- '{{ trimprefix .Tag "v" }}-debug'
|
||||||
- "sha-{{ .ShortCommit }}-debug"
|
- "sha-{{ .ShortCommit }}-debug"
|
||||||
|
@ -177,7 +177,7 @@ kos:
|
||||||
- "{{ if not .Prerelease }}v{{ .Major }}.{{ .Minor }}.{{ .Patch }}-debug{{ end }}"
|
- "{{ if not .Prerelease }}v{{ .Major }}.{{ .Minor }}.{{ .Patch }}-debug{{ end }}"
|
||||||
- "{{ if not .Prerelease }}v{{ .Major }}.{{ .Minor }}-debug{{ end }}"
|
- "{{ if not .Prerelease }}v{{ .Major }}.{{ .Minor }}-debug{{ end }}"
|
||||||
- "{{ if not .Prerelease }}v{{ .Major }}-debug{{ end }}"
|
- "{{ if not .Prerelease }}v{{ .Major }}-debug{{ end }}"
|
||||||
- "{{ if not .Prerelease }}stable{{ else }}unstable-debug{{ end }}"
|
- "{{ if not .Prerelease }}stable-debug{{ else }}unstable-debug{{ end }}"
|
||||||
- "{{ .Tag }}-debug"
|
- "{{ .Tag }}-debug"
|
||||||
- '{{ trimprefix .Tag "v" }}-debug'
|
- '{{ trimprefix .Tag "v" }}-debug'
|
||||||
- "sha-{{ .ShortCommit }}-debug"
|
- "sha-{{ .ShortCommit }}-debug"
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
.github/workflows/test-integration-v2*
|
.github/workflows/test-integration-v2*
|
||||||
docs/about/features.md
|
docs/about/features.md
|
||||||
|
docs/ref/remote-cli.md
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
- Fixed processing of fields in post request in MoveNode rpc [#2179](https://github.com/juanfont/headscale/pull/2179)
|
- Fixed processing of fields in post request in MoveNode rpc [#2179](https://github.com/juanfont/headscale/pull/2179)
|
||||||
- Added conversion of 'Hostname' to 'givenName' in a node with FQDN rules applied [#2198](https://github.com/juanfont/headscale/pull/2198)
|
- Added conversion of 'Hostname' to 'givenName' in a node with FQDN rules applied [#2198](https://github.com/juanfont/headscale/pull/2198)
|
||||||
- Fixed updating of hostname and givenName when it is updated in HostInfo [#2199](https://github.com/juanfont/headscale/pull/2199)
|
- Fixed updating of hostname and givenName when it is updated in HostInfo [#2199](https://github.com/juanfont/headscale/pull/2199)
|
||||||
|
- Fixed missing `stable-debug` container tag [#2232](https://github.com/juanfont/headscale/pr/2232)
|
||||||
|
|
||||||
## 0.23.0 (2024-09-18)
|
## 0.23.0 (2024-09-18)
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,7 @@ event.
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior
|
Instances of abusive, harassing, or otherwise unacceptable behavior
|
||||||
may be reported to the community leaders responsible for enforcement
|
may be reported to the community leaders responsible for enforcement
|
||||||
at our Discord channel. All complaints
|
on our [Discord server](https://discord.gg/c84AZQhmpx). All complaints
|
||||||
will be reviewed and investigated promptly and fairly.
|
will be reviewed and investigated promptly and fairly.
|
||||||
|
|
||||||
All community leaders are obligated to respect the privacy and
|
All community leaders are obligated to respect the privacy and
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
An open source, self-hosted implementation of the Tailscale control server.
|
An open source, self-hosted implementation of the Tailscale control server.
|
||||||
|
|
||||||
Join our [Discord](https://discord.gg/c84AZQhmpx) server for a chat.
|
Join our [Discord server](https://discord.gg/c84AZQhmpx) for a chat.
|
||||||
|
|
||||||
**Note:** Always select the same GitHub tag as the released version you use
|
**Note:** Always select the same GitHub tag as the released version you use
|
||||||
to ensure you have the correct example configuration and documentation.
|
to ensure you have the correct example configuration and documentation.
|
||||||
|
|
|
@ -41,13 +41,15 @@ In addition to that, you may use packages provided by the community or from dist
|
||||||
[installation guide using community packages](../setup/install/community.md).
|
[installation guide using community packages](../setup/install/community.md).
|
||||||
|
|
||||||
For convenience, we also [build Docker images with headscale](../setup/install/container.md). But **please be aware that
|
For convenience, we also [build Docker images with headscale](../setup/install/container.md). But **please be aware that
|
||||||
we don't officially support deploying headscale using Docker**. We have a [Discord
|
we don't officially support deploying headscale using Docker**. On our [Discord server](https://discord.gg/c84AZQhmpx)
|
||||||
channel](https://discord.com/channels/896711691637780480/1070619770942148618) where you can ask for Docker-specific help
|
we have a "docker-issues" channel where you can ask for Docker-specific help to the community.
|
||||||
to the community.
|
|
||||||
|
|
||||||
## Why is my reverse proxy not working with headscale?
|
## Why is my reverse proxy not working with headscale?
|
||||||
|
|
||||||
We don't know. We don't use reverse proxies with headscale ourselves, so we don't have any experience with them. We have [community documentation](../ref/integration/reverse-proxy.md) on how to configure various reverse proxies, and a dedicated [Discord channel](https://discord.com/channels/896711691637780480/1070619818346164324) where you can ask for help to the community.
|
We don't know. We don't use reverse proxies with headscale ourselves, so we don't have any experience with them. We have
|
||||||
|
[community documentation](../ref/integration/reverse-proxy.md) on how to configure various reverse proxies, and a
|
||||||
|
dedicated "reverse-proxy-issues" channel on our [Discord server](https://discord.gg/c84AZQhmpx) where you can ask for
|
||||||
|
help to the community.
|
||||||
|
|
||||||
## Can I use headscale and tailscale on the same machine?
|
## Can I use headscale and tailscale on the same machine?
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,5 @@
|
||||||
# Getting help
|
# Getting help
|
||||||
|
|
||||||
Join our Discord server for announcements and community support:
|
Join our [Discord server](https://discord.gg/c84AZQhmpx) for announcements and community support.
|
||||||
|
|
||||||
- [announcements](https://discord.com/channels/896711691637780480/896711692120129538)
|
|
||||||
- [general](https://discord.com/channels/896711691637780480/896711692120129540)
|
|
||||||
- [docker-issues](https://discord.com/channels/896711691637780480/1070619770942148618)
|
|
||||||
- [reverse-proxy-issues](https://discord.com/channels/896711691637780480/1070619818346164324)
|
|
||||||
- [web-interfaces](https://discord.com/channels/896711691637780480/1105842846386356294)
|
|
||||||
|
|
||||||
Please report bugs via [GitHub issues](https://github.com/juanfont/headscale/issues)
|
Please report bugs via [GitHub issues](https://github.com/juanfont/headscale/issues)
|
||||||
|
|
|
@ -6,5 +6,4 @@ code archives. Container images are available on [Docker Hub](https://hub.docker
|
||||||
|
|
||||||
An Atom/RSS feed of headscale releases is available [here](https://github.com/juanfont/headscale/releases.atom).
|
An Atom/RSS feed of headscale releases is available [here](https://github.com/juanfont/headscale/releases.atom).
|
||||||
|
|
||||||
Join the ["announcements" channel on Discord](https://discord.com/channels/896711691637780480/896711692120129538) for
|
See the "announcements" channel on our [Discord server](https://discord.gg/c84AZQhmpx) for news about headscale.
|
||||||
news about headscale.
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ Headscale is an open source, self-hosted implementation of the Tailscale control
|
||||||
|
|
||||||
This page contains the documentation for the latest version of headscale. Please also check our [FAQ](./about/faq.md).
|
This page contains the documentation for the latest version of headscale. Please also check our [FAQ](./about/faq.md).
|
||||||
|
|
||||||
Join our [Discord](https://discord.gg/c84AZQhmpx) server for a chat and community support.
|
Join our [Discord server](https://discord.gg/c84AZQhmpx) for a chat and community support.
|
||||||
|
|
||||||
## Design goal
|
## Design goal
|
||||||
|
|
||||||
|
|
12
docs/ref/integration/tools.md
Normal file
12
docs/ref/integration/tools.md
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# Tools related to headscale
|
||||||
|
|
||||||
|
!!! warning "Community contributions"
|
||||||
|
|
||||||
|
This page contains community contributions. The projects listed here are not
|
||||||
|
maintained by the headscale authors and are written by community members.
|
||||||
|
|
||||||
|
This page collects third-party tools and scripts related to headscale.
|
||||||
|
|
||||||
|
| Name | Repository Link | Description |
|
||||||
|
| ----------------- | --------------------------------------------------------------- | ------------------------------------------------- |
|
||||||
|
| tailscale-manager | [Github](https://github.com/singlestore-labs/tailscale-manager) | Dynamically manage Tailscale route advertisements |
|
|
@ -1,17 +1,19 @@
|
||||||
# Headscale web interface
|
# Web interfaces for headscale
|
||||||
|
|
||||||
!!! warning "Community contributions"
|
!!! warning "Community contributions"
|
||||||
|
|
||||||
This page contains community contributions. The projects listed here are not
|
This page contains community contributions. The projects listed here are not
|
||||||
maintained by the headscale authors and are written by community members.
|
maintained by the headscale authors and are written by community members.
|
||||||
|
|
||||||
| Name | Repository Link | Description | Status |
|
Headscale doesn't provide a built-in web interface but users may pick one from the available options.
|
||||||
| --------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------- | ------ |
|
|
||||||
| headscale-webui | [Github](https://github.com/ifargle/headscale-webui) | A simple headscale web UI for small-scale deployments. | Alpha |
|
|
||||||
| headscale-ui | [Github](https://github.com/gurucomputing/headscale-ui) | A web frontend for the headscale Tailscale-compatible coordination server | Alpha |
|
|
||||||
| HeadscaleUi | [GitHub](https://github.com/simcu/headscale-ui) | A static headscale admin ui, no backend enviroment required | Alpha |
|
|
||||||
| Headplane | [GitHub](https://github.com/tale/headplane) | An advanced Tailscale inspired frontend for headscale | Alpha |
|
|
||||||
| headscale-admin | [Github](https://github.com/GoodiesHQ/headscale-admin) | Headscale-Admin is meant to be a simple, modern web interface for headscale | Beta |
|
|
||||||
| ouroboros | [Github](https://github.com/yellowsink/ouroboros) | Ouroboros is designed for users to manage their own devices, rather than for admins | Stable |
|
|
||||||
|
|
||||||
You can ask for support on our dedicated [Discord channel](https://discord.com/channels/896711691637780480/1105842846386356294).
|
| Name | Repository Link | Description |
|
||||||
|
| --------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------- |
|
||||||
|
| headscale-webui | [Github](https://github.com/ifargle/headscale-webui) | A simple headscale web UI for small-scale deployments. |
|
||||||
|
| headscale-ui | [Github](https://github.com/gurucomputing/headscale-ui) | A web frontend for the headscale Tailscale-compatible coordination server |
|
||||||
|
| HeadscaleUi | [GitHub](https://github.com/simcu/headscale-ui) | A static headscale admin ui, no backend enviroment required |
|
||||||
|
| Headplane | [GitHub](https://github.com/tale/headplane) | An advanced Tailscale inspired frontend for headscale |
|
||||||
|
| headscale-admin | [Github](https://github.com/GoodiesHQ/headscale-admin) | Headscale-Admin is meant to be a simple, modern web interface for headscale |
|
||||||
|
| ouroboros | [Github](https://github.com/yellowsink/ouroboros) | Ouroboros is designed for users to manage their own devices, rather than for admins |
|
||||||
|
|
||||||
|
You can ask for support on our [Discord server](https://discord.gg/c84AZQhmpx) in the "web-interfaces" channel.
|
||||||
|
|
|
@ -1,22 +1,21 @@
|
||||||
# Controlling headscale with remote CLI
|
# Controlling headscale with remote CLI
|
||||||
|
|
||||||
This documentation has the goal of showing a user how-to set control a headscale instance
|
This documentation has the goal of showing a user how-to control a headscale instance
|
||||||
from a remote machine with the `headscale` command line binary.
|
from a remote machine with the `headscale` command line binary.
|
||||||
|
|
||||||
## Prerequisite
|
## Prerequisite
|
||||||
|
|
||||||
- A workstation to run headscale (could be Linux, macOS, other supported platforms)
|
- A workstation to run `headscale` (any supported platform, e.g. Linux).
|
||||||
- A headscale server (version `0.13.0` or newer)
|
- A headscale server with gRPC enabled.
|
||||||
- Access to create API keys (local access to the headscale server)
|
- Connections to the gRPC port (default: `50443`) are allowed.
|
||||||
- headscale _must_ be served over TLS/HTTPS
|
- Remote access requires an encrypted connection via TLS.
|
||||||
- Remote access does _not_ support unencrypted traffic.
|
- An API key to authenticate with the headscale server.
|
||||||
- Port `50443` must be open in the firewall (or port overridden by `grpc_listen_addr` option)
|
|
||||||
|
|
||||||
## Create an API key
|
## Create an API key
|
||||||
|
|
||||||
We need to create an API key to authenticate our remote headscale when using it from our workstation.
|
We need to create an API key to authenticate with the remote headscale server when using it from our workstation.
|
||||||
|
|
||||||
To create a API key, log into your headscale server and generate a key:
|
To create an API key, log into your headscale server and generate a key:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
headscale apikeys create --expiration 90d
|
headscale apikeys create --expiration 90d
|
||||||
|
@ -25,7 +24,7 @@ headscale apikeys create --expiration 90d
|
||||||
Copy the output of the command and save it for later. Please note that you can not retrieve a key again,
|
Copy the output of the command and save it for later. Please note that you can not retrieve a key again,
|
||||||
if the key is lost, expire the old one, and create a new key.
|
if the key is lost, expire the old one, and create a new key.
|
||||||
|
|
||||||
To list the keys currently assosicated with the server:
|
To list the keys currently associated with the server:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
headscale apikeys list
|
headscale apikeys list
|
||||||
|
@ -39,7 +38,8 @@ headscale apikeys expire --prefix "<PREFIX>"
|
||||||
|
|
||||||
## Download and configure headscale
|
## Download and configure headscale
|
||||||
|
|
||||||
1. Download the latest [`headscale` binary from GitHub's release page](https://github.com/juanfont/headscale/releases):
|
1. Download the [`headscale` binary from GitHub's release page](https://github.com/juanfont/headscale/releases). Make
|
||||||
|
sure to use the same version as on the server.
|
||||||
|
|
||||||
1. Put the binary somewhere in your `PATH`, e.g. `/usr/local/bin/headscale`
|
1. Put the binary somewhere in your `PATH`, e.g. `/usr/local/bin/headscale`
|
||||||
|
|
||||||
|
@ -49,25 +49,32 @@ headscale apikeys expire --prefix "<PREFIX>"
|
||||||
chmod +x /usr/local/bin/headscale
|
chmod +x /usr/local/bin/headscale
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Configure the CLI through environment variables
|
1. Provide the connection parameters for the remote headscale server either via a minimal YAML configuration file or via
|
||||||
|
environment variables:
|
||||||
|
|
||||||
```shell
|
=== "Minimal YAML configuration file"
|
||||||
export HEADSCALE_CLI_ADDRESS="<HEADSCALE ADDRESS>:<PORT>"
|
|
||||||
export HEADSCALE_CLI_API_KEY="<API KEY FROM PREVIOUS STAGE>"
|
|
||||||
```
|
|
||||||
|
|
||||||
for example:
|
```yaml
|
||||||
|
cli:
|
||||||
|
address: <HEADSCALE_ADDRESS>:<PORT>
|
||||||
|
api_key: <API_KEY_FROM_PREVIOUS_STEP>
|
||||||
|
```
|
||||||
|
|
||||||
```shell
|
=== "Environment variables"
|
||||||
export HEADSCALE_CLI_ADDRESS="headscale.example.com:50443"
|
|
||||||
export HEADSCALE_CLI_API_KEY="abcde12345"
|
|
||||||
```
|
|
||||||
|
|
||||||
This will tell the `headscale` binary to connect to a remote instance, instead of looking
|
```shell
|
||||||
for a local instance (which is what it does on the server).
|
export HEADSCALE_CLI_ADDRESS="<HEADSCALE_ADDRESS>:<PORT>"
|
||||||
|
export HEADSCALE_CLI_API_KEY="<API_KEY_FROM_PREVIOUS_STEP>"
|
||||||
|
```
|
||||||
|
|
||||||
The API key is needed to make sure that you are allowed to access the server. The key is _not_
|
!!! bug
|
||||||
needed when running directly on the server, as the connection is local.
|
|
||||||
|
Headscale 0.23.0 requires at least an empty configuration file when environment variables are used to
|
||||||
|
specify connection details. See [issue 2193](https://github.com/juanfont/headscale/issues/2193) for more
|
||||||
|
information.
|
||||||
|
|
||||||
|
This instructs the `headscale` binary to connect to a remote instance at `<HEADSCALE_ADDRESS>:<PORT>`, instead of
|
||||||
|
connecting to the local instance.
|
||||||
|
|
||||||
1. Test the connection
|
1. Test the connection
|
||||||
|
|
||||||
|
@ -89,10 +96,10 @@ While this is _not a supported_ feature, an example on how this can be set up on
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
|
|
||||||
Checklist:
|
- Make sure you have the _same_ headscale version on your server and workstation.
|
||||||
|
- Ensure that connections to the gRPC port are allowed.
|
||||||
- Make sure you have the _same_ headscale version on your server and workstation
|
- Verify that your TLS certificate is valid and trusted.
|
||||||
- Make sure you use version `0.13.0` or newer.
|
- If you don't have access to a trusted certificate (e.g. from Let's Encrypt), either:
|
||||||
- Verify that your TLS certificate is valid and trusted
|
- Add your self-signed certificate to the trust store of your OS _or_
|
||||||
- If you do not have access to a trusted certificate (e.g. from Let's Encrypt), add your self signed certificate to the trust store of your OS or
|
- Disable certificate verification by either setting `cli.insecure: true` in the configuration file or by setting
|
||||||
- Set `HEADSCALE_CLI_INSECURE` to 0 in your environment
|
`HEADSCALE_CLI_INSECURE=1` via an environment variable. We do **not** recommend to disable certificate validation.
|
||||||
|
|
|
@ -28,7 +28,7 @@ development version.
|
||||||
|
|
||||||
## Fedora, RHEL, CentOS
|
## Fedora, RHEL, CentOS
|
||||||
|
|
||||||
A 3rd-party repository for various RPM based distributions is available at:
|
A third-party repository for various RPM based distributions is available at:
|
||||||
<https://copr.fedorainfracloud.org/coprs/jonathanspw/headscale/>. The site provides detailed setup and installation
|
<https://copr.fedorainfracloud.org/coprs/jonathanspw/headscale/>. The site provides detailed setup and installation
|
||||||
instructions.
|
instructions.
|
||||||
|
|
||||||
|
|
12
flake.lock
12
flake.lock
|
@ -5,11 +5,11 @@
|
||||||
"systems": "systems"
|
"systems": "systems"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1726560853,
|
"lastModified": 1731533236,
|
||||||
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
|
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||||
"owner": "numtide",
|
"owner": "numtide",
|
||||||
"repo": "flake-utils",
|
"repo": "flake-utils",
|
||||||
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
|
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -20,11 +20,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1729850857,
|
"lastModified": 1731763621,
|
||||||
"narHash": "sha256-WvLXzNNnnw+qpFOmgaM3JUlNEH+T4s22b5i2oyyCpXE=",
|
"narHash": "sha256-ddcX4lQL0X05AYkrkV2LMFgGdRvgap7Ho8kgon3iWZk=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "41dea55321e5a999b17033296ac05fe8a8b5a257",
|
"rev": "c69a9bffbecde46b4b939465422ddc59493d3e4d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
@ -183,3 +183,4 @@ nav:
|
||||||
- Integration:
|
- Integration:
|
||||||
- Reverse proxy: ref/integration/reverse-proxy.md
|
- Reverse proxy: ref/integration/reverse-proxy.md
|
||||||
- Web UI: ref/integration/web-ui.md
|
- Web UI: ref/integration/web-ui.md
|
||||||
|
- Tools: ref/integration/tools.md
|
||||||
|
|
Loading…
Reference in a new issue