Pull request 1965: 3701-fallback-dns

Updates #3701.

Squashed commit of the following:

commit 5801acd3a919a55be6cb1de3b5c8afb61d5136d8
Author: Stanislav Chzhen <s.chzhen@adguard.com>
Date:   Mon Aug 21 13:37:57 2023 +0300

    all: upd chlog

commit 5c40913f76131854d321950f80ae9d5b78e56d9d
Author: Stanislav Chzhen <s.chzhen@adguard.com>
Date:   Thu Aug 17 13:15:19 2023 +0300

    dnsforward: add fallback dns servers
This commit is contained in:
Stanislav Chzhen
2023-08-21 19:34:02 +03:00
parent 05262d7b6b
commit ff341bd7cf
3 changed files with 33 additions and 0 deletions

View File

@@ -118,6 +118,9 @@ type FilteringConfig struct {
// resolvers (plain DNS only).
BootstrapDNS []string `yaml:"bootstrap_dns"`
// FallbackDNS is the list of fallback DNS servers.
FallbackDNS []string `yaml:"fallback_dns"`
// AllServers, if true, parallel queries to all configured upstream servers
// are enabled.
AllServers bool `yaml:"all_servers"`

View File

@@ -263,6 +263,7 @@ func (s *Server) WriteDiskConfig(c *FilteringConfig) {
*c = sc
c.RatelimitWhitelist = stringutil.CloneSlice(sc.RatelimitWhitelist)
c.BootstrapDNS = stringutil.CloneSlice(sc.BootstrapDNS)
c.FallbackDNS = stringutil.CloneSlice(sc.FallbackDNS)
c.AllowedClients = stringutil.CloneSlice(sc.AllowedClients)
c.DisallowedClients = stringutil.CloneSlice(sc.DisallowedClients)
c.BlockedHosts = stringutil.CloneSlice(sc.BlockedHosts)
@@ -584,6 +585,11 @@ func (s *Server) Prepare(conf *ServerConfig) (err error) {
return fmt.Errorf("setting up resolvers: %w", err)
}
err = s.setupFallbackDNS()
if err != nil {
return fmt.Errorf("setting up fallback dns servers: %w", err)
}
s.recDetector.clear()
s.setupAddrProc()
@@ -593,6 +599,28 @@ func (s *Server) Prepare(conf *ServerConfig) (err error) {
return nil
}
// setupFallbackDNS initializes the fallback DNS servers.
func (s *Server) setupFallbackDNS() (err error) {
fallbacks := s.conf.FallbackDNS
if len(fallbacks) == 0 {
return nil
}
uc, err := proxy.ParseUpstreamsConfig(fallbacks, &upstream.Options{
// TODO(s.chzhen): Investigate if other options are needed.
Timeout: s.conf.UpstreamTimeout,
PreferIPv6: s.conf.BootstrapPreferIPv6,
})
if err != nil {
// Do not wrap the error because it's informative enough as is.
return err
}
s.dnsProxy.Fallbacks = uc
return nil
}
// setupAddrProc initializes the address processor. For internal use only.
func (s *Server) setupAddrProc() {
// TODO(a.garipov): This is a crutch for tests; remove.