From e7727e9f63bf87a86c7dd1f2c795b07ecb25822a Mon Sep 17 00:00:00 2001 From: Simon Zolin Date: Thu, 21 Nov 2019 16:13:19 +0300 Subject: [PATCH 1/4] + dnsforward: match CNAME with filtering rules + GET /control/querylog: add "cname_match" field * querylog: Add() now receives an object with parameters --- AGHTechDoc.md | 11 ++- dnsforward/dnsforward.go | 88 +++++++++++++++++++-- dnsforward/dnsforward_test.go | 139 +++++++++++++++++++++++++++++++++- querylog/qlog.go | 68 +++++++++++------ querylog/querylog.go | 13 +++- querylog/querylog_file.go | 2 + querylog/querylog_test.go | 9 ++- 7 files changed, 297 insertions(+), 33 deletions(-) diff --git a/AGHTechDoc.md b/AGHTechDoc.md index c3d21db2..a1323dde 100644 --- a/AGHTechDoc.md +++ b/AGHTechDoc.md @@ -1064,11 +1064,12 @@ When a new DNS request is received and processed, we store information about thi "QT":"...", // question type "QC":"...", // question class "Answer":"...", + "OrigAnswer":"...", "Result":{ "IsFiltered":true, "Reason":3, "Rule":"...", - "FilterID":1 + "FilterID":1, }, "Elapsed":12345, "Upstream":"...", @@ -1121,6 +1122,13 @@ Response: } ... ], + "original_answer":[ // Answer from upstream server (optional) + { + "type":"AAAA", + "value":"::" + } + ... + ], "client":"127.0.0.1", "elapsedMs":"0.098403", "filterId":1, @@ -1131,6 +1139,7 @@ Response: }, "reason":"FilteredBlackList", "rule":"||doubleclick.net^", + "service_name": "...", // set if reason=FilteredBlockedService "status":"NOERROR", "time":"2006-01-02T15:04:05.999999999Z07:00" } diff --git a/dnsforward/dnsforward.go b/dnsforward/dnsforward.go index d83753a4..a9fc04c9 100644 --- a/dnsforward/dnsforward.go +++ b/dnsforward/dnsforward.go @@ -164,6 +164,15 @@ func (s *Server) Start(config *ServerConfig) error { // startInternal starts without locking func (s *Server) startInternal(config *ServerConfig) error { + err := s.prepare(config) + if err != nil { + return err + } + return s.dnsProxy.Start() +} + +// Prepare the object +func (s *Server) prepare(config *ServerConfig) error { if s.dnsProxy != nil { return errors.New("DNS server is already started") } @@ -243,7 +252,7 @@ func (s *Server) startInternal(config *ServerConfig) error { // Initialize and start the DNS proxy s.dnsProxy = &proxy.Proxy{Config: proxyConfig} - return s.dnsProxy.Start() + return nil } // Stop stops the DNS server @@ -344,6 +353,7 @@ func (s *Server) beforeRequestHandler(p *proxy.Proxy, d *proxy.DNSContext) (bool } // handleDNSRequest filters the incoming DNS requests and writes them to the query log +// nolint (gocyclo) func (s *Server) handleDNSRequest(p *proxy.Proxy, d *proxy.DNSContext) error { start := time.Now() @@ -372,6 +382,7 @@ func (s *Server) handleDNSRequest(p *proxy.Proxy, d *proxy.DNSContext) error { return err } + var origResp *dns.Msg if d.Res == nil { answer := []dns.RR{} originalQuestion := d.Req.Question[0] @@ -396,6 +407,18 @@ func (s *Server) handleDNSRequest(p *proxy.Proxy, d *proxy.DNSContext) error { answer = append(answer, d.Res.Answer...) // host -> IP d.Res.Answer = answer } + + } else if res.Reason != dnsfilter.NotFilteredWhiteList { + origResp2 := d.Res + res, err = s.filterResponse(d) + if err != nil { + return err + } + if res != nil { + origResp = origResp2 // matched by response + } else { + res = &dnsfilter.Result{} + } } } @@ -416,11 +439,18 @@ func (s *Server) handleDNSRequest(p *proxy.Proxy, d *proxy.DNSContext) error { // Synchronize access to s.queryLog and s.stats so they won't be suddenly uninitialized while in use. // This can happen after proxy server has been stopped, but its workers haven't yet exited. if shouldLog && s.queryLog != nil { - upstreamAddr := "" - if d.Upstream != nil { - upstreamAddr = d.Upstream.Address() + p := querylog.AddParams{ + Question: msg, + Answer: d.Res, + OrigAnswer: origResp, + Result: res, + Elapsed: elapsed, + ClientIP: getIP(d.Addr), } - s.queryLog.Add(msg, d.Res, res, elapsed, getIP(d.Addr), upstreamAddr) + if d.Upstream != nil { + p.Upstream = d.Upstream.Address() + } + s.queryLog.Add(p) } s.updateStats(d, elapsed, *res) @@ -538,6 +568,54 @@ func (s *Server) filterDNSRequest(d *proxy.DNSContext) (*dnsfilter.Result, error return &res, err } +// If response contains CNAME, A or AAAA records, we apply filtering to each canonical host name or IP address. +// If this is a match, we set a new response in d.Res and return. +func (s *Server) filterResponse(d *proxy.DNSContext) (*dnsfilter.Result, error) { + for _, a := range d.Res.Answer { + host := "" + + switch v := a.(type) { + case *dns.CNAME: + log.Debug("DNSFwd: Checking CNAME %s for %s", v.Target, v.Hdr.Name) + host = strings.TrimSuffix(v.Target, ".") + + case *dns.A: + host = v.A.String() + log.Debug("DNSFwd: Checking record A (%s) for %s", host, v.Hdr.Name) + + case *dns.AAAA: + host = v.AAAA.String() + log.Debug("DNSFwd: Checking record AAAA (%s) for %s", host, v.Hdr.Name) + + default: + continue + } + + s.RLock() + // Synchronize access to s.dnsFilter so it won't be suddenly uninitialized while in use. + // This could happen after proxy server has been stopped, but its workers are not yet exited. + if !s.conf.ProtectionEnabled || s.dnsFilter == nil { + s.RUnlock() + continue + } + setts := dnsfilter.RequestFilteringSettings{} + setts.FilteringEnabled = true + res, err := s.dnsFilter.CheckHost(host, d.Req.Question[0].Qtype, &setts) + s.RUnlock() + + if err != nil { + return nil, err + + } else if res.IsFiltered { + d.Res = s.genDNSFilterMessage(d, &res) + log.Debug("DNSFwd: Matched %s by response: %s", d.Req.Question[0].Name, host) + return &res, nil + } + } + + return nil, nil +} + // genDNSFilterMessage generates a DNS message corresponding to the filtering result func (s *Server) genDNSFilterMessage(d *proxy.DNSContext, result *dnsfilter.Result) *dns.Msg { m := d.Req diff --git a/dnsforward/dnsforward_test.go b/dnsforward/dnsforward_test.go index f05934f6..7fcb5fb4 100644 --- a/dnsforward/dnsforward_test.go +++ b/dnsforward/dnsforward_test.go @@ -16,6 +16,7 @@ import ( "github.com/AdguardTeam/AdGuardHome/dnsfilter" "github.com/AdguardTeam/dnsproxy/proxy" + "github.com/AdguardTeam/dnsproxy/upstream" "github.com/miekg/dns" "github.com/stretchr/testify/assert" ) @@ -246,6 +247,142 @@ func TestBlockedRequest(t *testing.T) { } } +// testUpstream is a mock of real upstream. +// specify fields with necessary values to simulate real upstream behaviour +type testUpstream struct { + cn map[string]string // Map of [name]canonical_name + ipv4 map[string][]net.IP // Map of [name]IPv4 + ipv6 map[string][]net.IP // Map of [name]IPv6 +} + +func (u *testUpstream) Exchange(m *dns.Msg) (*dns.Msg, error) { + resp := dns.Msg{} + resp.SetReply(m) + hasARecord := false + hasAAAARecord := false + + reqType := m.Question[0].Qtype + name := m.Question[0].Name + + // Let's check if we have any CNAME for given name + if cname, ok := u.cn[name]; ok { + cn := dns.CNAME{} + cn.Hdr.Name = name + cn.Hdr.Rrtype = dns.TypeCNAME + cn.Target = cname + resp.Answer = append(resp.Answer, &cn) + } + + // Let's check if we can add some A records to the answer + if ipv4addr, ok := u.ipv4[name]; ok && reqType == dns.TypeA { + hasARecord = true + for _, ipv4 := range ipv4addr { + respA := dns.A{} + respA.Hdr.Rrtype = dns.TypeA + respA.Hdr.Name = name + respA.A = ipv4 + resp.Answer = append(resp.Answer, &respA) + } + } + + // Let's check if we can add some AAAA records to the answer + if u.ipv6 != nil { + if ipv6addr, ok := u.ipv6[name]; ok && reqType == dns.TypeAAAA { + hasAAAARecord = true + for _, ipv6 := range ipv6addr { + respAAAA := dns.A{} + respAAAA.Hdr.Rrtype = dns.TypeAAAA + respAAAA.Hdr.Name = name + respAAAA.A = ipv6 + resp.Answer = append(resp.Answer, &respAAAA) + } + } + } + + if len(resp.Answer) == 0 { + if hasARecord || hasAAAARecord { + // Set No Error RCode if there are some records for given Qname but we didn't apply them + resp.SetRcode(m, dns.RcodeSuccess) + } else { + // Set NXDomain RCode otherwise + resp.SetRcode(m, dns.RcodeNameError) + } + } + + return &resp, nil +} + +func (u *testUpstream) Address() string { + return "test" +} + +func (s *Server) startWithUpstream(u upstream.Upstream) error { + s.Lock() + defer s.Unlock() + err := s.prepare(nil) + if err != nil { + return err + } + s.dnsProxy.Upstreams = []upstream.Upstream{u} + return s.dnsProxy.Start() +} + +// testCNAMEs is a simple map of names and CNAMEs necessary for the testUpstream work +var testCNAMEs = map[string]string{ + "badhost.": "null.example.org.", + "whitelist.example.org.": "null.example.org.", +} + +// testIPv4 is a simple map of names and IPv4s necessary for the testUpstream work +var testIPv4 = map[string][]net.IP{ + "null.example.org.": {{1, 2, 3, 4}}, + "example.org.": {{127, 0, 0, 255}}, +} + +func TestBlockCNAME(t *testing.T) { + s := createTestServer(t) + testUpstm := &testUpstream{testCNAMEs, testIPv4, nil} + err := s.startWithUpstream(testUpstm) + assert.True(t, err == nil) + addr := s.dnsProxy.Addr(proxy.ProtoUDP) + + // 'badhost' has a canonical name 'null.example.org' which is blocked by filters: + // response is blocked + req := dns.Msg{} + req.Id = dns.Id() + req.Question = []dns.Question{ + {Name: "badhost.", Qtype: dns.TypeA, Qclass: dns.ClassINET}, + } + reply, err := dns.Exchange(&req, addr.String()) + assert.True(t, err == nil) + assert.True(t, reply.Rcode == dns.RcodeNameError) + + // 'whitelist.example.org' has a canonical name 'null.example.org' which is blocked by filters + // but 'whitelist.example.org' is in a whitelist: + // response isn't blocked + req = dns.Msg{} + req.Id = dns.Id() + req.Question = []dns.Question{ + {Name: "whitelist.example.org.", Qtype: dns.TypeA, Qclass: dns.ClassINET}, + } + reply, err = dns.Exchange(&req, addr.String()) + assert.True(t, err == nil) + assert.True(t, reply.Rcode == dns.RcodeSuccess) + + // 'example.org' has a canonical name 'cname1' with IP 127.0.0.255 which is blocked by filters: + // response is blocked + req = dns.Msg{} + req.Id = dns.Id() + req.Question = []dns.Question{ + {Name: "example.org.", Qtype: dns.TypeA, Qclass: dns.ClassINET}, + } + reply, err = dns.Exchange(&req, addr.String()) + assert.True(t, err == nil) + assert.True(t, reply.Rcode == dns.RcodeNameError) + + _ = s.Stop() +} + func TestNullBlockedRequest(t *testing.T) { s := createTestServer(t) s.conf.FilteringConfig.BlockingMode = "null_ip" @@ -376,7 +513,7 @@ func TestBlockedBySafeBrowsing(t *testing.T) { } func createTestServer(t *testing.T) *Server { - rules := "||nxdomain.example.org^\n||null.example.org^\n127.0.0.1 host.example.org\n" + rules := "||nxdomain.example.org^\n||null.example.org^\n127.0.0.1 host.example.org\n@@||whitelist.example.org^\n||127.0.0.255\n" filters := map[int]string{} filters[0] = rules c := dnsfilter.Config{} diff --git a/querylog/qlog.go b/querylog/qlog.go index bf585c53..8c48c969 100644 --- a/querylog/qlog.go +++ b/querylog/qlog.go @@ -2,7 +2,6 @@ package querylog import ( "fmt" - "net" "os" "path/filepath" "strconv" @@ -96,52 +95,60 @@ type logEntry struct { QType string `json:"QT"` QClass string `json:"QC"` - Answer []byte `json:",omitempty"` // sometimes empty answers happen like binerdunt.top or rev2.globalrootservers.net + Answer []byte `json:",omitempty"` // sometimes empty answers happen like binerdunt.top or rev2.globalrootservers.net + OrigAnswer []byte `json:",omitempty"` + Result dnsfilter.Result Elapsed time.Duration Upstream string `json:",omitempty"` // if empty, means it was cached } -func (l *queryLog) Add(question *dns.Msg, answer *dns.Msg, result *dnsfilter.Result, elapsed time.Duration, ip net.IP, upstream string) { +func (l *queryLog) Add(params AddParams) { if !l.conf.Enabled { return } - if question == nil || len(question.Question) != 1 || len(question.Question[0].Name) == 0 || - ip == nil { + if params.Question == nil || len(params.Question.Question) != 1 || len(params.Question.Question[0].Name) == 0 || + params.ClientIP == nil { return } - var a []byte - var err error - - if answer != nil { - a, err = answer.Pack() - if err != nil { - log.Printf("failed to pack answer for querylog: %s", err) - return - } - } - - if result == nil { - result = &dnsfilter.Result{} + if params.Result == nil { + params.Result = &dnsfilter.Result{} } now := time.Now() entry := logEntry{ - IP: ip.String(), + IP: params.ClientIP.String(), Time: now, - Answer: a, - Result: *result, - Elapsed: elapsed, - Upstream: upstream, + Result: *params.Result, + Elapsed: params.Elapsed, + Upstream: params.Upstream, } - q := question.Question[0] + q := params.Question.Question[0] entry.QHost = strings.ToLower(q.Name[:len(q.Name)-1]) // remove the last dot entry.QType = dns.Type(q.Qtype).String() entry.QClass = dns.Class(q.Qclass).String() + if params.Answer != nil { + a, err := params.Answer.Pack() + if err != nil { + log.Info("Querylog: Answer.Pack(): %s", err) + return + } + entry.Answer = a + } + + if params.OrigAnswer != nil { + a, err := params.OrigAnswer.Pack() + if err != nil { + log.Info("Querylog: OrigAnswer.Pack(): %s", err) + return + } + entry.OrigAnswer = a + } + l.bufferLock.Lock() l.buffer = append(l.buffer, &entry) needFlush := false @@ -335,6 +342,19 @@ func (l *queryLog) getData(params getDataParams) map[string]interface{} { jsonEntry["answer"] = answers } + if len(entry.OrigAnswer) != 0 { + a := new(dns.Msg) + err := a.Unpack(entry.OrigAnswer) + if err == nil { + answers = answerToMap(a) + if answers != nil { + jsonEntry["original_answer"] = answers + } + } else { + log.Debug("Querylog: a.Unpack(entry.OrigAnswer): %s: %s", err, string(entry.OrigAnswer)) + } + } + data = append(data, jsonEntry) } diff --git a/querylog/querylog.go b/querylog/querylog.go index e7e790e7..7d479d92 100644 --- a/querylog/querylog.go +++ b/querylog/querylog.go @@ -22,7 +22,7 @@ type QueryLog interface { Close() // Add a log entry - Add(question *dns.Msg, answer *dns.Msg, result *dnsfilter.Result, elapsed time.Duration, ip net.IP, upstream string) + Add(params AddParams) // WriteDiskConfig - write configuration WriteDiskConfig(dc *DiskConfig) @@ -42,6 +42,17 @@ type Config struct { HTTPRegister func(string, string, func(http.ResponseWriter, *http.Request)) } +// AddParams - parameters for Add() +type AddParams struct { + Question *dns.Msg + Answer *dns.Msg // The response we sent to the client (optional) + OrigAnswer *dns.Msg // The response from an upstream server (optional) + Result *dnsfilter.Result // Filtering result (optional) + Elapsed time.Duration // Time spent for processing the request + ClientIP net.IP + Upstream string +} + // New - create a new instance of the query log func New(conf Config) QueryLog { return newQueryLog(conf) diff --git a/querylog/querylog_file.go b/querylog/querylog_file.go index a2250581..e0540f43 100644 --- a/querylog/querylog_file.go +++ b/querylog/querylog_file.go @@ -574,6 +574,8 @@ func decode(ent *logEntry, str string) { case "Answer": ent.Answer, err = base64.StdEncoding.DecodeString(v) + case "OrigAnswer": + ent.OrigAnswer, err = base64.StdEncoding.DecodeString(v) case "IsFiltered": b, err = strconv.ParseBool(v) diff --git a/querylog/querylog_test.go b/querylog/querylog_test.go index 5b2776cd..8c8b9bb4 100644 --- a/querylog/querylog_test.go +++ b/querylog/querylog_test.go @@ -115,7 +115,14 @@ func addEntry(l *queryLog, host, answerStr, client string) { answer.A = net.ParseIP(answerStr) a.Answer = append(a.Answer, answer) res := dnsfilter.Result{} - l.Add(&q, &a, &res, 0, net.ParseIP(client), "upstream") + params := AddParams{ + Question: &q, + Answer: &a, + Result: &res, + ClientIP: net.ParseIP(client), + Upstream: "upstream", + } + l.Add(params) } func checkEntry(t *testing.T, m map[string]interface{}, host, answer, client string) bool { From e8885dbf3e8f4e9f5e486031813712c88625ba64 Mon Sep 17 00:00:00 2001 From: Ildar Kamalov Date: Fri, 29 Nov 2019 18:05:15 +0300 Subject: [PATCH 2/4] + client: handle blocked by response in query log --- client/src/__locales/en.json | 5 +++-- client/src/components/Logs/index.js | 22 +++++++++++++++++++--- client/src/helpers/helpers.js | 4 +++- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/client/src/__locales/en.json b/client/src/__locales/en.json index 6be758f5..f91355ee 100644 --- a/client/src/__locales/en.json +++ b/client/src/__locales/en.json @@ -405,5 +405,6 @@ "netname": "Network name", "descr": "Description", "whois": "Whois", - "filtering_rules_learn_more": "<0>Learn more about creating your own hosts blocklists." -} \ No newline at end of file + "filtering_rules_learn_more": "<0>Learn more about creating your own hosts blocklists.", + "blocked_by_response": "Blocked by CNAME or IP in response" +} diff --git a/client/src/components/Logs/index.js b/client/src/components/Logs/index.js index 3b52f4e4..449a6538 100644 --- a/client/src/components/Logs/index.js +++ b/client/src/components/Logs/index.js @@ -134,9 +134,16 @@ class Logs extends Component { ); }; + normalizeResponse = response => ( + response.map((response) => { + const { value, type, ttl } = response; + return `${type}: ${value} (ttl=${ttl})`; + }) + ); + getResponseCell = ({ value: responses, original }) => { const { - reason, filterId, rule, status, + reason, filterId, rule, status, originalAnswer, } = original; const { t, filtering } = this.props; const { filters } = filtering; @@ -149,6 +156,7 @@ class Logs extends Component { const isBlockedService = reason === FILTERED_STATUS.FILTERED_BLOCKED_SERVICE; const currentService = SERVICES.find(service => service.id === original.serviceName); const serviceName = currentService && currentService.name; + const normalizedAnswer = originalAnswer && this.normalizeResponse(originalAnswer); let filterName = ''; if (filterId === 0) { @@ -168,7 +176,12 @@ class Logs extends Component { return (
- {(isFiltered || isBlockedService) && ( + {originalAnswer && ( + + blocked_by_response + + )} + {!originalAnswer && (isFiltered || isBlockedService) && ( {parsedFilteredReason} @@ -183,7 +196,10 @@ class Logs extends Component { )}
- {this.renderResponseList(responses, status)} + {originalAnswer + ? this.renderResponseList(normalizedAnswer, status) + : this.renderResponseList(responses, status) + } {isWhiteList && this.renderTooltip(isWhiteList, rule, filterName)}
diff --git a/client/src/helpers/helpers.js b/client/src/helpers/helpers.js index 089f0604..d7c78fc2 100644 --- a/client/src/helpers/helpers.js +++ b/client/src/helpers/helpers.js @@ -50,6 +50,7 @@ export const normalizeLogs = logs => logs.map((log) => { rule, service_name, status, + original_answer, } = log; const { host: domain, type } = question; const responsesArray = response ? response.map((response) => { @@ -65,8 +66,9 @@ export const normalizeLogs = logs => logs.map((log) => { client, filterId, rule, - serviceName: service_name, status, + serviceName: service_name, + originalAnswer: original_answer, }; }); From 7c0b2d8ede95008f2d85ce4e65cdd6fe04976b28 Mon Sep 17 00:00:00 2001 From: Simon Zolin Date: Mon, 2 Dec 2019 14:34:06 +0300 Subject: [PATCH 3/4] * doc: filtering logic with a diagram --- AGHTechDoc.md | 22 +++++++++++++++++++++- agh-arch.png => doc/agh-arch.png | Bin doc/agh-filtering.png | Bin 0 -> 68886 bytes 3 files changed, 21 insertions(+), 1 deletion(-) rename agh-arch.png => doc/agh-arch.png (100%) create mode 100644 doc/agh-filtering.png diff --git a/AGHTechDoc.md b/AGHTechDoc.md index a1323dde..d843195d 100644 --- a/AGHTechDoc.md +++ b/AGHTechDoc.md @@ -61,7 +61,7 @@ Contents: ## Relations between subsystems -![](agh-arch.png) +![](doc/agh-arch.png) @@ -1184,6 +1184,26 @@ Response: ## Filtering +![](doc/agh-filtering.png) + +This is how DNS requests and responses are filtered by AGH: + +* 'dnsproxy' module receives DNS request from client and passes control to AGH +* AGH applies filtering logic to the host name in DNS Question: + * process Rewrite rules + * match host name against filtering lists + * match host name against blocked services rules + * process SafeSearch rules + * request SafeBrowsing & ParentalControl services and process their response +* If the handlers above create a successful result that can be immediately sent to a client, it's passed back to 'dnsproxy' module +* Otherwise, AGH passes the DNS request to an upstream server via 'dnsproxy' module +* After 'dnsproxy' module has received a response from an upstream server, it passes control back to AGH +* If the filtering logic for DNS request returned a 'whitelist' flag, AGH passes the response to a client +* Otherwise, AGH applies filtering logic to each DNS record in response: + * For CNAME records, the target name is matched against filtering lists (ignoring 'whitelist' rules) + * For A and AAAA records, the IP address is matched against filtering lists (ignoring 'whitelist' rules) + + ### Filters update mechanism Filters can be updated either manually by request from UI or automatically. diff --git a/agh-arch.png b/doc/agh-arch.png similarity index 100% rename from agh-arch.png rename to doc/agh-arch.png diff --git a/doc/agh-filtering.png b/doc/agh-filtering.png new file mode 100644 index 0000000000000000000000000000000000000000..20c7941207a6dc6f057876616e009aa126a4f054 GIT binary patch literal 68886 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

T&TwCnW1 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 X#G+kJJb0nUXirsH>vGm5vwQys^e0t{ literal 0 HcmV?d00001 From 8cb4d128f5392646eb60229717b09f8398897075 Mon Sep 17 00:00:00 2001 From: Simon Zolin Date: Mon, 2 Dec 2019 16:17:39 +0300 Subject: [PATCH 4/4] * openapi: get /querylog: add "original_answer", "service_name" --- openapi/openapi.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/openapi/openapi.yaml b/openapi/openapi.yaml index 608b5848..2bc937a6 100644 --- a/openapi/openapi.yaml +++ b/openapi/openapi.yaml @@ -1405,6 +1405,11 @@ definitions: type: "array" items: $ref: "#/definitions/DnsAnswer" + original_answer: + type: "array" + description: "Answer from upstream server (optional)" + items: + $ref: "#/definitions/DnsAnswer" client: type: "string" example: "192.168.0.1" @@ -1433,6 +1438,10 @@ definitions: - "FilteredParental" - "FilteredInvalid" - "FilteredSafeSearch" + - "FilteredBlockedService" + service_name: + type: "string" + description: "Set if reason=FilteredBlockedService" status: type: "string" description: "DNS response status"