tailscale/net/dns
Jonathan Nobels 02e3c046aa
net/dns: re-query system resolvers on no-upstream resolver failure on apple platforms (#12398)
Fixes tailscale/corp#20677

On macOS sleep/wake, we're encountering a condition where reconfigure the network
a little bit too quickly - before apple has set the nameservers for our interface.
This results in a persistent condition where we have no upstream resolver and
fail all forwarded DNS queries.

No upstream nameservers is a legitimate configuration, and we have no  (good) way
of determining when Apple is ready - but if we need to forward a query, and we
have no nameservers, then something has gone badly wrong and the network is
very broken.

A simple fix here is to simply inject a netMon event, which will go through the
configuration dance again when we hit the SERVFAIL condition.

Tested by artificially/randomly returning [] for the list of nameservers in the bespoke
ipn-bridge code responsible for getting the nameservers.

Signed-off-by: Jonathan Nobels <jonathan@tailscale.com>
2024-06-12 15:45: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: re-query system resolvers on no-upstream resolver failure on apple platforms (#12398) 2024-06-12 15:45: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, all: remove health.Global, finish plumbing health.Tracker 2024-04-26 12:03:11 -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 health, all: remove health.Global, finish plumbing health.Tracker 2024-04-26 12:03:11 -07:00
manager_default.go health, all: remove health.Global, finish plumbing health.Tracker 2024-04-26 12:03:11 -07:00
manager_freebsd.go health, all: remove health.Global, finish plumbing health.Tracker 2024-04-26 12:03:11 -07: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 health, all: remove health.Global, finish plumbing health.Tracker 2024-04-26 12:03:11 -07:00
manager_openbsd.go health, all: remove health.Global, finish plumbing health.Tracker 2024-04-26 12:03:11 -07: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: fix crash in tests 2024-06-07 07:55:13 -07:00
manager_windows_test.go health, all: remove health.Global, finish plumbing health.Tracker 2024-04-26 12:03:11 -07:00
manager_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
manager.go net/dns: fix crash in tests 2024-06-07 07:55:13 -07: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