mirror of
https://github.com/shtorm-7/sing-box-extended.git
synced 2026-08-11 12:57:13 +03:00
tailscale: Match bare hostnames in preferred_by when search domains exist
MagicDNS resolves single-label names via tailnet search domains, so route preferred_by should treat them as tailscale domains, matching official client behavior.
This commit is contained in:
@@ -98,6 +98,7 @@ type Endpoint struct {
|
|||||||
routerCfg *router.Config
|
routerCfg *router.Config
|
||||||
dnsCfg *tsDNS.Config
|
dnsCfg *tsDNS.Config
|
||||||
routeDomains common.TypedValue[map[string]bool]
|
routeDomains common.TypedValue[map[string]bool]
|
||||||
|
searchDomains atomic.Bool
|
||||||
routePrefixes atomic.Pointer[netipx.IPSet]
|
routePrefixes atomic.Pointer[netipx.IPSet]
|
||||||
|
|
||||||
acceptRoutes bool
|
acceptRoutes bool
|
||||||
@@ -785,7 +786,11 @@ func (t *Endpoint) PreferredDomain(domain string) bool {
|
|||||||
if routeDomains == nil {
|
if routeDomains == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return routeDomains[strings.ToLower(domain)]
|
domain = strings.ToLower(domain)
|
||||||
|
if routeDomains[domain] {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return !strings.Contains(domain, ".") && t.searchDomains.Load()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Endpoint) PreferredAddress(address netip.Addr) bool {
|
func (t *Endpoint) PreferredAddress(address netip.Addr) bool {
|
||||||
@@ -830,6 +835,7 @@ func (t *Endpoint) onReconfig(cfg *wgcfg.Config, routerCfg *router.Config, dnsCf
|
|||||||
routeDomains[fqdn.WithoutTrailingDot()] = true
|
routeDomains[fqdn.WithoutTrailingDot()] = true
|
||||||
}
|
}
|
||||||
t.routeDomains.Store(routeDomains)
|
t.routeDomains.Store(routeDomains)
|
||||||
|
t.searchDomains.Store(len(dnsCfg.SearchDomains) > 0)
|
||||||
|
|
||||||
var builder netipx.IPSetBuilder
|
var builder netipx.IPSetBuilder
|
||||||
for _, peer := range cfg.Peers {
|
for _, peer := range cfg.Peers {
|
||||||
|
|||||||
Reference in New Issue
Block a user