From 9b8cccdfcfb98b21493dcde503240b724f5c08ae Mon Sep 17 00:00:00 2001 From: Simon Zolin Date: Thu, 31 Oct 2019 12:32:14 +0300 Subject: [PATCH] * dnsforward: refactor code for default DNS servers logic --- dnsforward/dnsforward.go | 65 +++++++++++++++++++---------------- dnsforward/dnsforward_http.go | 21 ++--------- dnsforward/dnsforward_test.go | 4 +-- home/config.go | 14 -------- 4 files changed, 39 insertions(+), 65 deletions(-) diff --git a/dnsforward/dnsforward.go b/dnsforward/dnsforward.go index 73975d78..7efb38e1 100644 --- a/dnsforward/dnsforward.go +++ b/dnsforward/dnsforward.go @@ -29,6 +29,12 @@ const ( parentalBlockHost = "family-block.dns.adguard.com" ) +var defaultDNS = []string{ + "https://1.1.1.1/dns-query", + "https://1.0.0.1/dns-query", +} +var defaultBootstrap = []string{"1.1.1.1", "1.0.0.1"} + // Server is the main way to start a DNS server. // // Example: @@ -59,6 +65,11 @@ func NewServer(dnsFilter *dnsfilter.Dnsfilter, stats stats.Stats, queryLog query s.dnsFilter = dnsFilter s.stats = stats s.queryLog = queryLog + + if runtime.GOARCH == "mips" || runtime.GOARCH == "mipsle" { + // Use plain DNS on MIPS, encryption is too slow + defaultDNS = []string{"1.1.1.1", "1.0.0.1"} + } return s } @@ -149,19 +160,6 @@ var defaultValues = ServerConfig{ FilteringConfig: FilteringConfig{BlockedResponseTTL: 3600}, } -func init() { - defaultDNS := []string{"8.8.8.8:53", "8.8.4.4:53"} - - defaultUpstreams := make([]upstream.Upstream, 0) - for _, addr := range defaultDNS { - u, err := upstream.AddressToUpstream(addr, upstream.Options{Timeout: DefaultTimeout}) - if err == nil { - defaultUpstreams = append(defaultUpstreams, u) - } - } - defaultValues.Upstreams = defaultUpstreams -} - // Start starts the DNS server func (s *Server) Start(config *ServerConfig) error { s.Lock() @@ -177,20 +175,34 @@ func (s *Server) startInternal(config *ServerConfig) error { if config != nil { s.conf = *config - upstreamConfig, err := proxy.ParseUpstreamsConfig(s.conf.UpstreamDNS, s.conf.BootstrapDNS, DefaultTimeout) - if err != nil { - return fmt.Errorf("DNS: proxy.ParseUpstreamsConfig: %s", err) - } - s.conf.Upstreams = upstreamConfig.Upstreams - s.conf.DomainsReservedUpstreams = upstreamConfig.DomainReservedUpstreams - } + + if len(s.conf.UpstreamDNS) == 0 { + s.conf.UpstreamDNS = defaultDNS + } + if len(s.conf.BootstrapDNS) == 0 { + s.conf.BootstrapDNS = defaultBootstrap + } + + upstreamConfig, err := proxy.ParseUpstreamsConfig(s.conf.UpstreamDNS, s.conf.BootstrapDNS, DefaultTimeout) + if err != nil { + return fmt.Errorf("DNS: proxy.ParseUpstreamsConfig: %s", err) + } + s.conf.Upstreams = upstreamConfig.Upstreams + s.conf.DomainsReservedUpstreams = upstreamConfig.DomainReservedUpstreams + if len(s.conf.ParentalBlockHost) == 0 { s.conf.ParentalBlockHost = parentalBlockHost } if len(s.conf.SafeBrowsingBlockHost) == 0 { s.conf.SafeBrowsingBlockHost = safeBrowsingBlockHost } + if s.conf.UDPListenAddr == nil { + s.conf.UDPListenAddr = defaultValues.UDPListenAddr + } + if s.conf.TCPListenAddr == nil { + s.conf.TCPListenAddr = defaultValues.TCPListenAddr + } proxyConfig := proxy.Config{ UDPListenAddr: s.conf.UDPListenAddr, @@ -208,7 +220,7 @@ func (s *Server) startInternal(config *ServerConfig) error { } s.access = &accessCtx{} - err := s.access.Init(s.conf.AllowedClients, s.conf.DisallowedClients, s.conf.BlockedHosts) + err = s.access.Init(s.conf.AllowedClients, s.conf.DisallowedClients, s.conf.BlockedHosts) if err != nil { return err } @@ -225,16 +237,8 @@ func (s *Server) startInternal(config *ServerConfig) error { } } - if proxyConfig.UDPListenAddr == nil { - proxyConfig.UDPListenAddr = defaultValues.UDPListenAddr - } - - if proxyConfig.TCPListenAddr == nil { - proxyConfig.TCPListenAddr = defaultValues.TCPListenAddr - } - if len(proxyConfig.Upstreams) == 0 { - proxyConfig.Upstreams = defaultValues.Upstreams + log.Fatal("len(proxyConfig.Upstreams) == 0") } if !s.webRegistered && s.conf.HTTPRegister != nil { @@ -300,6 +304,7 @@ func (s *Server) Reconfigure2(newconf FilteringConfig) error { return nil } +// Reconfigure applies the new configuration to the DNS server func (s *Server) Reconfigure(config *ServerConfig) error { s.Lock() defer s.Unlock() diff --git a/dnsforward/dnsforward_http.go b/dnsforward/dnsforward_http.go index 13a9a68d..467cabf4 100644 --- a/dnsforward/dnsforward_http.go +++ b/dnsforward/dnsforward_http.go @@ -5,7 +5,6 @@ import ( "fmt" "net" "net/http" - "runtime" "strconv" "strings" @@ -15,12 +14,6 @@ import ( "github.com/miekg/dns" ) -var defaultDNS = []string{ - "https://1.1.1.1/dns-query", - "https://1.0.0.1/dns-query", -} -var defaultBootstrap = []string{"1.1.1.1", "1.0.0.1"} - func httpError(r *http.Request, w http.ResponseWriter, code int, format string, args ...interface{}) { text := fmt.Sprintf(format, args...) log.Info("DNS: %s %s: %s", r.Method, r.URL, text) @@ -58,14 +51,7 @@ func (s *Server) handleSetUpstreamConfig(w http.ResponseWriter, r *http.Request) } newconf := FilteringConfig{} - newconf.UpstreamDNS = defaultDNS - if runtime.GOARCH == "mips" || runtime.GOARCH == "mipsle" { - // Use plain DNS on MIPS, encryption is too slow - newconf.UpstreamDNS = []string{"1.1.1.1", "1.0.0.1"} - } - if len(req.Upstreams) != 0 { - newconf.UpstreamDNS = req.Upstreams - } + newconf.UpstreamDNS = req.Upstreams // bootstrap servers are plain DNS only for _, host := range req.BootstrapDNS { @@ -74,10 +60,7 @@ func (s *Server) handleSetUpstreamConfig(w http.ResponseWriter, r *http.Request) return } } - newconf.BootstrapDNS = defaultBootstrap - if len(req.BootstrapDNS) != 0 { - newconf.BootstrapDNS = req.BootstrapDNS - } + newconf.BootstrapDNS = req.BootstrapDNS newconf.AllServers = req.AllServers err = s.Reconfigure2(newconf) diff --git a/dnsforward/dnsforward_test.go b/dnsforward/dnsforward_test.go index 9c4ee218..f05934f6 100644 --- a/dnsforward/dnsforward_test.go +++ b/dnsforward/dnsforward_test.go @@ -16,8 +16,8 @@ import ( "github.com/AdguardTeam/AdGuardHome/dnsfilter" "github.com/AdguardTeam/dnsproxy/proxy" - "github.com/likexian/gokit/assert" "github.com/miekg/dns" + "github.com/stretchr/testify/assert" ) const ( @@ -391,7 +391,7 @@ func createTestServer(t *testing.T) *Server { s := NewServer(f, nil, nil) s.conf.UDPListenAddr = &net.UDPAddr{Port: 0} s.conf.TCPListenAddr = &net.TCPAddr{Port: 0} - + s.conf.UpstreamDNS = []string{"8.8.8.8:53", "8.8.4.4:53"} s.conf.FilteringConfig.ProtectionEnabled = true return s } diff --git a/home/config.go b/home/config.go index c63db20f..09428db8 100644 --- a/home/config.go +++ b/home/config.go @@ -5,7 +5,6 @@ import ( "net/http" "os" "path/filepath" - "runtime" "sync" "time" @@ -115,12 +114,6 @@ type dnsConfig struct { DnsfilterConf dnsfilter.Config `yaml:",inline"` } -var defaultDNS = []string{ - "https://1.1.1.1/dns-query", - "https://1.0.0.1/dns-query", -} -var defaultBootstrap = []string{"1.1.1.1", "1.0.0.1"} - type tlsConfigSettings struct { Enabled bool `yaml:"enabled" json:"enabled"` // Enabled is the encryption (DOT/DOH/HTTPS) status ServerName string `yaml:"server_name" json:"server_name,omitempty"` // ServerName is the hostname of your HTTPS/TLS server @@ -205,13 +198,6 @@ func initConfig() { config.WebSessionTTLHours = 30 * 24 - config.DNS.UpstreamDNS = defaultDNS - if runtime.GOARCH == "mips" || runtime.GOARCH == "mipsle" { - // Use plain DNS on MIPS, encryption is too slow - config.DNS.UpstreamDNS = []string{"1.1.1.1", "1.0.0.1"} - } - - config.DNS.BootstrapDNS = defaultBootstrap config.DNS.CacheSize = 4 * 1024 * 1024 config.DNS.DnsfilterConf.SafeBrowsingCacheSize = 1 * 1024 * 1024 config.DNS.DnsfilterConf.SafeSearchCacheSize = 1 * 1024 * 1024