New feature: query_meta
This commit is contained in:
parent
6b1966b38f
commit
776e0d7ccc
|
@ -15,6 +15,8 @@ hashes.
|
||||||
- DoH servers on a non-standard port, with stamps that don't include
|
- DoH servers on a non-standard port, with stamps that don't include
|
||||||
IP addresses, and without working system resolvers can now be properly
|
IP addresses, and without working system resolvers can now be properly
|
||||||
bootstrapped.
|
bootstrapped.
|
||||||
|
- A new option, `query_meta`, is now available to add optional records
|
||||||
|
to client queries.
|
||||||
|
|
||||||
* Version 2.0.25
|
* Version 2.0.25
|
||||||
- The example IP address for network probes didn't work on Windows.
|
- The example IP address for network probes didn't work on Windows.
|
||||||
|
|
|
@ -82,6 +82,7 @@ type Config struct {
|
||||||
HTTPProxyURL string `toml:"http_proxy"`
|
HTTPProxyURL string `toml:"http_proxy"`
|
||||||
RefusedCodeInResponses bool `toml:"refused_code_in_responses"`
|
RefusedCodeInResponses bool `toml:"refused_code_in_responses"`
|
||||||
BlockedQueryResponse string `toml:"blocked_query_response"`
|
BlockedQueryResponse string `toml:"blocked_query_response"`
|
||||||
|
QueryMeta []string `toml:"query_meta"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func newConfig() Config {
|
func newConfig() Config {
|
||||||
|
@ -351,6 +352,8 @@ func ConfigLoad(proxy *Proxy, svcFlag *string) error {
|
||||||
proxy.cacheMinTTL = config.CacheMinTTL
|
proxy.cacheMinTTL = config.CacheMinTTL
|
||||||
proxy.cacheMaxTTL = config.CacheMaxTTL
|
proxy.cacheMaxTTL = config.CacheMaxTTL
|
||||||
|
|
||||||
|
proxy.queryMeta = config.QueryMeta
|
||||||
|
|
||||||
if len(config.QueryLog.Format) == 0 {
|
if len(config.QueryLog.Format) == 0 {
|
||||||
config.QueryLog.Format = "tsv"
|
config.QueryLog.Format = "tsv"
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -230,6 +230,14 @@ netprobe_address = '9.9.9.9:53'
|
||||||
# offline_mode = false
|
# offline_mode = false
|
||||||
|
|
||||||
|
|
||||||
|
## Additional data to attach to outgoing queries.
|
||||||
|
## These strings will be added as TXT records to queries.
|
||||||
|
## Do not use, except on servers explicitly asking for extra data
|
||||||
|
## to be present.
|
||||||
|
|
||||||
|
# query_meta = ["key1:value1", "key2:value2", "key3:value3"]
|
||||||
|
|
||||||
|
|
||||||
## Automatic log files rotation
|
## Automatic log files rotation
|
||||||
|
|
||||||
# Maximum log files size in MB
|
# Maximum log files size in MB
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/miekg/dns"
|
||||||
|
)
|
||||||
|
|
||||||
|
type PluginQueryMeta struct {
|
||||||
|
queryMetaRR *dns.TXT
|
||||||
|
}
|
||||||
|
|
||||||
|
func (plugin *PluginQueryMeta) Name() string {
|
||||||
|
return "query_log"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (plugin *PluginQueryMeta) Description() string {
|
||||||
|
return "Log DNS queries."
|
||||||
|
}
|
||||||
|
|
||||||
|
func (plugin *PluginQueryMeta) Init(proxy *Proxy) error {
|
||||||
|
queryMetaRR := new(dns.TXT)
|
||||||
|
queryMetaRR.Hdr = dns.RR_Header{Name: ".", Rrtype: dns.TypeTXT,
|
||||||
|
Class: dns.ClassINET, Ttl: 86400}
|
||||||
|
queryMetaRR.Txt = proxy.queryMeta
|
||||||
|
plugin.queryMetaRR = queryMetaRR
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (plugin *PluginQueryMeta) Drop() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (plugin *PluginQueryMeta) Reload() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (plugin *PluginQueryMeta) Eval(pluginsState *PluginsState, msg *dns.Msg) error {
|
||||||
|
questions := msg.Question
|
||||||
|
if len(questions) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
msg.Extra = []dns.RR{plugin.queryMetaRR}
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -83,6 +83,10 @@ type PluginsState struct {
|
||||||
|
|
||||||
func InitPluginsGlobals(pluginsGlobals *PluginsGlobals, proxy *Proxy) error {
|
func InitPluginsGlobals(pluginsGlobals *PluginsGlobals, proxy *Proxy) error {
|
||||||
queryPlugins := &[]Plugin{}
|
queryPlugins := &[]Plugin{}
|
||||||
|
|
||||||
|
if len(proxy.queryMeta) != 0 {
|
||||||
|
*queryPlugins = append(*queryPlugins, Plugin(new(PluginQueryMeta)))
|
||||||
|
}
|
||||||
if len(proxy.whitelistNameFile) != 0 {
|
if len(proxy.whitelistNameFile) != 0 {
|
||||||
*queryPlugins = append(*queryPlugins, Plugin(new(PluginWhitelistName)))
|
*queryPlugins = append(*queryPlugins, Plugin(new(PluginWhitelistName)))
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,6 +64,7 @@ type Proxy struct {
|
||||||
logMaxAge int
|
logMaxAge int
|
||||||
logMaxBackups int
|
logMaxBackups int
|
||||||
blockedQueryResponse string
|
blockedQueryResponse string
|
||||||
|
queryMeta []string
|
||||||
showCerts bool
|
showCerts bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue