mirror of
https://github.com/tailscale/tailscale.git
synced 2025-02-27 10:47:35 +00:00
cmd/lopower: set ultimate fallback DNS servers
Change-Id: I044d6c7b9dc4b874f3c60d2c6ce2105bafc00639 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
44570dabda
commit
510f0745ea
@ -50,6 +50,7 @@ import (
|
|||||||
"tailscale.com/net/tsaddr"
|
"tailscale.com/net/tsaddr"
|
||||||
"tailscale.com/syncs"
|
"tailscale.com/syncs"
|
||||||
"tailscale.com/tsnet"
|
"tailscale.com/tsnet"
|
||||||
|
"tailscale.com/types/dnstype"
|
||||||
"tailscale.com/types/ipproto"
|
"tailscale.com/types/ipproto"
|
||||||
"tailscale.com/types/key"
|
"tailscale.com/types/key"
|
||||||
"tailscale.com/types/logger"
|
"tailscale.com/types/logger"
|
||||||
@ -638,7 +639,22 @@ func (lp *lpServer) startTSNet(ctx context.Context) {
|
|||||||
}
|
}
|
||||||
lp.tsnet = ts
|
lp.tsnet = ts
|
||||||
ts.PreStart = func() error {
|
ts.PreStart = func() error {
|
||||||
ts.Sys().DNSManager.Get().SetForceAAAA(true)
|
dnsMgr := ts.Sys().DNSManager.Get()
|
||||||
|
dnsMgr.SetForceAAAA(true)
|
||||||
|
|
||||||
|
// Force fallback resolvers to Google and Cloudflare as an ultimate
|
||||||
|
// fallback in case the Tailnet DNS servers are not set/forced. Normally
|
||||||
|
// tailscaled would resort to using the OS DNS resolvers, but
|
||||||
|
// tsnet/userspace binaries don't do that (yet?), so this is the
|
||||||
|
// "Opionated" part of the "LOPOWER" name. The opinion is just using
|
||||||
|
// big providers known to work. (Normally stock tailscaled never
|
||||||
|
// makes such opinions and never defaults to any big provider, unless
|
||||||
|
// you're already running on that big provider's network so have
|
||||||
|
// already indicated you're fine with them.))
|
||||||
|
dnsMgr.SetForceFallbackResolvers([]*dnstype.Resolver{
|
||||||
|
{Addr: "8.8.8.8"},
|
||||||
|
{Addr: "1.1.1.1"},
|
||||||
|
})
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,6 +65,7 @@ type Manager struct {
|
|||||||
// was any failure applying the last configuration.
|
// was any failure applying the last configuration.
|
||||||
config *Config
|
config *Config
|
||||||
forceAAAA bool // whether client wants MagicDNS AAAA even if unsure of host's IPv6 status
|
forceAAAA bool // whether client wants MagicDNS AAAA even if unsure of host's IPv6 status
|
||||||
|
forceFallbackResolvers []*dnstype.Resolver
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewManagers created a new manager from the given config.
|
// NewManagers created a new manager from the given config.
|
||||||
@ -141,6 +142,16 @@ func (m *Manager) SetForceAAAA(v bool) {
|
|||||||
m.forceAAAA = v
|
m.forceAAAA = v
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetForceFallbackResolvers sets the resolvers to use to override
|
||||||
|
// the fallback resolvers if the control plane doesn't send any.
|
||||||
|
//
|
||||||
|
// It takes ownership of the provided slice.
|
||||||
|
func (m *Manager) SetForceFallbackResolvers(resolvers []*dnstype.Resolver) {
|
||||||
|
m.mu.Lock()
|
||||||
|
defer m.mu.Unlock()
|
||||||
|
m.forceFallbackResolvers = resolvers
|
||||||
|
}
|
||||||
|
|
||||||
// setLocked sets the DNS configuration.
|
// setLocked sets the DNS configuration.
|
||||||
//
|
//
|
||||||
// m.mu must be held.
|
// m.mu must be held.
|
||||||
@ -159,6 +170,10 @@ func (m *Manager) setLocked(cfg Config) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if _, ok := rcfg.Routes["."]; !ok && len(m.forceFallbackResolvers) > 0 {
|
||||||
|
rcfg.Routes["."] = m.forceFallbackResolvers
|
||||||
|
}
|
||||||
|
|
||||||
m.logf("Resolvercfg: %v", logger.ArgWriter(func(w *bufio.Writer) {
|
m.logf("Resolvercfg: %v", logger.ArgWriter(func(w *bufio.Writer) {
|
||||||
rcfg.WriteToBufioWriter(w)
|
rcfg.WriteToBufioWriter(w)
|
||||||
}))
|
}))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user