v0.23.0-beta.4
Pre-releaseThis release is mainly a code reorganisation and refactoring, significantly improving the maintainability of the codebase. This should allow us to improve further and make it easier for the maintainers to keep on top of the project.
Please remember to always back up your database between versions
Here is a short summary of the broad topics of changes:
Code has been organised into modules, reducing use of global variables/objects, isolating concerns and “putting the right things in the logical place”.
The new policy and mapper package, containing the ACL/Policy logic and the logic for creating the data served to clients (the network “map”) has been rewritten and improved. This change has allowed us to finish SSH support and add additional tests throughout the code to ensure correctness.
The “poller”, or streaming logic has been rewritten and instead of keeping track of the latest updates, checking at a fixed interval, it now uses go channels, implemented in our new notifier package and it allows us to send updates to connected clients immediately. This should both improve performance and potential latency before a client picks up an update.
Headscale now supports sending “delta” updates, thanks to the new mapper and poller logic, allowing us to only inform nodes about new nodes, changed nodes and removed nodes. Previously we sent the entire state of the network every time an update was due.
While we have a pretty good test harness for validating our changes, we have rewritten over 10000 lines of code and bugs are expected. We need help testing this release. In addition, while we think the performance should in general be better, there might be regressions in parts of the platform, particularly where we prioritised correctness over speed.
There are also several bugfixes that has been encountered and fixed as part of implementing these changes, particularly
after improving the test harness as part of adopting #1460.
BREAKING
- Code reorganisation, a lot of code has moved, please review the following PRs accordingly #1473
- Change the structure of database configuration, see config-example.yaml for the new structure. #1700
- Old structure has been remove and the configuration must be converted.
- Adds additional configuration for PostgreSQL for setting max open, idle connection and idle connection lifetime.
- API: Machine is now Node #1553
- Remove support for older Tailscale clients #1611
- The oldest supported client is 1.42
- Headscale checks that at least one DERP is defined at start #1564
- If no DERP is configured, the server will fail to start, this can be because it cannot load the DERPMap from file or url.
- Embedded DERP server requires a private key #1611
- Add a filepath entry to
derp.server.private_key_path
- Add a filepath entry to
- Docker images are now built with goreleaser (ko) #1716 #1763
- Entrypoint of container image has changed from shell to headscale, require change from
headscale serve
toserve
/var/lib/headscale
and/var/run/headscale
is no longer created automatically, see container docs
- Entrypoint of container image has changed from shell to headscale, require change from
- Prefixes are now defined per v4 and v6 range. #1756
ip_prefixes
option is nowprefixes.v4
andprefixes.v6
prefixes.allocation
can be set to assign IPs atsequential
orrandom
. #1869
- MagicDNS domains no longer contain usernames
- This is in preperation to fix Headscales implementation of tags which currently does not correctly remove the link between a tagged device and a user. As tagged devices will not have a user, this will require a change to the DNS generation, removing the username, see #1369 for more information.
use_username_in_magic_dns
can be used to turn this behaviour on again, but note that this option will be removed when tags are fixed.- dns.base_domain can no longer be the same as (or part of) server_url.
- This option brings Headscales behaviour in line with Tailscale.
- YAML files are no longer supported for headscale policy. #1792
- HuJSON is now the only supported format for policy.
- DNS configuration has been restructured #2034
- Please review the new config-example.yaml for the new structure.
Changes
- Use versioned migrations #1644
- Make the OIDC callback page better #1484
- SSH support #1487
- State management has been improved #1492
- Use error group handling to ensure tests actually pass #1535 based on #1460
- Fix hang on SIGTERM #1492 taken from #1480
- Send logs to stderr by default #1524
- Fix TS-2023-006 security UPnP issue #1563
- Turn off gRPC logging #1640 fixes #1259
- Added the possibility to manually create a DERP-map entry which can be customized, instead of automatically creating it. #1565
- Add support for deleting api keys #1702
- Add command to backfill IP addresses for nodes missing IPs from configured prefixes. #1869
- Log available update as warning #1877
- Add
autogroup:internet
to Policy #1917 - Restore foreign keys and add constraints #1562
- Make registration page easier to use on mobile devices
- Make write-ahead-log default on and configurable for SQLite #1985
- Add APIs for managing headscale policy. #1792
- Fix for registering nodes using preauthkeys when running on a postgres database in a non-UTC timezone. #764
- Make sure integration tests cover postgres for all scenarios
- CLI commands (all except
serve
) only requires minimal configuration, no more errors or warnings from unset settings #2109 - CLI results are now concistently sent to stdout and errors to stderr #2109
- Fix issue where shutting down headscale would hang #2113
Changelog
- f368ed0 2068 AutoApprovers tests (#2105)
- 35bfe7c Add support for service reload and sync service file (#2102)
- 3101f89 Fix 764 (#2093)
- 60b94b0 Fix slow shutdown (#2113)
- aa0f3d4 Fix typo in example config (#2095)
- e43d6a0 Move flags after the command (#2100)
- 8a3a0fe Only load needed part of configuration (#2109)
- 1c34101 Remove outdated proposals (#2104)
- ed71d23 Remove references to tests/acls from the documentation (#2088)
- 5597eda Remove version and update setup instructions for Android (#2112)
- bac7ea6 Simplify windows setup instructions (#2114)
- d66c5e1 Update documentation for 0.23 (#2096)
- a9a1a07 Use dns: as config key (#2092)
- 6609f60 actually lint file on CI (#2018)
- adc084f add no stalebot exception (#2107)
- 99f18f9 chore: fix some comments (#2069)
- 7be8796 dont override golangci go (#2116)
- 42d2c27 fix goreleaser warnings (#2106)
- 976cbfa flake.lock: Update (#2078)
- c3b260a flake.lock: Update (#2111)
- f039caf update godeps (#2098)