diff --git a/dns/client.go b/dns/client.go index d7f36e2e..27d8a027 100644 --- a/dns/client.go +++ b/dns/client.go @@ -34,6 +34,7 @@ type Client struct { disableCache bool disableExpire bool independentCache bool + clientSubnet netip.Prefix rdrc adapter.RDRCStore initRDRCFunc func() adapter.RDRCStore logger logger.ContextLogger @@ -47,6 +48,7 @@ type ClientOptions struct { DisableExpire bool IndependentCache bool CacheCapacity uint32 + ClientSubnet netip.Prefix RDRC func() adapter.RDRCStore Logger logger.ContextLogger } @@ -57,6 +59,7 @@ func NewClient(options ClientOptions) *Client { disableCache: options.DisableCache, disableExpire: options.DisableExpire, independentCache: options.IndependentCache, + clientSubnet: options.ClientSubnet, initRDRCFunc: options.RDRC, logger: options.Logger, } @@ -104,8 +107,12 @@ func (c *Client) Exchange(ctx context.Context, transport adapter.DNSTransport, m return &responseMessage, nil } question := message.Question[0] - if options.ClientSubnet.IsValid() { - message = SetClientSubnet(message, options.ClientSubnet) + clientSubnet := options.ClientSubnet + if !clientSubnet.IsValid() { + clientSubnet = c.clientSubnet + } + if clientSubnet.IsValid() { + message = SetClientSubnet(message, clientSubnet) } isSimpleRequest := len(message.Question) == 1 && len(message.Ns) == 0 && diff --git a/dns/router.go b/dns/router.go index 899a484c..36b7bf05 100644 --- a/dns/router.go +++ b/dns/router.go @@ -55,6 +55,7 @@ func NewRouter(ctx context.Context, logFactory log.Factory, options option.DNSOp DisableExpire: options.DNSClientOptions.DisableExpire, IndependentCache: options.DNSClientOptions.IndependentCache, CacheCapacity: options.DNSClientOptions.CacheCapacity, + ClientSubnet: options.DNSClientOptions.ClientSubnet.Build(netip.Prefix{}), RDRC: func() adapter.RDRCStore { cacheFile := service.FromContext[adapter.CacheFile](ctx) if cacheFile == nil {