diff options
| author | Brad Fitzpatrick <bradfitz@tailscale.com> | 2025-03-24 09:08:20 -0700 |
|---|---|---|
| committer | Brad Fitzpatrick <brad@danga.com> | 2025-03-27 11:00:48 -0700 |
| commit | a3bc0bcb0a42fec00e3f99c4bf17cae0ea8b15dd (patch) | |
| tree | 04fb380afe8fe5e98732f99dd9a19fac43f36d1f | |
| parent | 1ec1a60c107b919a8561a10464a635901ba51d41 (diff) | |
| download | tailscale-a3bc0bcb0a42fec00e3f99c4bf17cae0ea8b15dd.tar.xz tailscale-a3bc0bcb0a42fec00e3f99c4bf17cae0ea8b15dd.zip | |
net/dns: add debug envknob to enable dual stack MagicDNS
Updates #15404
Change-Id: Ic754cc54113b1660b7071b40babb9d3c0e25b2e1
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
| -rw-r--r-- | net/dns/config.go | 25 | ||||
| -rw-r--r-- | net/dns/manager.go | 4 |
2 files changed, 24 insertions, 5 deletions
diff --git a/net/dns/config.go b/net/dns/config.go index 67d3d753c..b2f4e6dbd 100644 --- a/net/dns/config.go +++ b/net/dns/config.go @@ -10,6 +10,8 @@ import ( "net/netip" "sort" + "tailscale.com/control/controlknobs" + "tailscale.com/envknob" "tailscale.com/net/dns/publicdns" "tailscale.com/net/dns/resolver" "tailscale.com/net/tsaddr" @@ -47,11 +49,28 @@ type Config struct { OnlyIPv6 bool } -func (c *Config) serviceIP() netip.Addr { +var magicDNSDualStack = envknob.RegisterBool("TS_DEBUG_MAGIC_DNS_DUAL_STACK") + +// serviceIPs returns the list of service IPs where MagicDNS is reachable. +// +// The provided knobs may be nil. +func (c *Config) serviceIPs(knobs *controlknobs.Knobs) []netip.Addr { if c.OnlyIPv6 { - return tsaddr.TailscaleServiceIPv6() + return []netip.Addr{tsaddr.TailscaleServiceIPv6()} } - return tsaddr.TailscaleServiceIP() + + // TODO(bradfitz,mikeodr,raggi): include IPv6 here too; tailscale/tailscale#15404 + // And add a controlknobs knob to disable dual stack. + // + // For now, opt-in for testing. + if magicDNSDualStack() { + return []netip.Addr{ + tsaddr.TailscaleServiceIP(), + tsaddr.TailscaleServiceIPv6(), + } + } + + return []netip.Addr{tsaddr.TailscaleServiceIP()} } // WriteToBufioWriter write a debug version of c for logs to w, omitting diff --git a/net/dns/manager.go b/net/dns/manager.go index 1e9eb7fe7..0bfbaa077 100644 --- a/net/dns/manager.go +++ b/net/dns/manager.go @@ -307,7 +307,7 @@ func (m *Manager) compileConfig(cfg Config) (rcfg resolver.Config, ocfg OSConfig // through quad-100. rcfg.Routes = routes rcfg.Routes["."] = cfg.DefaultResolvers - ocfg.Nameservers = []netip.Addr{cfg.serviceIP()} + ocfg.Nameservers = cfg.serviceIPs(m.knobs) return rcfg, ocfg, nil } @@ -345,7 +345,7 @@ func (m *Manager) compileConfig(cfg Config) (rcfg resolver.Config, ocfg OSConfig // or routes + MagicDNS, or just MagicDNS, or on an OS that cannot // split-DNS. Install a split config pointing at quad-100. rcfg.Routes = routes - ocfg.Nameservers = []netip.Addr{cfg.serviceIP()} + ocfg.Nameservers = cfg.serviceIPs(m.knobs) var baseCfg *OSConfig // base config; non-nil if/when known |
