summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBrad Fitzpatrick <bradfitz@tailscale.com>2025-03-24 09:08:20 -0700
committerBrad Fitzpatrick <brad@danga.com>2025-03-27 11:00:48 -0700
commita3bc0bcb0a42fec00e3f99c4bf17cae0ea8b15dd (patch)
tree04fb380afe8fe5e98732f99dd9a19fac43f36d1f
parent1ec1a60c107b919a8561a10464a635901ba51d41 (diff)
downloadtailscale-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.go25
-rw-r--r--net/dns/manager.go4
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