tailscale/net
Brad Fitzpatrick 88c2afd1e3 ipn/ipnlocal, net/dns*, util/cloudenv: specialize DNS config on Google Cloud
This does three things:

* If you're on GCP, it adds a *.internal DNS split route to the
  metadata server, so we never break GCP DNS names. This lets people
  have some Tailscale nodes on GCP and some not (e.g. laptops at home)
  without having to add a Tailnet-wide *.internal DNS route.
  If you already have such a route, though, it won't overwrite it.

* If the 100.100.100.100 DNS forwarder has nowhere to forward to,
  it forwards it to the GCP metadata IP, which forwards to 8.8.8.8.
  This means there are never errNoUpstreams ("upstream nameservers not set")
  errors on GCP due to e.g. mangled /etc/resolv.conf (GCP default VMs
  don't have systemd-resolved, so it's likely a DNS supremacy fight)

* makes the DNS fallback mechanism use the GCP metadata IP as a
  fallback before our hosted HTTP-based fallbacks

I created a default GCP VM from their web wizard. It has no
systemd-resolved.

I then made its /etc/resolv.conf be empty and deleted its GCP
hostnames in /etc/hosts.

I then logged in to a tailnet with no global DNS settings.

With this, tailscaled writes /etc/resolv.conf (direct mode, as no
systemd-resolved) and sets it to 100.100.100.100, which then has
regular DNS via the metadata IP and *.internal DNS via the metadata IP
as well. If the tailnet configures explicit DNS servers, those are used
instead, except for *.internal.

This also adds a new util/cloudenv package based on version/distro
where the cloud type is only detected once. We'll likely expand it in
the future for other clouds, doing variants of this change for other
popular cloud environments.

Fixes #4911

RELNOTES=Google Cloud DNS improvements

Change-Id: I19f3c2075983669b2b2c0f29a548da8de373c7cf
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
2022-06-29 17:39:13 -07:00
..
dns ipn/ipnlocal, net/dns*, util/cloudenv: specialize DNS config on Google Cloud 2022-06-29 17:39:13 -07:00
dnscache ipn/ipnlocal, net/dns*, util/cloudenv: specialize DNS config on Google Cloud 2022-06-29 17:39:13 -07:00
dnsfallback net/dnsfallback: update from 'go generate' 2022-04-17 10:06:09 -07:00
flowtrack all: use any instead of interface{} 2022-03-17 11:35:09 -07:00
interfaces net/interfaces: add FreeBSD default route lookup (portmapping, etc) 2022-03-08 13:02:02 -08:00
netcheck all: gofmt all 2022-04-29 13:06:04 -07:00
neterror net/{neterror,dns/resolver}: move PacketWasTruncated to neterror from DNS code 2022-01-03 14:03:30 -08:00
netknob all: disable TCP keep-alives on iOS/Android 2021-09-28 12:03:18 -07:00
netns wasm: exclude code that's not used on iOS for Wasm too 2022-06-06 13:52:52 -07:00
netstat all: gofmt with Go 1.17 2021-08-05 15:54:00 -07:00
nettest net/nettest: deflake TestPipeTimeout 2021-11-30 12:21:59 -08:00
netutil net/netutil: add CheckIPForwardingLinux (#4301) 2022-03-28 10:24:11 -07:00
packet *: use WireGuard where logged, printed or named 2022-05-04 13:36:05 -07:00
portmapper net/portmapper: send discovery packet for IGD specifically. 2022-06-28 03:55:17 -07:00
proxymux net/proxymux: add a listener mux that can run SOCKS and HTTP on a single socket. 2021-11-29 16:49:48 -08:00
socks5 socks5: add a simple test 2022-06-09 10:41:06 -07:00
speedtest all: fix spelling mistakes 2021-10-12 21:23:14 -07:00
stun all: gofmt with Go 1.17 2021-08-05 15:54:00 -07:00
tlsdial envknob: add new package for all the strconv.ParseBool(os.Getenv(..)) 2022-01-24 11:51:23 -08:00
tsaddr net/dns/resolver, net/tsaddr: fix reverse lookups in 4to6 IP range 2022-04-21 09:37:21 -07:00
tsdial net/tsdial: add SystemDial as a wrapper on netns.Dial 2022-04-27 12:02:36 -07:00
tshttpproxy net/tshttpproxy: synology: pick proxy by scheme 2022-04-28 11:56:37 -07:00
tstun wgengine/netstack: make netstack MTU be 1280 also 2022-06-01 12:16:41 -07:00