diff --git a/dns/enhancer.go b/dns/enhancer.go index 0661362f..9cf3e194 100644 --- a/dns/enhancer.go +++ b/dns/enhancer.go @@ -10,6 +10,7 @@ import ( ) type ResolverEnhancer struct { + ipv6 bool mode C.DNSMode fakeIPPool *fakeip.Pool fakeIPPool6 *fakeip.Pool @@ -169,6 +170,7 @@ type EnhancerConfig struct { func NewEnhancer(cfg EnhancerConfig) *ResolverEnhancer { e := &ResolverEnhancer{ + ipv6: cfg.IPv6, mode: cfg.EnhancedMode, useHosts: cfg.UseHosts, } diff --git a/dns/middleware.go b/dns/middleware.go index 180cf00e..55060332 100644 --- a/dns/middleware.go +++ b/dns/middleware.go @@ -196,14 +196,14 @@ func withFakeIP(skipper *fakeip.Skipper, fakePool *fakeip.Pool, fakePool6 *fakei } } -func withResolver(resolver *Resolver) handler { +func withResolver(resolver resolver.Resolver, ipv6 bool) handler { return func(ctx *icontext.DNSContext, r *D.Msg) (*D.Msg, error) { ctx.SetType(icontext.DNSTypeRaw) q := r.Question[0] // return a empty AAAA msg when ipv6 disabled - if !resolver.ipv6 && q.Qtype == D.TypeAAAA { + if !ipv6 && q.Qtype == D.TypeAAAA { return handleMsgWithEmptyAnswer(r), nil } @@ -230,7 +230,7 @@ func compose(middlewares []middleware, endpoint handler) handler { return h } -func newHandler(resolver *Resolver, mapper *ResolverEnhancer) handler { +func newHandler(resolver resolver.Resolver, mapper *ResolverEnhancer) handler { var middlewares []middleware if mapper.useHosts { @@ -245,5 +245,5 @@ func newHandler(resolver *Resolver, mapper *ResolverEnhancer) handler { middlewares = append(middlewares, withMapping(mapper.mapping)) } - return compose(middlewares, withResolver(resolver)) + return compose(middlewares, withResolver(resolver, mapper.ipv6)) } diff --git a/dns/service.go b/dns/service.go index 4a7c1bb2..f36aac89 100644 --- a/dns/service.go +++ b/dns/service.go @@ -24,6 +24,6 @@ func (s *Service) ServeMsg(ctx context.Context, msg *D.Msg) (*D.Msg, error) { var _ resolver.Service = (*Service)(nil) -func NewService(resolver *Resolver, mapper *ResolverEnhancer) *Service { +func NewService(resolver resolver.Resolver, mapper *ResolverEnhancer) *Service { return &Service{handler: newHandler(resolver, mapper)} } diff --git a/hub/executor/executor.go b/hub/executor/executor.go index ed857ed3..0ffb6c6b 100644 --- a/hub/executor/executor.go +++ b/hub/executor/executor.go @@ -280,7 +280,7 @@ func updateDNS(c *config.DNS, generalIPv6 bool) { m.PatchFrom(old.(*dns.ResolverEnhancer)) } - s := dns.NewService(r.Resolver, m) + s := dns.NewService(r, m) resolver.DefaultResolver = r resolver.DefaultHostMapper = m