mirror of
https://github.com/juanfont/headscale.git
synced 2026-01-11 20:00:28 +01:00
tailscale GUI on macOS doesn't display exit nodes from headscale #324
Closed
opened 2025-12-29 01:26:59 +01:00 by adam
·
14 comments
No Branch/Tag Specified
main
update_flake_lock_action
gh-pages
kradalby/release-v0.27.2
dependabot/go_modules/golang.org/x/crypto-0.45.0
dependabot/go_modules/github.com/opencontainers/runc-1.3.3
copilot/investigate-headscale-issue-2788
copilot/investigate-visibility-issue-2788
copilot/investigate-issue-2833
copilot/debug-issue-2846
copilot/fix-issue-2847
dependabot/go_modules/github.com/go-viper/mapstructure/v2-2.4.0
dependabot/go_modules/github.com/docker/docker-28.3.3incompatible
kradalby/cli-experiement3
doc/0.26.1
doc/0.25.1
doc/0.25.0
doc/0.24.3
doc/0.24.2
doc/0.24.1
doc/0.24.0
kradalby/build-docker-on-pr
topic/docu-versioning
topic/docker-kos
juanfont/fix-crash-node-id
juanfont/better-disclaimer
update-contributors
topic/prettier
revert-1893-add-test-stage-to-docs
add-test-stage-to-docs
remove-node-check-interval
fix-empty-prefix
fix-ephemeral-reusable
bug_report-debuginfo
autogroups
logs-to-stderr
revert-1414-topic/fix_unix_socket
rename-machine-node
port-embedded-derp-tests-v2
port-derp-tests
duplicate-word-linter
update-tailscale-1.36
warn-against-apache
ko-fi-link
more-acl-tests
fix-typo-standalone
parallel-nolint
tparallel-fix
rerouting
ssh-changelog-docs
oidc-cleanup
web-auth-flow-tests
kradalby-gh-runner
fix-proto-lint
remove-funding-links
go-1.19
enable-1.30-in-tests
0.16.x
cosmetic-changes-integration
tmp-fix-integration-docker
fix-integration-docker
configurable-update-interval
show-nodes-online
hs2021
acl-syntax-fixes
ts2021-implementation
fix-spurious-updates
unstable-integration-tests
mandatory-stun
embedded-derp
prtemplate-fix
v0.28.0-beta.1
v0.27.2-rc.1
v0.27.1
v0.27.0
v0.27.0-beta.2
v0.27.0-beta.1
v0.26.1
v0.26.0
v0.26.0-beta.2
v0.26.0-beta.1
v0.25.1
v0.25.0
v0.25.0-beta.2
v0.24.3
v0.25.0-beta.1
v0.24.2
v0.24.1
v0.24.0
v0.24.0-beta.2
v0.24.0-beta.1
v0.23.0
v0.23.0-rc.1
v0.23.0-beta.5
v0.23.0-beta.4
v0.23.0-beta3
v0.23.0-beta2
v0.23.0-beta1
v0.23.0-alpha12
v0.23.0-alpha11
v0.23.0-alpha10
v0.23.0-alpha9
v0.23.0-alpha8
v0.23.0-alpha7
v0.23.0-alpha6
v0.23.0-alpha5
v0.23.0-alpha4
v0.23.0-alpha4-docker-ko-test9
v0.23.0-alpha4-docker-ko-test8
v0.23.0-alpha4-docker-ko-test7
v0.23.0-alpha4-docker-ko-test6
v0.23.0-alpha4-docker-ko-test5
v0.23.0-alpha-docker-release-test-debug2
v0.23.0-alpha-docker-release-test-debug
v0.23.0-alpha4-docker-ko-test4
v0.23.0-alpha4-docker-ko-test3
v0.23.0-alpha4-docker-ko-test2
v0.23.0-alpha4-docker-ko-test
v0.23.0-alpha3
v0.23.0-alpha2
v0.23.0-alpha1
v0.22.3
v0.22.2
v0.23.0-alpha-docker-release-test
v0.22.1
v0.22.0
v0.22.0-alpha3
v0.22.0-alpha2
v0.22.0-alpha1
v0.22.0-nfpmtest
v0.21.0
v0.20.0
v0.19.0
v0.19.0-beta2
v0.19.0-beta1
v0.18.0
v0.18.0-beta4
v0.18.0-beta3
v0.18.0-beta2
v0.18.0-beta1
v0.17.1
v0.17.0
v0.17.0-beta5
v0.17.0-beta4
v0.17.0-beta3
v0.17.0-beta2
v0.17.0-beta1
v0.17.0-alpha4
v0.17.0-alpha3
v0.17.0-alpha2
v0.17.0-alpha1
v0.16.4
v0.16.3
v0.16.2
v0.16.1
v0.16.0
v0.16.0-beta7
v0.16.0-beta6
v0.16.0-beta5
v0.16.0-beta4
v0.16.0-beta3
v0.16.0-beta2
v0.16.0-beta1
v0.15.0
v0.15.0-beta6
v0.15.0-beta5
v0.15.0-beta4
v0.15.0-beta3
v0.15.0-beta2
v0.15.0-beta1
v0.14.0
v0.14.0-beta2
v0.14.0-beta1
v0.13.0
v0.13.0-beta3
v0.13.0-beta2
v0.13.0-beta1
upstream/v0.12.4
v0.12.4
v0.12.3
v0.12.2
v0.12.2-beta1
v0.12.1
v0.12.0-beta2
v0.12.0-beta1
v0.11.0
v0.10.8
v0.10.7
v0.10.6
v0.10.5
v0.10.4
v0.10.3
v0.10.2
v0.10.1
v0.10.0
v0.9.3
v0.9.2
v0.9.1
v0.9.0
v0.8.1
v0.8.0
v0.7.1
v0.7.0
v0.6.1
v0.6.0
v0.5.2
v0.5.1
v0.5.0
v0.4.0
v0.3.6
v0.3.5
v0.3.4
v0.3.3
v0.3.2
v0.3.1
v0.3.0
v0.2.2
v0.2.1
v0.2.0
v0.1.1
v0.1.0
Labels
Clear labels
CLI
DERP
DNS
Nix
OIDC
SSH
bug
database
documentation
duplicate
enhancement
faq
good first issue
grants
help wanted
might-come
needs design doc
needs investigation
no-stale-bot
out of scope
performance
policy 📝
pull-request
question
regression
routes
stale
tags
tailscale-feature-gap
well described ❤️
wontfix
Mirrored from GitHub Pull Request
No Label
bug
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/headscale#324
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @nsauk on GitHub (Sep 14, 2022).
Bug description
I use headscale as a control server and an official tailscale client from the App Store as a client, and I can't choose exit node from the client's GUI, list of available exit nodes is empty.

At the same time, I can see the list of exit nodes available and can choose an exit node using CLI:
As a result, it works great! But in GUI I can see only the chosen exit node and it shown as offline, despite it works correctly:

I reported this to tailscale/tailscale#5628 but they suppose that there is a problem in control server:
To Reproduce
Actual result
List in GUI is empty.
Expected result
List in GUI contains the same exit nodes as in console.
Context info
Control server: headscale v0.16.4 on CentOS Linux 8
Client: tailscale 1.30.1, App Store version on macOS 12.5.1
Kernel version: 4.18.0-305.12.1.el8_4.x86_64
headscale and caddy configs
@juanfont commented on GitHub (Sep 21, 2022):
@nsauk hey, can you try to run 0.17.0-alpha2?
@nsauk commented on GitHub (Sep 21, 2022):
@juanfont issue still reproduced on 0.17.0-alpha2.
@kazauwa commented on GitHub (Sep 30, 2022):
@nsauk, did you enable routes in headscale CLI? You need to do that in order for an exit node to become available.
@nsauk commented on GitHub (Oct 2, 2022):
@kazauwa yes I did. I have no problems with using these exit nodes, I can choose them with tailscale CLI and routing works, but I can't see them in the UI of macOS client. As I pointed out in the description, I originally reported this to tailscale/tailscale#5628 but they suppose that there is a problem in control server.
@nsauk commented on GitHub (Oct 2, 2022):
Hmm, I got it: I use IPv4 routes only and tailscale on macOS doesn't consider such exit nodes as available.
If I enable IPv4+IPv6 routes, I can see an exit node in the macOS' GUI list.
@kazauwa thanks for your command example with the
-aparameter.@juanfont may we know, if this thing is different between tailscale and headscale implementations?
@kazauwa commented on GitHub (Oct 5, 2022):
@nsauk
I'm almost sure that the implementations are the same, because Tailscale docs mention both IPv4 and IPv6 default routes.
@nsauk commented on GitHub (Oct 5, 2022):
@kazauwa to be honest, I migrated to headscale mostly because of this, I wanted to disable IPv6 completely to avoid all the related problems. But of course if I trade a technical problem on all systems for a visual inconvenience on macOS only, that's a pretty good trade.
At the moment I agree that there is nothing to fix in headscale, so I'm closing the issue. Thank you guys.
@juanfont commented on GitHub (Oct 5, 2022):
We might not be sending all the info for the macOS client. Let's keep it open.
@bradfitz commented on GitHub (Oct 6, 2022):
@juanfont, do you send the
Onlinebool?@juanfont commented on GitHub (Oct 8, 2022):
@bradfitz apologies for the delay. Yes, we do.
@nsauk are the clients shown online when checking
statusin the CLI?@tlpred commented on GitHub (Nov 22, 2022):
@juanfont let me chime in, since I'm also experiencing this issue and was re-creating tailnet for a few times, before I stumbled on this Github issue.
Clients are shown as
activebutofflinefrom the cli. Same in MacOS app GUI: I can see a dot near client name inNetwork deviceslist, indicating it's active, but can't connect to respective exit node(greyed out, says it's offline).Android client sees exit nodes just ok.
@rosejn commented on GitHub (Jan 19, 2023):
Just checking in on this. I've now tried with the last 3 release versions of headscale up to the most recent 0.19.0-beta1, and on OSX the exit node shows in the UI after logging in from the terminal only the first time. After selecting not to use the exit node though, it disappears from the menu so I can't go back to using it. When I try to re-run the tailscale up command specifying the exit node I get an error saying the node is not advertising an exit node, even though nothing changed on the server or the exit node client. The only way I've figured out to make it work again is to restart the headscale server and login again, requiring the full setup procedure, but then I only get one session with the exit node. (Not sure whether the headscale restart or client re-auth is the key operation, so I'll figure that out and update my comment.). The route is configured properly because I have used the exit node successfully many times, and all our linux clients work fine.
I'm happy to help debug if there's anything I can do, log, etc...
@rosejn commented on GitHub (Jan 20, 2023):
OK, so I'm wondering if this might be related to IPv4 vs IPv6 issues. When I copy the exit node's address via the UI menu in tailscale it copies an IPv6 addr. On the headscale server the only route I had enable was the IPv4 route. When I checked the
tailscale status --jsonfrom my OSX client it showed that the exit node machine was not advertising as an exit node. (Even though we have been successfully using it as an exit node for weeks with these settings... consistently in Linux, but spotty on OSX.). Noticing the route I enabled the IPv6 route on the headscale server. Now when I check the status from the OSX client it shows the machine as advertising as an ExitNode, it also shows in the tailscale UI, and I'm successfully using it again.Hopefully this helps point to where the bug may lie. Thanks for creating headscale!
@bradfitz commented on GitHub (Jan 21, 2023):
I'm not following this bug closely (nor do I use Headscale) but keep in mind that Tailscale only considers a node to be an exit node if it advertises both the IPv4
0.0.0.0/0and IPv6::/0route:988801d5d9/net/tsaddr/tsaddr.go (L247-L259)(This has nothing to do with whether the exit node actually has IPv6 access itself, but it needs to advertise the route)