Signed-off-by: Andrew Dunham <andrew@tailscale.com>
This commit is contained in:
Andrew Dunham 2022-09-01 18:31:11 -04:00
parent 265b008e49
commit 39b45bb031
2 changed files with 13 additions and 0 deletions

View File

@ -133,6 +133,12 @@ type Options struct {
// MapResponse.PingRequest queries from the control plane. // MapResponse.PingRequest queries from the control plane.
// If nil, PingRequest queries are not answered. // If nil, PingRequest queries are not answered.
Pinger Pinger Pinger Pinger
// GetTailscaleRoutes is a function that should return any Tailscale
// routes that are currently known; if any are returned, we test the IP
// address of the control server against these routes and use our
// fallback DNS server in those cases.
GetTailscaleRoutes func() []netip.Prefix
} }
// Pinger is the LocalBackend.Ping method. // Pinger is the LocalBackend.Ping method.

View File

@ -132,6 +132,7 @@ type LocalBackend struct {
filterAtomic atomic.Pointer[filter.Filter] filterAtomic atomic.Pointer[filter.Filter]
containsViaIPFuncAtomic syncs.AtomicValue[func(netip.Addr) bool] containsViaIPFuncAtomic syncs.AtomicValue[func(netip.Addr) bool]
tailscaleRoutesAtomic syncs.AtomicValue[[]netip.Prefix]
// The mutex protects the following elements. // The mutex protects the following elements.
mu sync.Mutex mu sync.Mutex
@ -884,6 +885,10 @@ func (b *LocalBackend) getNewControlClientFunc() clientGen {
return b.ccGen return b.ccGen
} }
func (b *LocalBackend) getTailscaleRoutes() []netip.Prefix {
return b.tailscaleRoutesAtomic.Load()
}
// startIsNoopLocked reports whether a Start call on this LocalBackend // startIsNoopLocked reports whether a Start call on this LocalBackend
// with the provided Start Options would be a useless no-op. // with the provided Start Options would be a useless no-op.
// //
@ -1078,6 +1083,7 @@ func (b *LocalBackend) Start(opts ipn.Options) error {
Dialer: b.Dialer(), Dialer: b.Dialer(),
Status: b.setClientStatus, Status: b.setClientStatus,
C2NHandler: http.HandlerFunc(b.handleC2N), C2NHandler: http.HandlerFunc(b.handleC2N),
GetTailscaleRoutes: b.getTailscaleRoutes,
// Don't warn about broken Linux IP forwarding when // Don't warn about broken Linux IP forwarding when
// netstack is being used. // netstack is being used.
@ -2315,6 +2321,7 @@ 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)
b.tailscaleRoutesAtomic.Store(rcfg.Routes)
b.initPeerAPIListener() b.initPeerAPIListener()
} }