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:
parent
05262d7b6b
commit
ff341bd7cf
|
@ -25,6 +25,7 @@ NOTE: Add new changes BELOW THIS COMMENT.
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
|
- The ability to set fallback DNS servers in the configuration file ([#3701]).
|
||||||
- While adding or updating blocklists, the title can now be parsed from
|
- While adding or updating blocklists, the title can now be parsed from
|
||||||
`! Title:` definition of the blocklist's source ([#6020]).
|
`! Title:` definition of the blocklist's source ([#6020]).
|
||||||
- The ability to filter DNS HTTPS records including IPv4/v6 hints ([#6053]).
|
- The ability to filter DNS HTTPS records including IPv4/v6 hints ([#6053]).
|
||||||
|
@ -70,6 +71,7 @@ In this release, the schema version has changed from 24 to 25.
|
||||||
([#5948]).
|
([#5948]).
|
||||||
|
|
||||||
[#1453]: https://github.com/AdguardTeam/AdGuardHome/issues/1453
|
[#1453]: https://github.com/AdguardTeam/AdGuardHome/issues/1453
|
||||||
|
[#3701]: https://github.com/AdguardTeam/AdGuardHome/issues/3701
|
||||||
[#5948]: https://github.com/AdguardTeam/AdGuardHome/issues/5948
|
[#5948]: https://github.com/AdguardTeam/AdGuardHome/issues/5948
|
||||||
[#6020]: https://github.com/AdguardTeam/AdGuardHome/issues/6020
|
[#6020]: https://github.com/AdguardTeam/AdGuardHome/issues/6020
|
||||||
[#6053]: https://github.com/AdguardTeam/AdGuardHome/issues/6053
|
[#6053]: https://github.com/AdguardTeam/AdGuardHome/issues/6053
|
||||||
|
|
|
@ -118,6 +118,9 @@ type FilteringConfig struct {
|
||||||
// resolvers (plain DNS only).
|
// resolvers (plain DNS only).
|
||||||
BootstrapDNS []string `yaml:"bootstrap_dns"`
|
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
|
// AllServers, if true, parallel queries to all configured upstream servers
|
||||||
// are enabled.
|
// are enabled.
|
||||||
AllServers bool `yaml:"all_servers"`
|
AllServers bool `yaml:"all_servers"`
|
||||||
|
|
|
@ -263,6 +263,7 @@ func (s *Server) WriteDiskConfig(c *FilteringConfig) {
|
||||||
*c = sc
|
*c = sc
|
||||||
c.RatelimitWhitelist = stringutil.CloneSlice(sc.RatelimitWhitelist)
|
c.RatelimitWhitelist = stringutil.CloneSlice(sc.RatelimitWhitelist)
|
||||||
c.BootstrapDNS = stringutil.CloneSlice(sc.BootstrapDNS)
|
c.BootstrapDNS = stringutil.CloneSlice(sc.BootstrapDNS)
|
||||||
|
c.FallbackDNS = stringutil.CloneSlice(sc.FallbackDNS)
|
||||||
c.AllowedClients = stringutil.CloneSlice(sc.AllowedClients)
|
c.AllowedClients = stringutil.CloneSlice(sc.AllowedClients)
|
||||||
c.DisallowedClients = stringutil.CloneSlice(sc.DisallowedClients)
|
c.DisallowedClients = stringutil.CloneSlice(sc.DisallowedClients)
|
||||||
c.BlockedHosts = stringutil.CloneSlice(sc.BlockedHosts)
|
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)
|
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.recDetector.clear()
|
||||||
|
|
||||||
s.setupAddrProc()
|
s.setupAddrProc()
|
||||||
|
@ -593,6 +599,28 @@ func (s *Server) Prepare(conf *ServerConfig) (err error) {
|
||||||
return nil
|
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.
|
// setupAddrProc initializes the address processor. For internal use only.
|
||||||
func (s *Server) setupAddrProc() {
|
func (s *Server) setupAddrProc() {
|
||||||
// TODO(a.garipov): This is a crutch for tests; remove.
|
// TODO(a.garipov): This is a crutch for tests; remove.
|
||||||
|
|
Loading…
Reference in New Issue