From 6705fc3c7dcc244f374de66464cb616406c52568 Mon Sep 17 00:00:00 2001 From: lukeify <5379845+lukeify@users.noreply.github.com> Date: Tue, 9 Jul 2024 22:14:34 +1200 Subject: [PATCH 1/8] chore: initial commit --- Headscale.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 Headscale.md diff --git a/Headscale.md b/Headscale.md new file mode 100644 index 0000000..ceaa029 --- /dev/null +++ b/Headscale.md @@ -0,0 +1,7 @@ +# Headscale + +* Installing headscale + * HTTP server must be listening on 443 (same port as url) + * Allowing system extensions for MacOS with Tailscale client + * How to place behind a reverse proxy? + * How to run tailscale in an image for fly.io? From e3ed3fa5a7a8879843de43a2eacae1acbeeb4d56 Mon Sep 17 00:00:00 2001 From: lukeify <5379845+lukeify@users.noreply.github.com> Date: Mon, 19 Aug 2024 21:19:30 +1200 Subject: [PATCH 2/8] feat: initial commit --- Headscale.md | 76 +++++++++++++++++++++++++--- images/headscale/tailnet-naming.png | Bin 0 -> 105159 bytes 2 files changed, 70 insertions(+), 6 deletions(-) create mode 100644 images/headscale/tailnet-naming.png diff --git a/Headscale.md b/Headscale.md index ceaa029..ea2c27e 100644 --- a/Headscale.md +++ b/Headscale.md @@ -1,7 +1,71 @@ -# Headscale +# [Headscale][1] -* Installing headscale - * HTTP server must be listening on 443 (same port as url) - * Allowing system extensions for MacOS with Tailscale client - * How to place behind a reverse proxy? - * How to run tailscale in an image for fly.io? +Provides an open-source re-implementation of the Tailscale control server, while preserving the ability to use Tailscale-provided applications and tools on clients. +This application is written in Go. + +## Installation + +Follow the [Linux installation steps][2]. +Before doing so however: + +1. Have the CNAME record for the subdomain that you intend to host Headscale on pre-configured. +2. Configure an email address for the ACME provider to deliver LetsEncrypt certificate renewal emails to. + +Headscale can automatically retrieve a LetsEncrypt certificate for your `headscale` instance when providing a domain operating on port 443. +To enable this, ensure the `server_url` and `listen_addr` within the configuration are set to be `https`, and an address ending in `:443`, respectively. + +Once configured, run `headscale` as a `systemd` service via `systemctl start headscale`. +Debugging headscale run failures can be done with `journalctl -u headscale.service -n 100 -f` (or alternatively by running headscale interactively via `headscale`). + +### Reverse Proxy Configuration + +By default, Headscale does not provide out of the box configuration to be located behind a reverse proxy, [and such resources are community maintained][2b]. + +TODO: Document +TODO: Replace understanding about headscale TLS with TLS termination at nginx + +## Tailnet naming + +Your client will initially report your Tailnet name as being `user@example.com` (where `user` is the username you provided). +This can be modified by configuring the `dns_config.base_domain` key in the `config.yaml` file in the Headscale coordination service to a domain of your choosing. + +![Tailnet naming in macOS client](./images/headscale/tailnet-naming.png) + +## macOS Tailscale client configuration + +Install the standalone Tailscale client application for macOS directly from Tailscale, [as this has a number of advantages][3]. +This is documented in the [comparison table][4]. + +* Allowing system extensions for macOS with Tailscale client + +## Policy files + +A tailnet policy file can be provided to Headscale to implement access control via ACLs. +This file is written in [HuJSON][5] (Human JSON), which is a Tailscale implementation of [JWCC][6] ("JSON with Commas and Comments"). +Provide a tailnet policy file by specifying a filename to the `acl_policy_path` key within the Headscale configuration. + +## CLI Notes + +* Currently, it is only possible to expire API keys generated from the Headscale server, not delete them. + Deleting keys involves [modifying the contents of the SQLite database][7] Headscale uses to store information within. + However, this [feature has been landed][8] on the main branch for the next release. + +## Usage with Fly.io + +* How to run tailscale in an image for fly.io? + +[1]: https://headscale.net +[2]: https://headscale.net/running-headscale-linux/ +[2b]: https://headscale.net/reverse-proxy/ +[3]: https://tailscale.com/kb/1065/macos-variants +[4]: https://tailscale.com/kb/1065/macos-variants#comparison-table +[5]: https://github.com/tailscale/hujson +[6]: https://nigeltao.github.io/blog/2021/json-with-commas-comments.html +[7]: https://github.com/juanfont/headscale/issues/1667#issuecomment-1951606032 +[8]: https://github.com/juanfont/headscale/pull/1702 + + +TODOS: + +* How to make metrics internal only? +* How to enable GRPC for remotely controlling headscale server via the CLI? diff --git a/images/headscale/tailnet-naming.png b/images/headscale/tailnet-naming.png new file mode 100644 index 0000000000000000000000000000000000000000..2ef0637dd9996409db90522d0e529099d3fa7420 GIT binary patch literal 105159 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 z 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
  • 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 literal 0 HcmV?d00001 From d58ad157813c37b67afc5d3322ab17de1a5165ca Mon Sep 17 00:00:00 2001 From: lukeify <5379845+lukeify@users.noreply.github.com> Date: Wed, 28 Aug 2024 11:50:25 +1200 Subject: [PATCH 3/8] docs(headscale): nginx reverse proxy configuration --- Headscale.md | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/Headscale.md b/Headscale.md index ea2c27e..a9cfeff 100644 --- a/Headscale.md +++ b/Headscale.md @@ -20,9 +20,23 @@ Debugging headscale run failures can be done with `journalctl -u headscale.servi ### Reverse Proxy Configuration By default, Headscale does not provide out of the box configuration to be located behind a reverse proxy, [and such resources are community maintained][2b]. - -TODO: Document -TODO: Replace understanding about headscale TLS with TLS termination at nginx +With NGINX however, the process is reasonably simple: + +1. Unset any TLS configuration settings from the Headscale `config.yaml` file: + 1. `acme_url` (left set for documentation purposes), + 2. `acme_email`, + 3. `tls_letsencrypt_hostname`, + 4. `tls_letsencrypt_cache_dir` (left set for documentation purposes), + 5. `tls_letsencrypt_challenge_type` (left set for documentation purposes), + 6. `tls_letsencrypt_listen`, + 7. `tls_cert_path`, + 8. `tls_key_path` + + Note that the `server_url` setting retains its `https://` suffix. +2. Introduce an `nginx` [configuration][2c] that enables SSL termination at the `nginx` level before passing on the traffic with the `proxy_*` directives. + It's important to set the `Upgrade` and `Connection` headers appropriately in the proxy configuration—this is needed to pass WebSockets through. +3. Generate an SSL certificate for the server using `certbot`. +4. Restart `nginx` and `headscale`. ## Tailnet naming @@ -57,6 +71,7 @@ Provide a tailnet policy file by specifying a filename to the `acl_policy_path` [1]: https://headscale.net [2]: https://headscale.net/running-headscale-linux/ [2b]: https://headscale.net/reverse-proxy/ +[2c]: https://headscale.net/reverse-proxy/#nginx [3]: https://tailscale.com/kb/1065/macos-variants [4]: https://tailscale.com/kb/1065/macos-variants#comparison-table [5]: https://github.com/tailscale/hujson From b90d970edf63fadd00b38f40ed8f1eb306305861 Mon Sep 17 00:00:00 2001 From: lukeify <5379845+lukeify@users.noreply.github.com> Date: Wed, 28 Aug 2024 21:44:27 +1200 Subject: [PATCH 4/8] docs(headscale): tailnet policy files --- Headscale.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Headscale.md b/Headscale.md index a9cfeff..109f58f 100644 --- a/Headscale.md +++ b/Headscale.md @@ -58,6 +58,8 @@ A tailnet policy file can be provided to Headscale to implement access control v This file is written in [HuJSON][5] (Human JSON), which is a Tailscale implementation of [JWCC][6] ("JSON with Commas and Comments"). Provide a tailnet policy file by specifying a filename to the `acl_policy_path` key within the Headscale configuration. +Note that `Headscale` will fail to start if provided a policy file with zero ACL's inside of it—even an empty `acls` array is not sufficient. + ## CLI Notes * Currently, it is only possible to expire API keys generated from the Headscale server, not delete them. From 107e6ec13a27a2af4e4aca395b8cf2feee5146c1 Mon Sep 17 00:00:00 2001 From: lukeify <5379845+lukeify@users.noreply.github.com> Date: Sun, 1 Sep 2024 17:08:03 +1200 Subject: [PATCH 5/8] docs(headscale): metrics --- Headscale.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Headscale.md b/Headscale.md index 109f58f..7c1282e 100644 --- a/Headscale.md +++ b/Headscale.md @@ -38,6 +38,13 @@ With NGINX however, the process is reasonably simple: 3. Generate an SSL certificate for the server using `certbot`. 4. Restart `nginx` and `headscale`. +### Metrics + +Metrics can be made public by configuring a separate `nginx` location block that points to the `metrics_listen_addr` specified in the Headscale configuration. +This is a response in "Prometheus Exposition Format", with each metric being annotated with metadata prefixed with `# HELP` and `# TYPE`. + +TODO: How can this be made private? + ## Tailnet naming Your client will initially report your Tailnet name as being `user@example.com` (where `user` is the username you provided). @@ -84,5 +91,4 @@ Note that `Headscale` will fail to start if provided a policy file with zero ACL TODOS: -* How to make metrics internal only? * How to enable GRPC for remotely controlling headscale server via the CLI? From 2194900ef3a683169806af7af55cc830762ae204 Mon Sep 17 00:00:00 2001 From: lukeify <5379845+lukeify@users.noreply.github.com> Date: Sun, 15 Sep 2024 19:59:10 +1200 Subject: [PATCH 6/8] docs(headscale): tailscale cli, headscale gui --- Headscale.md | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/Headscale.md b/Headscale.md index 7c1282e..20dd102 100644 --- a/Headscale.md +++ b/Headscale.md @@ -67,12 +67,42 @@ Provide a tailnet policy file by specifying a filename to the `acl_policy_path` Note that `Headscale` will fail to start if provided a policy file with zero ACL's inside of it—even an empty `acls` array is not sufficient. -## CLI Notes +## Tailscale CLI + +Tailscale ships with two command line tools. +These are installed on nodes that participate in the tailnet: + +* `tailscaled`, a daemon which manages networking and usually is not interacted with. [Flags that can be passed here][6a]. +* `tailscale`, the CLI to manage the tailscale network, login, logout, etc. [Command reference here][6b]. + +### CLI Notes * Currently, it is only possible to expire API keys generated from the Headscale server, not delete them. Deleting keys involves [modifying the contents of the SQLite database][7] Headscale uses to store information within. However, this [feature has been landed][8] on the main branch for the next release. +## Headscale UI + +Headscale does not ship with a native GUI, you can self-host [headscale-ui][9]—a third-party GUI for the headscale project—instead. +This is a static site that is expected to be hosted from the same subdomain that the Headscale control server runs on, under the `web/` subdirectory. +Built with svelte, it can be initialised with: + +```bash +npm install +npm run build +``` + +And then served over `nginx` via: + +```nginx +location /web { + alias /var/www/headscale-ui-2024.02.24-beta1/build/; + index index.html; +} +``` + +Provide it with an API key to address your headscale control server by generating one with `sudo headscale apikeys create`. + ## Usage with Fly.io * How to run tailscale in an image for fly.io? @@ -85,8 +115,11 @@ Note that `Headscale` will fail to start if provided a policy file with zero ACL [4]: https://tailscale.com/kb/1065/macos-variants#comparison-table [5]: https://github.com/tailscale/hujson [6]: https://nigeltao.github.io/blog/2021/json-with-commas-comments.html +[6a]: https://tailscale.com/kb/1278/tailscaled#flags-to-tailscaled +[6b]: https://tailscale.com/kb/1080/cli#command-reference [7]: https://github.com/juanfont/headscale/issues/1667#issuecomment-1951606032 [8]: https://github.com/juanfont/headscale/pull/1702 +[9]: https://github.com/gurucomputing/headscale-ui TODOS: From 6dcb4fb11d726256e89d0978ce66ff4d61387ca9 Mon Sep 17 00:00:00 2001 From: lukeify <5379845+lukeify@users.noreply.github.com> Date: Sat, 21 Sep 2024 22:00:36 +1200 Subject: [PATCH 7/8] ci(spellcheck): expand wordlist --- .wordlist.spellcheck.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.wordlist.spellcheck.txt b/.wordlist.spellcheck.txt index b030254..5c30404 100644 --- a/.wordlist.spellcheck.txt +++ b/.wordlist.spellcheck.txt @@ -40,6 +40,7 @@ CloudKeys CloudShell CloudTrail CloudWatch +CNAME CodeArtifact CodeBuild CodeCommit @@ -90,10 +91,13 @@ GPG Greengrass gRPC GWLB +Headscale +headscale hoc HPC HTTP HTTPS +HuJSON Hyperledger IaaS IAM @@ -109,6 +113,7 @@ IPs IPv js JSON +JWCC keychain keyfiles keyslot @@ -116,6 +121,7 @@ keyslots latencies lifecycle Lightsail +LetsEncrypt lookups lukeify LUKS @@ -189,6 +195,9 @@ subnet Subnet SurePassID symlink +tailnet +Tailscale +tailscale TBs TCP Teleporter @@ -225,5 +234,6 @@ WebExtension WebExtensions WebKit WebSocket +WebSockets Xcode YubiKey From 2657571f2200b1aff60aedb1924ceb77eddfd091 Mon Sep 17 00:00:00 2001 From: lukeify <5379845+lukeify@users.noreply.github.com> Date: Sat, 21 Sep 2024 22:01:32 +1200 Subject: [PATCH 8/8] refactor(headscale): api & dns documentation --- Headscale.md | 53 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/Headscale.md b/Headscale.md index 20dd102..5a99ff8 100644 --- a/Headscale.md +++ b/Headscale.md @@ -67,6 +67,10 @@ Provide a tailnet policy file by specifying a filename to the `acl_policy_path` Note that `Headscale` will fail to start if provided a policy file with zero ACL's inside of it—even an empty `acls` array is not sufficient. +## Nodes + +https://tailscale.com/kb/1111/ephemeral-nodes + ## Tailscale CLI Tailscale ships with two command line tools. @@ -103,9 +107,49 @@ location /web { Provide it with an API key to address your headscale control server by generating one with `sudo headscale apikeys create`. -## Usage with Fly.io +## DNS + +Tailscale clients can use the DNS provided by the tailscale control server when configured, or can ignore it with `--accept-dns=false` (documentation) argument to the tailscale CLI. + +Additionally, extra A (or [AAAA][10]) DNS records can be provided to associate node IP addresses with human-friendly domain names. +This can be configured in the headscale `config.yaml` file: + +```yaml +dns: + extra_records: + - name: "my.dns.record.example" + type: "A" + value: "100.64.0.1" +``` + +Confirm your record via `dig`. + +TODO: + +https://tailscale.com/kb/1054/dns +https://tailscale.com/kb/1081/magicdns +https://tailscale.com/kb/1033/ip-and-dns-addresses?tab=macos + +## Headscale API -* How to run tailscale in an image for fly.io? +Compared to the [Tailscale API][11], Headscale's functionality and documentation is thin. +Requests to the Headscale can be made at your headscale control plane's endpoint, with authentication taking place via a `Authorization` header being provided an API key generated from `sudo headscale apikeys create`: + +```bash +curl https://hs.example/api/v1/ \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer " +``` + +A full list of API endpoints for Headscale can be found and viewed using the OpenAPI Specification plugin within IntelliJ to explore the [`gen/go/openapiv2/headscale/v1/headscale.swagger.json`][12] file. + +## Usage with Fly.io + +* How to run tailscale in an image for fly.io? + +## Further reading & watching + +* [Self Host Tailscale with Headscale - How To Setup][13] by Jim's Garage, YouTube [1]: https://headscale.net [2]: https://headscale.net/running-headscale-linux/ @@ -120,7 +164,10 @@ Provide it with an API key to address your headscale control server by generatin [7]: https://github.com/juanfont/headscale/issues/1667#issuecomment-1951606032 [8]: https://github.com/juanfont/headscale/pull/1702 [9]: https://github.com/gurucomputing/headscale-ui - +[10]: https://github.com/tailscale/tailscale/blob/6edf357b96b28ee1be659a70232c0135b2ffedfd/ipn/ipnlocal/local.go#L2989-L3007 +[11]: https://tailscale.com/api +[12]: https://github.com/juanfont/headscale/blob/main/gen/openapiv2/headscale/v1/headscale.swagger.json +[13]: https://www.youtube.com/watch?v=OECp6Pj2ihg TODOS: