mirror of
https://github.com/juanfont/headscale.git
synced 2026-01-11 20:00:28 +01:00
MagicDNS issues with systemd resolver configuration and Docker containers (Ubuntu) #416
Closed
opened 2025-12-29 01:28:36 +01:00 by adam
·
3 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#416
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 @ky4n on GitHub (Jan 20, 2023).
Bug description
Short version:
Headscale with MagicDNS enabled appends
100.100.100.100entry to system'sresolve.conf(looks likegetMapResponseDNSConfigis the method but I'm not a Go programmer). This can cause issues if there are already 3 name servers listed in the file (e.g. from DHCP). There's even a helpful message in the file itself (Too many DNS servers configured, the following entries may be ignored.). The nameserver being appended as a 4th entry causes MagicDNS resolution problems for Docker containers that are ran on the host.Details:
After initial discovery, this was also tested on a fresh instance (Linode VM) of Ubuntu 20.04 after I've observed it on other servers already plugged into Headscale/Tailscale network.
Docker (
docker-ce) and Tailscale were installed following the official instructions from official apt mirrors added on the host.There are actually 2 files set up by systemd resolver:
/run/systemd/resolve/stub-resolv.confwhich is symlinked to/etc/resolv.confand used by the host./run/systemd/resolve/resolv.confwhich corresponds to what Docker puts inside the container as/etc/resolv.confAfter fresh instance provisioning the values were as follows (skipping comments in them):
/run/systemd/resolve/resolv.confLinode provides 3 nameservers, no room to add another.
/run/systemd/resolve/stub-resolv.confAfter connecting to Headscale network the first file was changed to the following:
This file is used as
/etc/resolv.confby Docker containers ran on the host and with 4nameserverentries. When file is edited inside the container to putnameserver 100.100.100.100as the first name server instead, DNS resolution inside the container starts working.Both files are auto-generated by Systemd/Docker so editing them by hand is obviously not a proper solution. I suspect that changing the order to insert istead of appending the nameserver to the list should do the trick.
Interestingly enough, I've tried a Tailscale-only setup on the same host and when using Tailscale directly,
/run/systemd/resolve/resolv.confwas as follows (search domain was added, but not any nameserver):DNS resolution inside the container did not work and adding
nameserver 100.100.100.100as the first entry by hand made it work.Expected behavior
DNS resolution for MagicDNS domains works inside Docker containers the same way as on a host that is connected to Headscale network.
To Reproduce
root.docker-ce) from official sources (https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository)@100.100.100.100docker run -ti --rm ubuntu:20.04 bash)Context info
OS: Ubuntu 20.04
Kernel: 5.4.0-125-generic (and 5.4.0-136-generic)
Headscale version: v0.18.0
Tailscale version: 1.34.2
Docker package: 5:20.10.23
3-0ubuntu-focalHeadscale config, DNS part (MagicDNS enabled):
The rest of the config is generally stock (I can provide it if needed).
@ky4n commented on GitHub (Jan 22, 2023):
My workaround for this was to set DNS (and search domain) for each container explicitly, basically through equivalent of
--dnsDocker option.The drawback is that it requires adjusting for all necessary containers (or possibly centrally in Docker daemon configuration, haven't tried it). I'm also not sure what else might be using non-stub configuration from systemd resolver and DHCP giving more than 2 name servers is something that can happen so it's a valid case.
@kilo-gi commented on GitHub (Jun 8, 2023):
What network is the container running on? Does DNS work inside containers on a non-default bridge network?
@kradalby commented on GitHub (Jun 19, 2023):
Hi @ky4n
This seem like a support request and it would be great if you can as in the Docker part of Discord (https://discord.gg/c84AZQhmpx).
We (devs of headscale) has limited bandwidth to deal with support issues and the surface of the project and have a great community there to help us, since we also do not know or use Docker, we dont support it officially and its easier for us to let the community answer those things.
I will close this here, so we can track issues which we can action.