diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fc8b003..e3c03584 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,8 @@ NOTE: Add new changes BELOW THIS COMMENT. ### Added +- Ability to disable the use of system hosts file information for query + resolution ([#6610]). - Ability to define custom directories for storage of query log files and statistics ([#5992]). - Context menu item in the Query Log to add a Client to the Persistent client @@ -66,6 +68,7 @@ NOTE: Add new changes BELOW THIS COMMENT. - Go 1.20 support, as it has reached end of life. [#5992]: https://github.com/AdguardTeam/AdGuardHome/issues/5992 +[#6610]: https://github.com/AdguardTeam/AdGuardHome/issues/6610 [#6679]: https://github.com/AdguardTeam/AdGuardHome/issues/6679 [#6711]: https://github.com/AdguardTeam/AdGuardHome/issues/6711 diff --git a/internal/home/config.go b/internal/home/config.go index 17a5661d..1619d083 100644 --- a/internal/home/config.go +++ b/internal/home/config.go @@ -232,6 +232,10 @@ type dnsConfig struct { // ServePlainDNS defines if plain DNS is allowed for incoming requests. ServePlainDNS bool `yaml:"serve_plain_dns"` + + // HostsFileEnabled defines whether to use information from the system hosts + // file to resolve queries. + HostsFileEnabled bool `yaml:"hostsfile_enabled"` } type tlsConfigSettings struct { @@ -349,9 +353,10 @@ var config = &configuration{ // was later increased to 300 due to https://github.com/AdguardTeam/AdGuardHome/issues/2257 MaxGoroutines: 300, }, - UpstreamTimeout: timeutil.Duration{Duration: dnsforward.DefaultTimeout}, - UsePrivateRDNS: true, - ServePlainDNS: true, + UpstreamTimeout: timeutil.Duration{Duration: dnsforward.DefaultTimeout}, + UsePrivateRDNS: true, + ServePlainDNS: true, + HostsFileEnabled: true, }, TLS: tlsConfigSettings{ PortHTTPS: defaultPortHTTPS, diff --git a/internal/home/home.go b/internal/home/home.go index 22f6130c..90949f07 100644 --- a/internal/home/home.go +++ b/internal/home/home.go @@ -361,7 +361,7 @@ func setupDNSFilteringConf(conf *filtering.Config) (err error) { conf.EtcHosts = Context.etcHosts // TODO(s.chzhen): Use empty interface. - if Context.etcHosts == nil { + if Context.etcHosts == nil || !config.DNS.HostsFileEnabled { conf.EtcHosts = nil } diff --git a/internal/home/options.go b/internal/home/options.go index d32aaa1c..35f26303 100644 --- a/internal/home/options.go +++ b/internal/home/options.go @@ -270,15 +270,17 @@ var cmdLineOpts = []cmdLineOpt{{ log.Info( "warning: --no-etc-hosts flag is deprecated " + "and will be removed in the future versions; " + - "set clients.runtime_sources.hosts in the configuration file to false instead", + "set clients.runtime_sources.hosts and dns.hostsfile_enabled " + + "in the configuration file to false instead", ) return nil, nil }, - serialize: func(o options) (val string, ok bool) { return "", o.noEtcHosts }, - description: "Deprecated: use clients.runtime_sources.hosts instead. Do not use the OS-provided hosts.", - longName: "no-etc-hosts", - shortName: "", + serialize: func(o options) (val string, ok bool) { return "", o.noEtcHosts }, + description: "Deprecated: use clients.runtime_sources.hosts and dns.hostsfile_enabled " + + "instead. Do not use the OS-provided hosts.", + longName: "no-etc-hosts", + shortName: "", }, { updateWithValue: nil, updateNoValue: func(o options) (options, error) { o.localFrontend = true; return o, nil },