ipn/ipnlocal,wgengine: move (*tsdial.Dialer).SetRoutes() calls from LocalBackend to userspaceEngine

This avoids reconfiguring the dialer unless the router config has changed.

Updates #12027

Signed-off-by: Nick Khyl <nickk@tailscale.com>
This commit is contained in:
Nick Khyl 2025-05-12 18:35:12 -05:00 committed by Nick Khyl
parent d303570ab7
commit ffb1dda245
2 changed files with 11 additions and 7 deletions

View File

@ -64,7 +64,6 @@ import (
"tailscale.com/logpolicy" "tailscale.com/logpolicy"
"tailscale.com/net/captivedetection" "tailscale.com/net/captivedetection"
"tailscale.com/net/dns" "tailscale.com/net/dns"
"tailscale.com/net/dns/resolver"
"tailscale.com/net/dnscache" "tailscale.com/net/dnscache"
"tailscale.com/net/dnsfallback" "tailscale.com/net/dnsfallback"
"tailscale.com/net/ipset" "tailscale.com/net/ipset"
@ -4844,12 +4843,6 @@ func (b *LocalBackend) authReconfig() {
} }
b.logf("[v1] authReconfig: ra=%v dns=%v 0x%02x: %v", prefs.RouteAll(), prefs.CorpDNS(), flags, err) b.logf("[v1] authReconfig: ra=%v dns=%v 0x%02x: %v", prefs.RouteAll(), prefs.CorpDNS(), flags, err)
if resolver.ShouldUseRoutes(b.ControlKnobs()) {
b.dialer.SetRoutes(rcfg.Routes, rcfg.LocalRoutes)
} else {
b.dialer.SetRoutes(nil, nil)
}
b.initPeerAPIListener() b.initPeerAPIListener()
b.readvertiseAppConnectorRoutes() b.readvertiseAppConnectorRoutes()
} }

View File

@ -26,6 +26,7 @@ import (
"tailscale.com/health" "tailscale.com/health"
"tailscale.com/ipn/ipnstate" "tailscale.com/ipn/ipnstate"
"tailscale.com/net/dns" "tailscale.com/net/dns"
"tailscale.com/net/dns/resolver"
"tailscale.com/net/flowtrack" "tailscale.com/net/flowtrack"
"tailscale.com/net/ipset" "tailscale.com/net/ipset"
"tailscale.com/net/netmon" "tailscale.com/net/netmon"
@ -102,6 +103,7 @@ type userspaceEngine struct {
tundev *tstun.Wrapper tundev *tstun.Wrapper
wgdev *device.Device wgdev *device.Device
router router.Router router router.Router
dialer *tsdial.Dialer
confListenPort uint16 // original conf.ListenPort confListenPort uint16 // original conf.ListenPort
dns *dns.Manager dns *dns.Manager
magicConn *magicsock.Conn magicConn *magicsock.Conn
@ -344,6 +346,7 @@ func NewUserspaceEngine(logf logger.Logf, conf Config) (_ Engine, reterr error)
waitCh: make(chan struct{}), waitCh: make(chan struct{}),
tundev: tsTUNDev, tundev: tsTUNDev,
router: rtr, router: rtr,
dialer: conf.Dialer,
confListenPort: conf.ListenPort, confListenPort: conf.ListenPort,
birdClient: conf.BIRDClient, birdClient: conf.BIRDClient,
controlKnobs: conf.ControlKnobs, controlKnobs: conf.ControlKnobs,
@ -1028,6 +1031,14 @@ func (e *userspaceEngine) Reconfig(cfg *wgcfg.Config, routerCfg *router.Config,
if err != nil { if err != nil {
return err return err
} }
if resolver.ShouldUseRoutes(e.controlKnobs) {
e.logf("wgengine: Reconfig: user dialer")
e.dialer.SetRoutes(routerCfg.Routes, routerCfg.LocalRoutes)
} else {
e.dialer.SetRoutes(nil, nil)
}
// Keep DNS configuration after router configuration, as some // Keep DNS configuration after router configuration, as some
// DNS managers refuse to apply settings if the device has no // DNS managers refuse to apply settings if the device has no
// assigned address. // assigned address.