diff --git a/internal/dnsforward/clientid_internal_test.go b/internal/dnsforward/clientid_internal_test.go index 171e23c4..ec110f60 100644 --- a/internal/dnsforward/clientid_internal_test.go +++ b/internal/dnsforward/clientid_internal_test.go @@ -8,7 +8,6 @@ import ( "testing" "github.com/AdguardTeam/dnsproxy/proxy" - "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/testutil" "github.com/stretchr/testify/assert" ) @@ -201,7 +200,7 @@ func TestServer_clientIDFromDNSContext(t *testing.T) { srv := &Server{ conf: ServerConfig{TLSConf: tlsConf}, - baseLogger: slogutil.NewDiscardLogger(), + baseLogger: testLogger, } var ( diff --git a/internal/dnsforward/dnsforward_internal_test.go b/internal/dnsforward/dnsforward_internal_test.go index 88156b02..8263b63c 100644 --- a/internal/dnsforward/dnsforward_internal_test.go +++ b/internal/dnsforward/dnsforward_internal_test.go @@ -63,6 +63,9 @@ const ( // TODO(a.garipov): Use more. var testClientAddrPort = netip.MustParseAddrPort("1.2.3.4:12345") +// testLogger is the common logger for tests. +var testLogger = slogutil.NewDiscardLogger() + // type check var _ ClientsContainer = (*clientsContainer)(nil) @@ -129,6 +132,8 @@ func createTestServer( ) (s *Server) { t.Helper() + filterConf.Logger = cmp.Or(filterConf.Logger, testLogger) + rules := `||nxdomain.example.org ||NULL.example.org^ 127.0.0.1 host.example.org @@ -159,7 +164,7 @@ func createTestServer( DHCPServer: dhcp, DNSFilter: f, PrivateNets: netutil.SubnetSetFunc(netutil.IsLocallyServed), - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, }) require.NoError(t, err) @@ -410,7 +415,7 @@ func TestServer_timeout(t *testing.T) { s, err := NewServer(DNSCreateParams{ DNSFilter: createTestDNSFilter(t), - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, }) require.NoError(t, err) @@ -423,7 +428,7 @@ func TestServer_timeout(t *testing.T) { t.Run("default", func(t *testing.T) { s, err := NewServer(DNSCreateParams{ DNSFilter: createTestDNSFilter(t), - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, }) require.NoError(t, err) @@ -456,7 +461,7 @@ func TestServer_Prepare_fallbacks(t *testing.T) { } s, err := NewServer(DNSCreateParams{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, }) require.NoError(t, err) @@ -584,6 +589,7 @@ func TestSafeSearch(t *testing.T) { } filterConf := &filtering.Config{ + Logger: testLogger, BlockingMode: filtering.BlockingModeDefault, ProtectionEnabled: true, SafeSearchConf: safeSearchConf, @@ -593,7 +599,7 @@ func TestSafeSearch(t *testing.T) { ctx := testutil.ContextWithTimeout(t, testTimeout) safeSearch, err := safesearch.NewDefault(ctx, &safesearch.DefaultConfig{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, ServicesConfig: safeSearchConf, CacheSize: filterConf.SafeSearchCacheSize, CacheTTL: time.Minute * time.Duration(filterConf.CacheTime), @@ -1055,6 +1061,7 @@ func TestBlockedCustomIP(t *testing.T) { }} f, err := filtering.New(&filtering.Config{ + Logger: testLogger, ProtectionEnabled: true, ApplyClientFiltering: applyEmptyClientFiltering, BlockedServices: emptyFilteringBlockedServices(), @@ -1073,7 +1080,7 @@ func TestBlockedCustomIP(t *testing.T) { DHCPServer: dhcp, DNSFilter: f, PrivateNets: netutil.SubnetSetFunc(netutil.IsLocallyServed), - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, }) require.NoError(t, err) @@ -1173,7 +1180,7 @@ func TestBlockedBySafeBrowsing(t *testing.T) { ) sbChecker := hashprefix.New(&hashprefix.Config{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, CacheTime: cacheTime, CacheSize: cacheSize, Upstream: aghtest.NewBlockUpstream(hostname, true), @@ -1217,6 +1224,7 @@ func TestBlockedBySafeBrowsing(t *testing.T) { func TestRewrite(t *testing.T) { c := &filtering.Config{ + Logger: testLogger, ApplyClientFiltering: applyEmptyClientFiltering, BlockedServices: emptyFilteringBlockedServices(), BlockingMode: filtering.BlockingModeDefault, @@ -1248,7 +1256,7 @@ func TestRewrite(t *testing.T) { DHCPServer: dhcp, DNSFilter: f, PrivateNets: netutil.SubnetSetFunc(netutil.IsLocallyServed), - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, }) require.NoError(t, err) @@ -1366,6 +1374,7 @@ func TestPTRResponseFromDHCPLeases(t *testing.T) { const localDomain = "lan" flt, err := filtering.New(&filtering.Config{ + Logger: testLogger, ApplyClientFiltering: applyEmptyClientFiltering, BlockedServices: emptyFilteringBlockedServices(), BlockingMode: filtering.BlockingModeDefault, @@ -1382,7 +1391,7 @@ func TestPTRResponseFromDHCPLeases(t *testing.T) { }, }, PrivateNets: netutil.SubnetSetFunc(netutil.IsLocallyServed), - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, LocalDomain: localDomain, }) require.NoError(t, err) @@ -1458,6 +1467,7 @@ func TestPTRResponseFromHosts(t *testing.T) { }) flt, err := filtering.New(&filtering.Config{ + Logger: testLogger, ApplyClientFiltering: applyEmptyClientFiltering, BlockedServices: emptyFilteringBlockedServices(), BlockingMode: filtering.BlockingModeDefault, @@ -1472,7 +1482,7 @@ func TestPTRResponseFromHosts(t *testing.T) { DHCPServer: dhcp, DNSFilter: flt, PrivateNets: netutil.SubnetSetFunc(netutil.IsLocallyServed), - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, }) require.NoError(t, err) @@ -1528,27 +1538,27 @@ func TestNewServer(t *testing.T) { }{{ name: "success", in: DNSCreateParams{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, }, wantErrMsg: "", }, { name: "success_local_tld", in: DNSCreateParams{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, LocalDomain: "mynet", }, wantErrMsg: "", }, { name: "success_local_domain", in: DNSCreateParams{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, LocalDomain: "my.local.net", }, wantErrMsg: "", }, { name: "bad_local_domain", in: DNSCreateParams{ - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, LocalDomain: "!!!", }, wantErrMsg: `local domain: bad domain name "!!!": ` + diff --git a/internal/dnsforward/filter_internal_test.go b/internal/dnsforward/filter_internal_test.go index b14df3f2..8a07b4f1 100644 --- a/internal/dnsforward/filter_internal_test.go +++ b/internal/dnsforward/filter_internal_test.go @@ -9,7 +9,6 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/filtering" "github.com/AdguardTeam/dnsproxy/proxy" "github.com/AdguardTeam/dnsproxy/upstream" - "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/netutil" "github.com/miekg/dns" "github.com/stretchr/testify/assert" @@ -46,6 +45,7 @@ func TestHandleDNSRequest_handleDNSRequest(t *testing.T) { }} f, err := filtering.New(&filtering.Config{ + Logger: testLogger, ProtectionEnabled: true, ApplyClientFiltering: applyEmptyClientFiltering, BlockedServices: emptyFilteringBlockedServices(), @@ -62,7 +62,7 @@ func TestHandleDNSRequest_handleDNSRequest(t *testing.T) { }, DNSFilter: f, PrivateNets: netutil.SubnetSetFunc(netutil.IsLocallyServed), - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, }) require.NoError(t, err) @@ -226,7 +226,9 @@ func TestHandleDNSRequest_filterDNSResponse(t *testing.T) { ID: 0, Data: []byte(blockRules), }} - f, err := filtering.New(&filtering.Config{}, filters) + f, err := filtering.New(&filtering.Config{ + Logger: testLogger, + }, filters) require.NoError(t, err) f.SetEnabled(true) @@ -235,7 +237,7 @@ func TestHandleDNSRequest_filterDNSResponse(t *testing.T) { DHCPServer: &testDHCP{}, DNSFilter: f, PrivateNets: netutil.SubnetSetFunc(netutil.IsLocallyServed), - Logger: slogutil.NewDiscardLogger(), + Logger: testLogger, }) require.NoError(t, err) diff --git a/internal/dnsforward/ipset_internal_test.go b/internal/dnsforward/ipset_internal_test.go index 09601ac6..90c200d0 100644 --- a/internal/dnsforward/ipset_internal_test.go +++ b/internal/dnsforward/ipset_internal_test.go @@ -6,7 +6,6 @@ import ( "testing" "github.com/AdguardTeam/dnsproxy/proxy" - "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/miekg/dns" "github.com/stretchr/testify/assert" ) @@ -61,7 +60,7 @@ func TestIpsetCtx_process(t *testing.T) { } ictx := &ipsetHandler{ - logger: slogutil.NewDiscardLogger(), + logger: testLogger, } rc := ictx.process(dctx) assert.Equal(t, resultCodeSuccess, rc) @@ -83,7 +82,7 @@ func TestIpsetCtx_process(t *testing.T) { m := &fakeIpsetMgr{} ictx := &ipsetHandler{ ipsetMgr: m, - logger: slogutil.NewDiscardLogger(), + logger: testLogger, } rc := ictx.process(dctx) @@ -108,7 +107,7 @@ func TestIpsetCtx_process(t *testing.T) { m := &fakeIpsetMgr{} ictx := &ipsetHandler{ ipsetMgr: m, - logger: slogutil.NewDiscardLogger(), + logger: testLogger, } rc := ictx.process(dctx) @@ -132,7 +131,7 @@ func TestIpsetCtx_SkipIpsetProcessing(t *testing.T) { m := &fakeIpsetMgr{} ictx := &ipsetHandler{ ipsetMgr: m, - logger: slogutil.NewDiscardLogger(), + logger: testLogger, } testCases := []struct { diff --git a/internal/dnsforward/process_internal_test.go b/internal/dnsforward/process_internal_test.go index 71a91fdd..8b335832 100644 --- a/internal/dnsforward/process_internal_test.go +++ b/internal/dnsforward/process_internal_test.go @@ -12,7 +12,6 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/filtering" "github.com/AdguardTeam/dnsproxy/proxy" "github.com/AdguardTeam/dnsproxy/upstream" - "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/netutil" "github.com/AdguardTeam/golibs/testutil" "github.com/AdguardTeam/urlfilter/rules" @@ -378,6 +377,7 @@ func createTestDNSFilter(t *testing.T) (f *filtering.DNSFilter) { t.Helper() f, err := filtering.New(&filtering.Config{ + Logger: testLogger, BlockingMode: filtering.BlockingModeDefault, }, []filtering.Filter{}) require.NoError(t, err) @@ -439,7 +439,7 @@ func TestServer_ProcessDHCPHosts_localRestriction(t *testing.T) { dnsFilter: createTestDNSFilter(t), dhcpServer: dhcp, localDomainSuffix: localDomainSuffix, - baseLogger: slogutil.NewDiscardLogger(), + baseLogger: testLogger, } req := &dns.Msg{ @@ -591,7 +591,7 @@ func TestServer_ProcessDHCPHosts(t *testing.T) { dnsFilter: createTestDNSFilter(t), dhcpServer: testDHCP, localDomainSuffix: tc.suffix, - baseLogger: slogutil.NewDiscardLogger(), + baseLogger: testLogger, } req := (&dns.Msg{}).SetQuestion(dns.Fqdn(tc.host), tc.qtyp) diff --git a/internal/dnsforward/stats_internal_test.go b/internal/dnsforward/stats_internal_test.go index 6e4d5d86..301f8c8b 100644 --- a/internal/dnsforward/stats_internal_test.go +++ b/internal/dnsforward/stats_internal_test.go @@ -11,7 +11,6 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/stats" "github.com/AdguardTeam/dnsproxy/proxy" "github.com/AdguardTeam/dnsproxy/upstream" - "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/miekg/dns" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -203,7 +202,7 @@ func TestServer_ProcessQueryLogsAndStats(t *testing.T) { ql := &testQueryLog{} st := &testStats{} srv := &Server{ - baseLogger: slogutil.NewDiscardLogger(), + baseLogger: testLogger, queryLog: ql, stats: st, anonymizer: aghnet.NewIPMut(nil), diff --git a/internal/filtering/dnsrewrite_test.go b/internal/filtering/dnsrewrite_test.go index 89b6b30d..58353a43 100644 --- a/internal/filtering/dnsrewrite_test.go +++ b/internal/filtering/dnsrewrite_test.go @@ -6,6 +6,7 @@ import ( "testing" "github.com/AdguardTeam/AdGuardHome/internal/filtering" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/netutil" "github.com/miekg/dns" "github.com/stretchr/testify/assert" @@ -52,6 +53,7 @@ func TestDNSFilter_CheckHostRules_dnsrewrite(t *testing.T) { ` conf := &filtering.Config{ + Logger: slogutil.NewDiscardLogger(), SafeBrowsingCacheSize: 10000, ParentalCacheSize: 10000, SafeSearchCacheSize: 1000, diff --git a/internal/filtering/filter_internal_test.go b/internal/filtering/filter_internal_test.go index 8cfcdef9..5630a82b 100644 --- a/internal/filtering/filter_internal_test.go +++ b/internal/filtering/filter_internal_test.go @@ -9,6 +9,7 @@ import ( "testing" "time" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/netutil/urlutil" "github.com/AdguardTeam/golibs/testutil" "github.com/stretchr/testify/assert" @@ -84,6 +85,7 @@ func newDNSFilter(t *testing.T) (d *DNSFilter) { t.Helper() dnsFilter, err := New(&Config{ + Logger: slogutil.NewDiscardLogger(), DataDir: t.TempDir(), HTTPClient: &http.Client{ Timeout: testTimeout, diff --git a/internal/filtering/filtering.go b/internal/filtering/filtering.go index df65308f..de45485a 100644 --- a/internal/filtering/filtering.go +++ b/internal/filtering/filtering.go @@ -5,6 +5,7 @@ import ( "context" "fmt" "io/fs" + "log/slog" "net" "net/http" "net/netip" @@ -70,6 +71,10 @@ type Resolver interface { // Config allows you to configure DNS filtering with New() or just change variables directly. type Config struct { + // logger is used to log the operations of DNS filtering. It must not be + // nil. + Logger *slog.Logger `yaml:"-"` + // BlockingIPv4 is the IP address to be returned for a blocked A request. BlockingIPv4 netip.Addr `yaml:"blocking_ipv4"` @@ -235,6 +240,9 @@ type Checker interface { // DNSFilter matches hostnames and DNS requests against filtering rules. type DNSFilter struct { + // logger is used for logging the filtering process. + logger *slog.Logger + // idGen is used to generate IDs for package urlfilter. idGen *idGenerator @@ -1009,6 +1017,7 @@ func InitModule() { // be non-nil. func New(c *Config, blockFilters []Filter) (d *DNSFilter, err error) { d = &DNSFilter{ + logger: c.Logger, idGen: newIDGenerator(int32(time.Now().Unix())), bufPool: syncutil.NewSlicePool[byte](rulelist.DefaultRuleBufSize), safeSearch: c.SafeSearch, diff --git a/internal/filtering/filtering_internal_test.go b/internal/filtering/filtering_internal_test.go index 8470d4e3..7ec5d835 100644 --- a/internal/filtering/filtering_internal_test.go +++ b/internal/filtering/filtering_internal_test.go @@ -35,6 +35,7 @@ func newForTest(t testing.TB, c *Config, filters []Filter) (f *DNSFilter, setts FilteringEnabled: true, } if c != nil { + c.Logger = slogutil.NewDiscardLogger() c.SafeBrowsingCacheSize = 10000 c.ParentalCacheSize = 10000 c.SafeSearchCacheSize = 1000 @@ -44,7 +45,9 @@ func newForTest(t testing.TB, c *Config, filters []Filter) (f *DNSFilter, setts setts.ParentalEnabled = c.ParentalEnabled } else { // It must not be nil. - c = &Config{} + c = &Config{ + Logger: slogutil.NewDiscardLogger(), + } } f, err := New(c, filters) require.NoError(t, err) @@ -665,6 +668,7 @@ func TestClientSettings(t *testing.T) { func BenchmarkSafeBrowsing(b *testing.B) { d, setts := newForTest(b, &Config{ + Logger: slogutil.NewDiscardLogger(), SafeBrowsingEnabled: true, SafeBrowsingChecker: newChecker(sbBlocked), }, nil) @@ -691,6 +695,7 @@ func BenchmarkSafeBrowsing(b *testing.B) { func BenchmarkSafeBrowsing_parallel(b *testing.B) { d, setts := newForTest(b, &Config{ + Logger: slogutil.NewDiscardLogger(), SafeBrowsingEnabled: true, SafeBrowsingChecker: newChecker(sbBlocked), }, nil) diff --git a/internal/filtering/hosts_test.go b/internal/filtering/hosts_test.go index 14e20adc..5c692814 100644 --- a/internal/filtering/hosts_test.go +++ b/internal/filtering/hosts_test.go @@ -10,6 +10,7 @@ import ( "github.com/AdguardTeam/AdGuardHome/internal/aghtest" "github.com/AdguardTeam/AdGuardHome/internal/filtering" "github.com/AdguardTeam/AdGuardHome/internal/filtering/rulelist" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/testutil" "github.com/AdguardTeam/urlfilter/rules" "github.com/miekg/dns" @@ -52,6 +53,7 @@ func TestDNSFilter_CheckHost_hostsContainer(t *testing.T) { testutil.CleanupAndRequireSuccess(t, hc.Close) conf := &filtering.Config{ + Logger: slogutil.NewDiscardLogger(), EtcHosts: hc, } f, err := filtering.New(conf, nil) diff --git a/internal/filtering/http_internal_test.go b/internal/filtering/http_internal_test.go index a46d5d7b..4d45e254 100644 --- a/internal/filtering/http_internal_test.go +++ b/internal/filtering/http_internal_test.go @@ -12,6 +12,7 @@ import ( "time" "github.com/AdguardTeam/AdGuardHome/internal/schedule" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/testutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -103,6 +104,7 @@ func TestDNSFilter_handleFilteringSetURL(t *testing.T) { t.Run(tc.name, func(t *testing.T) { confModifiedCalled := false d, err := New(&Config{ + Logger: slogutil.NewDiscardLogger(), FilteringEnabled: true, Filters: tc.initial, HTTPClient: &http.Client{ @@ -183,6 +185,7 @@ func TestDNSFilter_handleSafeBrowsingStatus(t *testing.T) { handlers := make(map[string]http.Handler) d, err := New(&Config{ + Logger: slogutil.NewDiscardLogger(), ConfigModified: func() { testutil.RequireSend(testutil.PanicT{}, confModCh, struct{}{}, testTimeout) }, @@ -267,6 +270,7 @@ func TestDNSFilter_handleParentalStatus(t *testing.T) { handlers := make(map[string]http.Handler) d, err := New(&Config{ + Logger: slogutil.NewDiscardLogger(), ConfigModified: func() { testutil.RequireSend(testutil.PanicT{}, confModCh, struct{}{}, testTimeout) }, @@ -370,6 +374,7 @@ func TestDNSFilter_HandleCheckHost(t *testing.T) { } dnsFilter, err := New(&Config{ + Logger: slogutil.NewDiscardLogger(), BlockedServices: &BlockedServices{ Schedule: schedule.EmptyWeekly(), }, diff --git a/internal/filtering/rewritehttp_test.go b/internal/filtering/rewritehttp_test.go index 93eef85a..b95435b8 100644 --- a/internal/filtering/rewritehttp_test.go +++ b/internal/filtering/rewritehttp_test.go @@ -10,6 +10,7 @@ import ( "time" "github.com/AdguardTeam/AdGuardHome/internal/filtering" + "github.com/AdguardTeam/golibs/logutil/slogutil" "github.com/AdguardTeam/golibs/testutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -159,6 +160,7 @@ func TestDNSFilter_handleRewriteHTTP(t *testing.T) { handlers := make(map[string]http.Handler) d, err := filtering.New(&filtering.Config{ + Logger: slogutil.NewDiscardLogger(), ConfigModified: onConfModified, HTTPRegister: func(_, url string, handler http.HandlerFunc) { handlers[url] = handler diff --git a/internal/home/clients_internal_test.go b/internal/home/clients_internal_test.go index 899ead65..8bbfd185 100644 --- a/internal/home/clients_internal_test.go +++ b/internal/home/clients_internal_test.go @@ -26,7 +26,9 @@ func newClientsContainer(t *testing.T) (c *clientsContainer) { client.EmptyDHCP{}, nil, nil, - &filtering.Config{}, + &filtering.Config{ + Logger: testLogger, + }, newSignalHandler(nil, nil), ) diff --git a/internal/home/config.go b/internal/home/config.go index 2ec549d3..fef3d9ad 100644 --- a/internal/home/config.go +++ b/internal/home/config.go @@ -3,6 +3,7 @@ package home import ( "bytes" "fmt" + "log/slog" "net/netip" "os" "path/filepath" @@ -518,6 +519,7 @@ var config = &configuration{ Name: "AdAway Default Blocklist", }}, Filtering: &filtering.Config{ + Logger: slog.Default(), ProtectionEnabled: true, BlockingMode: filtering.BlockingModeDefault, BlockedResponseTTL: 10, // in seconds diff --git a/internal/home/controlinstall.go b/internal/home/controlinstall.go index 6e52f80a..602b0f64 100644 --- a/internal/home/controlinstall.go +++ b/internal/home/controlinstall.go @@ -431,6 +431,7 @@ func (web *webAPI) handleInstallConfigure(w http.ResponseWriter, r *http.Request globalContext.firstRun = false config.DNS.BindHosts = []netip.Addr{req.DNS.IP} config.DNS.Port = req.DNS.Port + config.Filtering.Logger = web.baseLogger.With(slogutil.KeyPrefix, "filtering") config.Filtering.SafeFSPatterns = []string{ filepath.Join(globalContext.workDir, userFilterDataDir, "*"), } diff --git a/internal/home/home.go b/internal/home/home.go index ef8cc1b4..e693fcd3 100644 --- a/internal/home/home.go +++ b/internal/home/home.go @@ -366,6 +366,8 @@ func setupDNSFilteringConf( pcTXTSuffix = `pc.dns.adguard.com.` ) + conf.Logger = baseLogger.With(slogutil.KeyPrefix, "filtering") + conf.EtcHosts = globalContext.etcHosts // TODO(s.chzhen): Use empty interface. if globalContext.etcHosts == nil || !config.DNS.HostsFileEnabled {