@@ -57,6 +57,7 @@ type Server interface {
5757 ProbeAvailability ()
5858 UpdateServerConfig (domains dnsconfig.ServerDomains ) error
5959 PopulateManagementDomain (mgmtURL * url.URL ) error
60+ SetRouteChecker (func (netip.Addr ) bool )
6061}
6162
6263type nsGroupsByDomain struct {
@@ -104,6 +105,7 @@ type DefaultServer struct {
104105
105106 statusRecorder * peer.Status
106107 stateManager * statemanager.Manager
108+ routeMatch func (netip.Addr ) bool
107109
108110 probeMu sync.Mutex
109111 probeCancel context.CancelFunc
@@ -229,6 +231,14 @@ func newDefaultServer(
229231 return defaultServer
230232}
231233
234+ // SetRouteChecker sets the function used by upstream resolvers to determine
235+ // whether an IP is routed through the tunnel.
236+ func (s * DefaultServer ) SetRouteChecker (f func (netip.Addr ) bool ) {
237+ s .mux .Lock ()
238+ defer s .mux .Unlock ()
239+ s .routeMatch = f
240+ }
241+
232242// RegisterHandler registers a handler for the given domains with the given priority.
233243// Any previously registered handler for the same domain and priority will be replaced.
234244func (s * DefaultServer ) RegisterHandler (domains domain.List , handler dns.Handler , priority int ) {
@@ -743,6 +753,7 @@ func (s *DefaultServer) registerFallback(config HostDNSConfig) {
743753 log .Errorf ("failed to create upstream resolver for original nameservers: %v" , err )
744754 return
745755 }
756+ handler .routeMatch = s .routeMatch
746757
747758 for _ , ns := range originalNameservers {
748759 if ns == config .ServerIP {
@@ -852,6 +863,7 @@ func (s *DefaultServer) createHandlersForDomainGroup(domainGroup nsGroupsByDomai
852863 if err != nil {
853864 return nil , fmt .Errorf ("create upstream resolver: %v" , err )
854865 }
866+ handler .routeMatch = s .routeMatch
855867
856868 for _ , ns := range nsGroup .NameServers {
857869 if ns .NSType != nbdns .UDPNameServerType {
@@ -1036,6 +1048,7 @@ func (s *DefaultServer) addHostRootZone() {
10361048 log .Errorf ("unable to create a new upstream resolver, error: %v" , err )
10371049 return
10381050 }
1051+ handler .routeMatch = s .routeMatch
10391052
10401053 handler .upstreamServers = maps .Keys (hostDNSServers )
10411054 handler .deactivate = func (error ) {}
0 commit comments