Changelog
This 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
- API: Machine is now Node #1553
- Remove support for older Tailscale clients #1611
- The latest supported client is 1.32
- 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
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
Commits
- d0d6438 Add workflow to autoupdate flake.lock deps (#1588)
- f13cf64 Docs: Update running-headscale-container.md - fix link to example config (#1618)
- 85e92db Enhance pipeline stability and automatically retry unstable tests (#1566)
- 4c608a4 Fix Github Actions docs pipeline (#1622)
- a59aab2 Remove support for non-noise clients (pre-1.32) (#1611)
- 48c7d76 Update flake.lock (#1589)
- 2f558be Update flake.lock (#1598)
- 2c8fc9b Update flake.lock (#1632)
- 6c9c557 Update xsync to v3.0.2 (#1597)
- fb4ed95 Upgrade Go 1.21, Tailscale 1.50 and add Capability version support (#1563)
- ed4e199 Use tailscale key types instead of strings (#1609)
- 9982ae5 add breaking entry of derp priv key (#1641)
- 6049ec7 add versioned migrations (#1644)
- 2af71c9 docs(README): update contributors (#1592)
- b359939 docs(README): update contributors (#1639)
- f65f4ec ensure online status and route changes are propagated (#1564)
- 790bbe5 fix hostinfo db column spelling (#1642)
- ac910fd make stale shorter (#1646)
- b918aa0 move to use tailscfg types over strings/custom types (#1612)
- 42b7f8f redundant line removed from systemd.service (#1587)
- c0fd06e remove the use key stripping and store the proper keys (#1603)
- cf8ffea turn off grpc communication logging (#1640)
- 0153e26 upgrade go dependencies (#1628)