• Stable

    adam released this 2025-11-11 20:17:02 +01:00 | 87 commits to main since this release

    📅 Originally published on GitHub: Tue, 11 Nov 2025 19:32:29 GMT
    🏷️ Git tag created: Tue, 11 Nov 2025 19:17:02 GMT

    Minimum supported Tailscale client version: v1.64.0

    Changes

    • Expire nodes with a custom timestamp
      #2828
    • Fix issue where node expiry was reset when tailscaled restarts
      #2875
    • Fix OIDC authentication when multiple login URLs are opened
      #2861
    • Fix node re-registration failing with expired auth keys
      #2859
    • Remove old unused database tables and indices
      #2844
      #2872
    • Ignore litestream tables during database validation
      #2843
    • Fix exit node visibility to respect ACL rules
      #2855
    • Fix SSH policy becoming empty when unknown user is referenced
      #2874
    • Fix policy validation when using bypass-grpc mode
      #2854
    • Fix autogroup:self interaction with other ACL rules
      #2842
    • Fix flaky DERP map shuffle test
      #2848
    • Use current stable base images for Debian and Alpine containers
      #2827

    Upgrade

    Please follow the steps outlined in the upgrade guide to update your existing Headscale installation.

    It's best to update from one stable version to the next (e.g., 0.24.0 → 0.25.1 → 0.26.1) in case you are multiple releases behind. You should always pick the latest available patch release.

    Be sure to check the changelog above for version-specific upgrade instructions and breaking changes.

    Backup Your Database

    Always backup your database before upgrading. Here's how to backup a SQLite database:

    # Stop headscale
    systemctl stop headscale
    
    # Backup sqlite database
    cp /var/lib/headscale/db.sqlite /var/lib/headscale/db.sqlite.backup
    
    # Backup sqlite WAL/SHM files (if they exist)
    cp /var/lib/headscale/db.sqlite-wal /var/lib/headscale/db.sqlite-wal.backup
    cp /var/lib/headscale/db.sqlite-shm /var/lib/headscale/db.sqlite-shm.backup
    
    # Start headscale (migration will run automatically)
    systemctl start headscale
    

    Changelog

    • abed534628 Document how to restrict access to exit nodes per user/group
    • d23fa26395 Fix flaky TestShuffleDERPMapDeterministic by ensuring deterministic map iteration (#2848)
    • 0a43aab8f5 Use Debian 12 as minimum version for the deb package
    • 4bd614a559 Use current stable base images for Debian and Alpine
    • 785168a7b8 changelog: prepare for 0.27.1
    • 19a33394f6 changelog: set 0.27 date (#2823)
    • af2de35b6c chore: fix autogroup:self with other acl rules (#2842)
    • 02c7c1a0e7 cli: only validate bypass-grpc set policy (#2854)
    • 5a2ee0c391 db: add comment about removing migrations
    • 28faf8cd71 db: add defensive removal of old indicies
    • 456a5d5cce db: ignore _litestream tables when validating (#2843)
    • ddbd3e14ba db: remove all old, unused tables (#2844)
    • f9bb88ad24 expire nodes with a custom timestamp (#2828)
    • 5cd15c3656 fix: make state cookies valid when client uses multiple login URLs
    • 3bd4ecd9cd fix: preserve node expiry when tailscaled restarts
    • 3455d1cb59 hscontrol/db: fix RenameUser to use Updates()
    • 4a8dc2d445 hscontrol/state,db: preserve node expiry on MapRequest updates
    • 4728a2ba9e hscontrol/state: allow expired auth keys for node re-registration
    • ddd31ba774 hscontrol: use Updates() instead of Save() for partial updates
    • 773a46a968 integration: add test to replicate #2862
    • 84fe3de251 integration: reduce TestAutoApproveMultiNetwork matrix to 3 tests (#2815)
    • d9c3eaf8c8 matcher: Add func for comparing Dests and TheInternet
    • f658a8eacd mkdocs: 0.27.1
    • c649c89e00 policy: Reproduce exit node visibility issues
    • 21e3f2598d policy: fix issue where non existent user results in empty ssh pol
    • a28d9bed6d policy: reproduce 2863 in test
    • d7a43a7cf1 state: use AllApprovedRoutes instead of SubnetRoutes
    • 2024219bd1 types: Distinguish subnet and exit node access
    • bd9cf42b96 types: NodeView CanAccess uses internal
    • 1c0bb0338d types: split SubnetRoutes and ExitRoutes
    Downloads