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>
2024-06-25 14:56:13 -04:00
..
publicdns Net/DNS/Publicdns: update the IPv6 range that we use to recreate route endpoint for control D 2024-05-15 12:21:58 -04:00
recursive all: use Go 1.22 range-over-int 2024-04-16 15:32:38 -07:00
resolvconffile clientupdate, net/dns: fix some "tailsacle" typos 2024-04-03 21:08:25 -07:00
resolver net/dns: recheck DNS config on SERVFAIL errors (#12547) 2024-06-25 14:56:13 -04:00
config.go all: update copyright and license headers 2023-01-27 15:36:29 -08:00
debian_resolvconf.go all: update copyright and license headers 2023-01-27 15:36:29 -08:00
direct_linux.go health: begin work to use structured health warnings instead of strings, pipe changes into ipn.Notify (#12406) 2024-06-14 11:53:56 -07:00
direct_notlinux.go all: update copyright and license headers 2023-01-27 15:36:29 -08:00
direct_test.go clientupdate, net/dns: fix some "tailsacle" typos 2024-04-03 21:08:25 -07:00
direct.go health, all: remove health.Global, finish plumbing health.Tracker 2024-04-26 12:03:11 -07:00
flush_default.go all: update copyright and license headers 2023-01-27 15:36:29 -08:00
flush_windows.go cmd/tailscaled, net/dns, wgengine/router: start Windows child processes with DETACHED_PROCESS when I/O is being piped 2024-06-11 11:35:26 -06:00
ini_test.go all: update copyright and license headers 2023-01-27 15:36:29 -08:00
ini.go all: update copyright and license headers 2023-01-27 15:36:29 -08:00
manager_darwin.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 2024-06-14 14:41:50 -05:00
manager_default.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 2024-06-14 14:41:50 -05:00
manager_freebsd.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 2024-06-14 14:41:50 -05:00
manager_linux_test.go health, all: remove health.Global, finish plumbing health.Tracker 2024-04-26 12:03:11 -07:00
manager_linux.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 2024-06-14 14:41:50 -05:00
manager_openbsd.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 2024-06-14 14:41:50 -05:00
manager_tcp_test.go net/dns: don't set MatchDomains on Apple platforms when no upstream nameservers available (#12334) 2024-06-04 09:41:13 -07:00
manager_test.go net/dns: ensure multiple hosts with the same IP address are combined into a single HostEntry 2024-06-21 13:16:49 -06:00
manager_windows_test.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 2024-06-14 14:41:50 -05:00
manager_windows.go various: create a catch-all NRPT rule when "Override local DNS" is enabled on Windows 2024-06-14 14:41:50 -05:00
manager.go net/dns: recheck DNS config on SERVFAIL errors (#12547) 2024-06-25 14:56:13 -04:00
nm.go all: cleanup unused code, part 2 (#10670) 2023-12-21 17:40:03 -08:00
noop.go all: update copyright and license headers 2023-01-27 15:36:29 -08:00
nrpt_windows.go net/dns: unconditionally write NRPT rules to local settings 2024-04-12 11:56:26 -06:00
openresolv.go net/dns: log more info when openresolv commands fail 2024-02-13 20:48:54 -05:00
osconfig_test.go all: update copyright and license headers 2023-01-27 15:36:29 -08:00
osconfig.go net/dns: fix typo in OSConfig logging (#12330) 2024-06-03 11:05:38 -04:00
resolvconf-workaround.sh all: update copyright and license headers 2023-01-27 15:36:29 -08:00
resolvconf.go net/dns: properly detect newer debian resolvconf 2023-10-11 08:38:25 -07:00
resolvconfpath_default.go net/dns: overwrite /tmp/resolv.conf on gokrazy 2023-07-23 09:53:32 -07:00
resolvconfpath_gokrazy.go net/dns: overwrite /tmp/resolv.conf on gokrazy 2023-07-23 09:53:32 -07:00
resolvd.go all: update copyright and license headers 2023-01-27 15:36:29 -08:00
resolved.go health, all: remove health.Global, finish plumbing health.Tracker 2024-04-26 12:03:11 -07:00
utf_test.go all: update copyright and license headers 2023-01-27 15:36:29 -08:00
utf.go all: update copyright and license headers 2023-01-27 15:36:29 -08:00
wsl_windows.go cmd/tailscaled, net/dns, wgengine/router: start Windows child processes with DETACHED_PROCESS when I/O is being piped 2024-06-11 11:35:26 -06:00