You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tailscale/net/dns
Jonathan Nobels 27033c6277
net/dns: recheck DNS config on SERVFAIL errors (#12547)
Fixes tailscale/corp#20677

Replaces the original attempt to rectify this (by injecting a netMon
event) which was both heavy handed, and missed cases where the
netMon event was "minor".

On apple platforms, the fetching the interface's nameservers can
and does return an empty list in certain situations.   Apple's API
in particular is very limiting here.  The header hints at notifications
for dns changes which would let us react ahead of time, but it's all
private APIs.

To avoid remaining in the state where we end up with no
nameservers but we absolutely need them, we'll react
to a lack of upstream nameservers by attempting to re-query
the OS.

We'll rate limit this to space out the attempts.   It seems relatively
harmless to attempt a reconfig every 5 seconds (triggered
by an incoming query) if the network is in this broken state.

Missing nameservers might possibly be a persistent condition
(vs a transient error), but that would  also imply that something
out of our control is badly misconfigured.

Tested by randomly returning [] for the nameservers.   When switching
between Wifi networks, or cell->wifi, this will randomly trigger
the bug, and we appear to reliably heal the DNS state.

Signed-off-by: Jonathan Nobels <jonathan@tailscale.com>
4 months ago
..
publicdns Net/DNS/Publicdns: update the IPv6 range that we use to recreate route endpoint for control D 5 months ago
recursive all: use Go 1.22 range-over-int 6 months ago
resolvconffile clientupdate, net/dns: fix some "tailsacle" typos 7 months ago
resolver net/dns: recheck DNS config on SERVFAIL errors (#12547) 4 months ago
config.go all: update copyright and license headers 2 years ago
debian_resolvconf.go all: update copyright and license headers 2 years ago
direct.go health, all: remove health.Global, finish plumbing health.Tracker 6 months ago
direct_linux.go health: begin work to use structured health warnings instead of strings, pipe changes into ipn.Notify (#12406) 4 months ago
direct_notlinux.go all: update copyright and license headers 2 years ago
direct_test.go clientupdate, net/dns: fix some "tailsacle" typos 7 months ago
flush_default.go all: update copyright and license headers 2 years ago
flush_windows.go cmd/tailscaled, net/dns, wgengine/router: start Windows child processes with DETACHED_PROCESS when I/O is being piped 4 months ago
ini.go all: update copyright and license headers 2 years ago
ini_test.go all: update copyright and license headers 2 years ago
manager.go net/dns: recheck DNS config on SERVFAIL errors (#12547) 4 months ago
manager_darwin.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 4 months ago
manager_default.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 4 months ago
manager_freebsd.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 4 months ago
manager_linux.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 4 months ago
manager_linux_test.go health, all: remove health.Global, finish plumbing health.Tracker 6 months ago
manager_openbsd.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 4 months ago
manager_tcp_test.go net/dns: don't set MatchDomains on Apple platforms when no upstream nameservers available (#12334) 5 months ago
manager_test.go net/dns: ensure multiple hosts with the same IP address are combined into a single HostEntry 4 months ago
manager_windows.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 4 months ago
manager_windows_test.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 4 months ago
nm.go all: cleanup unused code, part 2 (#10670) 10 months ago
noop.go all: update copyright and license headers 2 years ago
nrpt_windows.go net/dns: unconditionally write NRPT rules to local settings 6 months ago
openresolv.go net/dns: log more info when openresolv commands fail 8 months ago
osconfig.go net/dns: fix typo in OSConfig logging (#12330) 5 months ago
osconfig_test.go all: update copyright and license headers 2 years ago
resolvconf-workaround.sh all: update copyright and license headers 2 years ago
resolvconf.go net/dns: properly detect newer debian resolvconf 1 year ago
resolvconfpath_default.go net/dns: overwrite /tmp/resolv.conf on gokrazy 1 year ago
resolvconfpath_gokrazy.go net/dns: overwrite /tmp/resolv.conf on gokrazy 1 year ago
resolvd.go all: update copyright and license headers 2 years ago
resolved.go health, all: remove health.Global, finish plumbing health.Tracker 6 months ago
utf.go all: update copyright and license headers 2 years ago
utf_test.go all: update copyright and license headers 2 years ago
wsl_windows.go cmd/tailscaled, net/dns, wgengine/router: start Windows child processes with DETACHED_PROCESS when I/O is being piped 4 months ago