tailscale/net
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
..
art all: use Go 1.22 range-over-int 2024-04-16 15:32:38 -07:00
connstats all: use Go 1.22 range-over-int 2024-04-16 15:32:38 -07:00
dns net/dns: recheck DNS config on SERVFAIL errors (#12547) 2024-06-25 14:56:13 -04:00
dnscache net/dnscache: use parent context to perform lookup 2024-06-12 11:21:02 -07:00
dnsfallback tsd, ipnlocal, etc: add tsd.System.HealthTracker, start some plumbing 2024-04-25 22:13:04 -07:00
flowtrack net/flowtrack: fix, test String method 2024-06-18 21:44:44 -07:00
ipset net/ipset: skip the loop over Prefixes when there's only one 2024-06-17 06:05:36 -07:00
ktimeout net/ktimeout: add a package to set TCP user timeout 2024-02-20 10:49:58 -08:00
memnet net/memnet: export the network name (#9111) 2023-08-28 11:43:51 -07:00
netaddr all: update copyright and license headers 2023-01-27 15:36:29 -08:00
netcheck net/netcheck: fix probeProto.String result for IPv6 probes 2024-06-06 08:43:58 -07:00
neterror net/neterror, wgengine/magicsock: use UDP GSO and GRO on Linux (#7791) 2023-04-04 16:32:16 -07:00
netkernelconf ipn/{ipnlocal,localapi},net/netkernelconf,client/tailscale,cmd/containerboot: optionally enable UDP GRO forwarding for containers (#12410) 2024-06-10 19:19:03 +01:00
netknob all: update copyright and license headers 2023-01-27 15:36:29 -08:00
netmon net/netmon: remove spammy log statements (#11953) 2024-05-01 12:02:16 -04:00
netns net/netns: add Windows support for bind-to-interface-by-route 2024-06-24 10:43:34 -06:00
netstat net/{netns,netstat}: use new x/sys/cpu.IsBigEndian 2023-02-02 07:41:49 -08:00
netutil net/netmon, add: add netmon.State type alias of interfaces.State 2024-04-28 07:34:52 -07:00
packet net/flowtrack: optimize Tuple type for use as map key 2024-06-18 21:31:48 -07:00
ping net/ping: fix ICMP echo code field to 0 2023-09-15 17:08:39 -07:00
portmapper all: use math/rand/v2 more 2024-06-05 15:24:04 -07:00
proxymux all: cleanup unused code, part 1 (#10661) 2023-12-20 14:50:30 -08:00
routetable net/{interfaces,netmon}, all: merge net/interfaces package into net/netmon 2024-04-28 07:34:52 -07:00
socks5 net/socks5: add password auth support 2023-03-05 14:08:34 -08:00
sockstats net/{interfaces,netmon}, all: merge net/interfaces package into net/netmon 2024-04-28 07:34:52 -07:00
speedtest all: update copyright and license headers 2023-01-27 15:36:29 -08:00
stun derp/xdp,cmd/xdpderper: initial skeleton (#12390) 2024-06-14 08:45:24 -07:00
stunserver all: use Go 1.22 range-over-int 2024-04-16 15:32:38 -07:00
tcpinfo all: use Go 1.22 range-over-int 2024-04-16 15:32:38 -07:00
tlsdial tsd, ipnlocal, etc: add tsd.System.HealthTracker, start some plumbing 2024-04-25 22:13:04 -07:00
tsaddr net/ipset, wgengine/filter/filtertype: add split-out packages 2024-06-16 15:25:23 -07:00
tsdial tsnet,wgengine/netstack: add ListenPacket and tests 2024-06-02 14:14:24 -07:00
tshttpproxy all: use Go 1.22 range-over-int 2024-04-16 15:32:38 -07:00
tstun wgengine/filter: support FilterRules matching on srcIP node caps [capver 100] 2024-06-20 12:27:04 -07:00
wsconn net/wsconn: accept a remote addr string and plumb it through 2023-08-29 16:57:16 -07:00