mirror of
https://github.com/MetaCubeX/mihomo.git
synced 2026-02-26 16:57:08 +00:00
feat: add direct-nameserver and direct-nameserver-follow-policy in dns section
This commit is contained in:
@@ -427,6 +427,8 @@ type Config struct {
|
||||
Main, Fallback []NameServer
|
||||
Default []NameServer
|
||||
ProxyServer []NameServer
|
||||
DirectServer []NameServer
|
||||
DirectFollowPolicy bool
|
||||
IPv6 bool
|
||||
IPv6Timeout uint
|
||||
EnhancedMode C.DNSMode
|
||||
@@ -446,7 +448,25 @@ func (config Config) newCache() dnsCache {
|
||||
}
|
||||
}
|
||||
|
||||
func NewResolver(config Config) (r *Resolver, pr *Resolver) {
|
||||
type Resolvers struct {
|
||||
*Resolver
|
||||
ProxyResolver *Resolver
|
||||
DirectResolver *Resolver
|
||||
}
|
||||
|
||||
func (rs Resolvers) ClearCache() {
|
||||
rs.Resolver.ClearCache()
|
||||
rs.ProxyResolver.ClearCache()
|
||||
rs.DirectResolver.ClearCache()
|
||||
}
|
||||
|
||||
func (rs Resolvers) ResetConnection() {
|
||||
rs.Resolver.ResetConnection()
|
||||
rs.ProxyResolver.ResetConnection()
|
||||
rs.DirectResolver.ResetConnection()
|
||||
}
|
||||
|
||||
func NewResolver(config Config) (rs Resolvers) {
|
||||
defaultResolver := &Resolver{
|
||||
main: transform(config.Default, nil),
|
||||
cache: config.newCache(),
|
||||
@@ -480,7 +500,7 @@ func NewResolver(config Config) (r *Resolver, pr *Resolver) {
|
||||
return
|
||||
}
|
||||
|
||||
r = &Resolver{
|
||||
r := &Resolver{
|
||||
ipv6: config.IPv6,
|
||||
main: cacheTransform(config.Main),
|
||||
cache: config.newCache(),
|
||||
@@ -488,9 +508,10 @@ func NewResolver(config Config) (r *Resolver, pr *Resolver) {
|
||||
ipv6Timeout: time.Duration(config.IPv6Timeout) * time.Millisecond,
|
||||
}
|
||||
r.defaultResolver = defaultResolver
|
||||
rs.Resolver = r
|
||||
|
||||
if len(config.ProxyServer) != 0 {
|
||||
pr = &Resolver{
|
||||
rs.ProxyResolver = &Resolver{
|
||||
ipv6: config.IPv6,
|
||||
main: cacheTransform(config.ProxyServer),
|
||||
cache: config.newCache(),
|
||||
@@ -499,8 +520,20 @@ func NewResolver(config Config) (r *Resolver, pr *Resolver) {
|
||||
}
|
||||
}
|
||||
|
||||
if len(config.DirectServer) != 0 {
|
||||
rs.DirectResolver = &Resolver{
|
||||
ipv6: config.IPv6,
|
||||
main: cacheTransform(config.DirectServer),
|
||||
cache: config.newCache(),
|
||||
hosts: config.Hosts,
|
||||
ipv6Timeout: time.Duration(config.IPv6Timeout) * time.Millisecond,
|
||||
}
|
||||
}
|
||||
|
||||
if len(config.Fallback) != 0 {
|
||||
r.fallback = cacheTransform(config.Fallback)
|
||||
r.fallbackIPFilters = config.FallbackIPFilter
|
||||
r.fallbackDomainFilters = config.FallbackDomainFilter
|
||||
}
|
||||
|
||||
if len(config.Policy) != 0 {
|
||||
@@ -529,9 +562,11 @@ func NewResolver(config Config) (r *Resolver, pr *Resolver) {
|
||||
}
|
||||
}
|
||||
insertPolicy(nil)
|
||||
|
||||
if rs.DirectResolver != nil && config.DirectFollowPolicy {
|
||||
rs.DirectResolver.policy = r.policy
|
||||
}
|
||||
}
|
||||
r.fallbackIPFilters = config.FallbackIPFilter
|
||||
r.fallbackDomainFilters = config.FallbackDomainFilter
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user