From 3d350fa73d1424f05e9b3be560590b3dcec4b795 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 20 Aug 2024 14:08:52 +0200 Subject: [PATCH] - Add iter-scrub-ns, iter-scrub-cname and max-global-quota configuration options. --- doc/Changelog | 4 + doc/example.conf.in | 9 + doc/unbound.conf.5.in | 17 + iterator/iter_scrub.c | 14 +- iterator/iterator.c | 2 + iterator/iterator.h | 2 +- testdata/iter_max_global_quota.rpl | 2236 ++++++++++++++++++++++++++++ util/config_file.c | 10 + util/config_file.h | 6 + util/configlexer.lex | 3 + util/configparser.y | 33 +- 11 files changed, 2326 insertions(+), 10 deletions(-) create mode 100644 testdata/iter_max_global_quota.rpl diff --git a/doc/Changelog b/doc/Changelog index ad0da1464..d23ce259d 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,3 +1,7 @@ +20 August 2024: Wouter + - Add iter-scrub-ns, iter-scrub-cname and max-global-quota + configuration options. + 19 August 2024: Wouter - Fix #1126: unbound-control-setup hangs while testing for openssl presence starting from version 1.21.0. diff --git a/doc/example.conf.in b/doc/example.conf.in index d314d8ef2..b7db1e7d9 100644 --- a/doc/example.conf.in +++ b/doc/example.conf.in @@ -187,6 +187,15 @@ server: # query upon encountering a CNAME record. # max-query-restarts: 11 + # Limit on number of NS records in NS RRset for incoming packets. + # iter-scrub-ns: 20 + + # Limit on number of CNAME, DNAME records for incoming packets. + # iter-scrub-cname: 11 + + # Limit on upstream queries for an incoming query and its recursion. + # max-global-quota: 128 + # msec for waiting for an unknown server to reply. Increase if you # are behind a slow satellite link, to eg. 1128. # unknown-server-time-limit: 376 diff --git a/doc/unbound.conf.5.in b/doc/unbound.conf.5.in index d6d9c905c..15f5a6607 100644 --- a/doc/unbound.conf.5.in +++ b/doc/unbound.conf.5.in @@ -1957,6 +1957,23 @@ Changing this value needs caution as it can allow long CNAME chains to be accepted, where Unbound needs to verify (resolve) each link individually. Default is 11. .TP 5 +.B iter\-scrub\-ns: \fI +Limit on the number of NS records allowed in an rrset of type NS, from the +iterator scrubber. This protects the internals of the resolver from overly +large NS sets. Default is 20. +.TP 5 +.B iter\-scrub\-cname: \fI +Limit on the number of CNAME, DNAME records in an answer, from the iterator +scrubber. This protects the internals of the resolver from overly long +indirection chains. Clips off the remainder of the reply packet at that point. +Default is 11. +.TP 5 +.B max\-global\-quota: \fI +Limit on the number of upstream queries sent out for an incoming query and +its subqueries from recursion. It is not reset during the resolution. When +it is exceeded the query is failed and the lookup process stops. +Default is 128. +.TP 5 .B fast\-server\-permil: \fI Specify how many times out of 1000 to pick from the set of fastest servers. 0 turns the feature off. A value of 900 would pick from the fastest diff --git a/iterator/iter_scrub.c b/iterator/iter_scrub.c index f038ad69a..a043589fd 100644 --- a/iterator/iter_scrub.c +++ b/iterator/iter_scrub.c @@ -443,7 +443,7 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg, prev = NULL; rrset = msg->rrset_first; while(rrset && rrset->section == LDNS_SECTION_ANSWER) { - if(cname_length > 11 /* env->cfg.iter_scrub_cname */) { + if(cname_length > env->cfg->iter_scrub_cname) { /* Too many CNAMEs, or DNAMEs, from the authority * server, scrub down the length to something * shorter. This deletes everything after the limit @@ -562,8 +562,8 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg, dname_pkt_compare(pkt, oldsname, rrset->dname) == 0) { if(rrset->type == LDNS_RR_TYPE_NS && - rrset->rr_count > 20 /* env->cfg->iter_scrub_ns */) { - shorten_rrset(pkt, rrset, 20 /* env->cfg->iter_scrub_ns */); + rrset->rr_count > env->cfg->iter_scrub_ns) { + shorten_rrset(pkt, rrset, env->cfg->iter_scrub_ns); } prev = rrset; rrset = rrset->rrset_all_next; @@ -581,8 +581,8 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg, } if(rrset->type == LDNS_RR_TYPE_NS && - rrset->rr_count > 20 /* env->cfg->iter_scrub_ns */) { - shorten_rrset(pkt, rrset, 20 /* env->cfg->iter_scrub_ns */); + rrset->rr_count > env->cfg->iter_scrub_ns) { + shorten_rrset(pkt, rrset, env->cfg->iter_scrub_ns); } /* Mark the additional names from relevant rrset as OK. */ @@ -641,7 +641,7 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg, "RRset:", pkt, msg, prev, &rrset); continue; } - if(rrset->rr_count > 20 /* env->cfg->iter_scrub_ns */) { + if(rrset->rr_count > env->cfg->iter_scrub_ns) { /* If this is not a referral, and the NS RRset * is signed, then remove it entirely, so * that when it becomes bogus it does not @@ -657,7 +657,7 @@ scrub_normalize(sldns_buffer* pkt, struct msg_parse* msg, "RRset:", pkt, msg, prev, &rrset); continue; } else { - shorten_rrset(pkt, rrset, 20 /* env->cfg->iter_scrub_ns */); + shorten_rrset(pkt, rrset, env->cfg->iter_scrub_ns); } } } diff --git a/iterator/iterator.c b/iterator/iterator.c index 228f5dfae..1066eb8cd 100644 --- a/iterator/iterator.c +++ b/iterator/iterator.c @@ -70,6 +70,8 @@ #include "sldns/parseutil.h" #include "sldns/sbuffer.h" +/* number of packets */ +int MAX_GLOBAL_QUOTA = 128; /* in msec */ int UNKNOWN_SERVER_NICENESS = 376; /* in msec */ diff --git a/iterator/iterator.h b/iterator/iterator.h index 70b11df7e..46701f6ee 100644 --- a/iterator/iterator.h +++ b/iterator/iterator.h @@ -57,7 +57,7 @@ struct rbtree_type; #define MAX_TARGET_COUNT 64 /** max number of upstream queries for a query and its subqueries, it is * never reset. */ -#define MAX_GLOBAL_QUOTA 128 +extern int MAX_GLOBAL_QUOTA; /** max number of target lookups per qstate, per delegation point */ #define MAX_DP_TARGET_COUNT 16 /** max number of nxdomains allowed for target lookups for a query and diff --git a/testdata/iter_max_global_quota.rpl b/testdata/iter_max_global_quota.rpl new file mode 100644 index 000000000..2dddf035a --- /dev/null +++ b/testdata/iter_max_global_quota.rpl @@ -0,0 +1,2236 @@ +; config options +server: + target-fetch-policy: "0 0 0 0 0" + qname-minimisation: no + ; Move it down to make it exceeded. + max-global-quota: 10 + ; With this limit the resolution succeeds. + ; max-global-quota: 250 + +stub-zone: + name: "." + stub-addr: 193.0.14.129 +CONFIG_END + +SCENARIO_BEGIN Test the max-global-quota limit. +; It looks up a name with 10 CNAMEs, and every cname needs 10 delegations. + +; K.ROOT-SERVERS.NET. +RANGE_BEGIN 0 100 + ADDRESS 193.0.14.129 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +. IN NS +SECTION ANSWER +. IN NS K.ROOT-SERVERS.NET. +SECTION ADDITIONAL +K.ROOT-SERVERS.NET. IN A 193.0.14.129 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +com. IN NS +SECTION AUTHORITY +com. IN NS a.gtld-servers.net. +SECTION ADDITIONAL +a.gtld-servers.net. IN A 192.5.6.30 +ENTRY_END +RANGE_END + +; a.gtld-servers.net. +RANGE_BEGIN 0 100 + ADDRESS 192.5.6.30 +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +example.com. IN NS +SECTION AUTHORITY +example.com. IN NS ns.example.com. +SECTION ADDITIONAL +ns.example.com. IN A 1.2.3.4 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +foo.com. IN NS +SECTION AUTHORITY +foo.com. IN NS ns.foo.com. +SECTION ADDITIONAL +ns.foo.com. IN A 1.2.3.5 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +c1.com. IN NS +SECTION AUTHORITY +c1.com. IN NS ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c1.com. +SECTION ADDITIONAL +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +c2.com. IN NS +SECTION AUTHORITY +c2.com. IN NS ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c2.com. +SECTION ADDITIONAL +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +c3.com. IN NS +SECTION AUTHORITY +c3.com. IN NS ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c3.com. +SECTION ADDITIONAL +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +c4.com. IN NS +SECTION AUTHORITY +c4.com. IN NS ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c4.com. +SECTION ADDITIONAL +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +c5.com. IN NS +SECTION AUTHORITY +c5.com. IN NS ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c5.com. +SECTION ADDITIONAL +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +c6.com. IN NS +SECTION AUTHORITY +c6.com. IN NS ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c6.com. +SECTION ADDITIONAL +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +c7.com. IN NS +SECTION AUTHORITY +c7.com. IN NS ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c7.com. +SECTION ADDITIONAL +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +c8.com. IN NS +SECTION AUTHORITY +c8.com. IN NS ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c8.com. +SECTION ADDITIONAL +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +c9.com. IN NS +SECTION AUTHORITY +c9.com. IN NS ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c9.com. +SECTION ADDITIONAL +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +c10.com. IN NS +SECTION AUTHORITY +c10.com. IN NS ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c10.com. +SECTION ADDITIONAL +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l10c1.com. IN NS +SECTION AUTHORITY +l10c1.com. IN NS ns.l10c1.com. +SECTION ADDITIONAL +ns.l10c1.com. IN A 1.3.1.10 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l10c2.com. IN NS +SECTION AUTHORITY +l10c2.com. IN NS ns.l10c2.com. +SECTION ADDITIONAL +ns.l10c2.com. IN A 1.3.2.10 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l10c3.com. IN NS +SECTION AUTHORITY +l10c3.com. IN NS ns.l10c3.com. +SECTION ADDITIONAL +ns.l10c3.com. IN A 1.3.3.10 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l10c4.com. IN NS +SECTION AUTHORITY +l10c4.com. IN NS ns.l10c4.com. +SECTION ADDITIONAL +ns.l10c4.com. IN A 1.3.4.10 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l10c5.com. IN NS +SECTION AUTHORITY +l10c5.com. IN NS ns.l10c5.com. +SECTION ADDITIONAL +ns.l10c5.com. IN A 1.3.5.10 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l10c6.com. IN NS +SECTION AUTHORITY +l10c6.com. IN NS ns.l10c6.com. +SECTION ADDITIONAL +ns.l10c6.com. IN A 1.3.6.10 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l10c7.com. IN NS +SECTION AUTHORITY +l10c7.com. IN NS ns.l10c7.com. +SECTION ADDITIONAL +ns.l10c7.com. IN A 1.3.7.10 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l10c8.com. IN NS +SECTION AUTHORITY +l10c8.com. IN NS ns.l10c8.com. +SECTION ADDITIONAL +ns.l10c8.com. IN A 1.3.8.10 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l10c9.com. IN NS +SECTION AUTHORITY +l10c9.com. IN NS ns.l10c9.com. +SECTION ADDITIONAL +ns.l10c9.com. IN A 1.3.9.10 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l10c10.com. IN NS +SECTION AUTHORITY +l10c10.com. IN NS ns.l10c10.com. +SECTION ADDITIONAL +ns.l10c10.com. IN A 1.3.10.10 +ENTRY_END +RANGE_END + +; ns.example.com. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.4 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +www.example.com. IN CNAME www.c1.com. +ENTRY_END +RANGE_END + +; ns.foo.com. +RANGE_BEGIN 0 100 + ADDRESS 1.2.3.5 +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.foo.com. IN A +SECTION ANSWER +www.foo.com. IN A 1.2.3.4 +ENTRY_END +RANGE_END + +; ns.l10c1.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.1.10 +$ORIGIN l10c1.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l9 IN NS +SECTION AUTHORITY +l9 IN NS ns.l9 +SECTION ADDITIONAL +ns.l9 IN A 1.3.1.9 +ENTRY_END +RANGE_END + +; ns.l9.l10c1.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.1.9 +$ORIGIN l9.l10c1.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l8 IN NS +SECTION AUTHORITY +l8 IN NS ns.l8 +SECTION ADDITIONAL +ns.l8 IN A 1.3.1.8 +ENTRY_END +RANGE_END + +; ns.l8.l9.l10c1.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.1.8 +$ORIGIN l8.l9.l10c1.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l7 IN NS +SECTION AUTHORITY +l7 IN NS ns.l7 +SECTION ADDITIONAL +ns.l7 IN A 1.3.1.7 +ENTRY_END +RANGE_END + +; ns.l7.l8.l9.l10c1.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.1.7 +$ORIGIN l7.l8.l9.l10c1.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l6 IN NS +SECTION AUTHORITY +l6 IN NS ns.l6 +SECTION ADDITIONAL +ns.l6 IN A 1.3.1.6 +ENTRY_END +RANGE_END + +; ns.l6.l7.l8.l9.l10c1.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.1.6 +$ORIGIN l6.l7.l8.l9.l10c1.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l5 IN NS +SECTION AUTHORITY +l5 IN NS ns.l5 +SECTION ADDITIONAL +ns.l5 IN A 1.3.1.5 +ENTRY_END +RANGE_END + +; ns.l5.l6.l7.l8.l9.l10c1.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.1.5 +$ORIGIN l5.l6.l7.l8.l9.l10c1.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l4 IN NS +SECTION AUTHORITY +l4 IN NS ns.l4 +SECTION ADDITIONAL +ns.l4 IN A 1.3.1.4 +ENTRY_END +RANGE_END + +; ns.l4.l5.l6.l7.l8.l9.l10c1.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.1.4 +$ORIGIN l4.l5.l6.l7.l8.l9.l10c1.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l3 IN NS +SECTION AUTHORITY +l3 IN NS ns.l3 +SECTION ADDITIONAL +ns.l3 IN A 1.3.1.3 +ENTRY_END +RANGE_END + +; ns.l3.l4.l5.l6.l7.l8.l9.l10c1.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.1.3 +$ORIGIN l3.l4.l5.l6.l7.l8.l9.l10c1.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l2 IN NS +SECTION AUTHORITY +l2 IN NS ns.l2 +SECTION ADDITIONAL +ns.l2 IN A 1.3.1.2 +ENTRY_END +RANGE_END + +; ns.l2.l3.l4.l5.l6.l7.l8.l9.l10c1.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.1.2 +$ORIGIN l2.l3.l4.l5.l6.l7.l8.l9.l10c1.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l1 IN NS +SECTION AUTHORITY +l1 IN NS ns.l1 +SECTION ADDITIONAL +ns.l1 IN A 1.3.1.1 +ENTRY_END +RANGE_END + +; ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c1.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.1.1 +$ORIGIN l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c1.com. +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN A +SECTION ANSWER +ns IN A 1.3.1.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN AAAA +SECTION AUTHORITY +@ SOA ns host 2018060423 3600 300 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.c1.com. IN A +SECTION ANSWER +www.c1.com. IN CNAME www.c2.com. +ENTRY_END +RANGE_END + +; ns.l10c2.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.2.10 +$ORIGIN l10c2.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l9 IN NS +SECTION AUTHORITY +l9 IN NS ns.l9 +SECTION ADDITIONAL +ns.l9 IN A 1.3.2.9 +ENTRY_END +RANGE_END + +; ns.l9.l10c2.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.2.9 +$ORIGIN l9.l10c2.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l8 IN NS +SECTION AUTHORITY +l8 IN NS ns.l8 +SECTION ADDITIONAL +ns.l8 IN A 1.3.2.8 +ENTRY_END +RANGE_END + +; ns.l8.l9.l10c2.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.2.8 +$ORIGIN l8.l9.l10c2.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l7 IN NS +SECTION AUTHORITY +l7 IN NS ns.l7 +SECTION ADDITIONAL +ns.l7 IN A 1.3.2.7 +ENTRY_END +RANGE_END + +; ns.l7.l8.l9.l10c2.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.2.7 +$ORIGIN l7.l8.l9.l10c2.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l6 IN NS +SECTION AUTHORITY +l6 IN NS ns.l6 +SECTION ADDITIONAL +ns.l6 IN A 1.3.2.6 +ENTRY_END +RANGE_END + +; ns.l6.l7.l8.l9.l10c2.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.2.6 +$ORIGIN l6.l7.l8.l9.l10c2.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l5 IN NS +SECTION AUTHORITY +l5 IN NS ns.l5 +SECTION ADDITIONAL +ns.l5 IN A 1.3.2.5 +ENTRY_END +RANGE_END + +; ns.l5.l6.l7.l8.l9.l10c2.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.2.5 +$ORIGIN l5.l6.l7.l8.l9.l10c2.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l4 IN NS +SECTION AUTHORITY +l4 IN NS ns.l4 +SECTION ADDITIONAL +ns.l4 IN A 1.3.2.4 +ENTRY_END +RANGE_END + +; ns.l4.l5.l6.l7.l8.l9.l10c2.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.2.4 +$ORIGIN l4.l5.l6.l7.l8.l9.l10c2.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l3 IN NS +SECTION AUTHORITY +l3 IN NS ns.l3 +SECTION ADDITIONAL +ns.l3 IN A 1.3.2.3 +ENTRY_END +RANGE_END + +; ns.l3.l4.l5.l6.l7.l8.l9.l10c2.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.2.3 +$ORIGIN l3.l4.l5.l6.l7.l8.l9.l10c2.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l2 IN NS +SECTION AUTHORITY +l2 IN NS ns.l2 +SECTION ADDITIONAL +ns.l2 IN A 1.3.2.2 +ENTRY_END +RANGE_END + +; ns.l2.l3.l4.l5.l6.l7.l8.l9.l10c2.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.2.2 +$ORIGIN l2.l3.l4.l5.l6.l7.l8.l9.l10c2.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l1 IN NS +SECTION AUTHORITY +l1 IN NS ns.l1 +SECTION ADDITIONAL +ns.l1 IN A 1.3.2.1 +ENTRY_END +RANGE_END + +; ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c2.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.2.1 +$ORIGIN l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c2.com. +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN A +SECTION ANSWER +ns IN A 1.3.2.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN AAAA +SECTION AUTHORITY +@ SOA ns host 2018060423 3600 300 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.c2.com. IN A +SECTION ANSWER +www.c2.com. IN CNAME www.c3.com. +ENTRY_END +RANGE_END + +; ns.l10c3.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.3.10 +$ORIGIN l10c3.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l9 IN NS +SECTION AUTHORITY +l9 IN NS ns.l9 +SECTION ADDITIONAL +ns.l9 IN A 1.3.3.9 +ENTRY_END +RANGE_END + +; ns.l9.l10c3.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.3.9 +$ORIGIN l9.l10c3.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l8 IN NS +SECTION AUTHORITY +l8 IN NS ns.l8 +SECTION ADDITIONAL +ns.l8 IN A 1.3.3.8 +ENTRY_END +RANGE_END + +; ns.l8.l9.l10c3.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.3.8 +$ORIGIN l8.l9.l10c3.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l7 IN NS +SECTION AUTHORITY +l7 IN NS ns.l7 +SECTION ADDITIONAL +ns.l7 IN A 1.3.3.7 +ENTRY_END +RANGE_END + +; ns.l7.l8.l9.l10c3.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.3.7 +$ORIGIN l7.l8.l9.l10c3.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l6 IN NS +SECTION AUTHORITY +l6 IN NS ns.l6 +SECTION ADDITIONAL +ns.l6 IN A 1.3.3.6 +ENTRY_END +RANGE_END + +; ns.l6.l7.l8.l9.l10c3.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.3.6 +$ORIGIN l6.l7.l8.l9.l10c3.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l5 IN NS +SECTION AUTHORITY +l5 IN NS ns.l5 +SECTION ADDITIONAL +ns.l5 IN A 1.3.3.5 +ENTRY_END +RANGE_END + +; ns.l5.l6.l7.l8.l9.l10c3.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.3.5 +$ORIGIN l5.l6.l7.l8.l9.l10c3.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l4 IN NS +SECTION AUTHORITY +l4 IN NS ns.l4 +SECTION ADDITIONAL +ns.l4 IN A 1.3.3.4 +ENTRY_END +RANGE_END + +; ns.l4.l5.l6.l7.l8.l9.l10c3.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.3.4 +$ORIGIN l4.l5.l6.l7.l8.l9.l10c3.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l3 IN NS +SECTION AUTHORITY +l3 IN NS ns.l3 +SECTION ADDITIONAL +ns.l3 IN A 1.3.3.3 +ENTRY_END +RANGE_END + +; ns.l3.l4.l5.l6.l7.l8.l9.l10c3.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.3.3 +$ORIGIN l3.l4.l5.l6.l7.l8.l9.l10c3.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l2 IN NS +SECTION AUTHORITY +l2 IN NS ns.l2 +SECTION ADDITIONAL +ns.l2 IN A 1.3.3.2 +ENTRY_END +RANGE_END + +; ns.l2.l3.l4.l5.l6.l7.l8.l9.l10c3.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.3.2 +$ORIGIN l2.l3.l4.l5.l6.l7.l8.l9.l10c3.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l1 IN NS +SECTION AUTHORITY +l1 IN NS ns.l1 +SECTION ADDITIONAL +ns.l1 IN A 1.3.3.1 +ENTRY_END +RANGE_END + +; ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c3.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.3.1 +$ORIGIN l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c3.com. +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN A +SECTION ANSWER +ns IN A 1.3.3.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN AAAA +SECTION AUTHORITY +@ SOA ns host 2018060423 3600 300 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.c3.com. IN A +SECTION ANSWER +www.c3.com. IN CNAME www.c4.com. +ENTRY_END +RANGE_END +; ns.l10c4.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.4.10 +$ORIGIN l10c4.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l9 IN NS +SECTION AUTHORITY +l9 IN NS ns.l9 +SECTION ADDITIONAL +ns.l9 IN A 1.3.4.9 +ENTRY_END +RANGE_END + +; ns.l9.l10c4.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.4.9 +$ORIGIN l9.l10c4.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l8 IN NS +SECTION AUTHORITY +l8 IN NS ns.l8 +SECTION ADDITIONAL +ns.l8 IN A 1.3.4.8 +ENTRY_END +RANGE_END + +; ns.l8.l9.l10c4.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.4.8 +$ORIGIN l8.l9.l10c4.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l7 IN NS +SECTION AUTHORITY +l7 IN NS ns.l7 +SECTION ADDITIONAL +ns.l7 IN A 1.3.4.7 +ENTRY_END +RANGE_END + +; ns.l7.l8.l9.l10c4.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.4.7 +$ORIGIN l7.l8.l9.l10c4.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l6 IN NS +SECTION AUTHORITY +l6 IN NS ns.l6 +SECTION ADDITIONAL +ns.l6 IN A 1.3.4.6 +ENTRY_END +RANGE_END + +; ns.l6.l7.l8.l9.l10c4.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.4.6 +$ORIGIN l6.l7.l8.l9.l10c4.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l5 IN NS +SECTION AUTHORITY +l5 IN NS ns.l5 +SECTION ADDITIONAL +ns.l5 IN A 1.3.4.5 +ENTRY_END +RANGE_END + +; ns.l5.l6.l7.l8.l9.l10c4.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.4.5 +$ORIGIN l5.l6.l7.l8.l9.l10c4.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l4 IN NS +SECTION AUTHORITY +l4 IN NS ns.l4 +SECTION ADDITIONAL +ns.l4 IN A 1.3.4.4 +ENTRY_END +RANGE_END + +; ns.l4.l5.l6.l7.l8.l9.l10c4.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.4.4 +$ORIGIN l4.l5.l6.l7.l8.l9.l10c4.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l3 IN NS +SECTION AUTHORITY +l3 IN NS ns.l3 +SECTION ADDITIONAL +ns.l3 IN A 1.3.4.3 +ENTRY_END +RANGE_END + +; ns.l3.l4.l5.l6.l7.l8.l9.l10c4.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.4.3 +$ORIGIN l3.l4.l5.l6.l7.l8.l9.l10c4.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l2 IN NS +SECTION AUTHORITY +l2 IN NS ns.l2 +SECTION ADDITIONAL +ns.l2 IN A 1.3.4.2 +ENTRY_END +RANGE_END + +; ns.l2.l3.l4.l5.l6.l7.l8.l9.l10c4.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.4.2 +$ORIGIN l2.l3.l4.l5.l6.l7.l8.l9.l10c4.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l1 IN NS +SECTION AUTHORITY +l1 IN NS ns.l1 +SECTION ADDITIONAL +ns.l1 IN A 1.3.4.1 +ENTRY_END +RANGE_END + +; ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c4.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.4.1 +$ORIGIN l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c4.com. +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN A +SECTION ANSWER +ns IN A 1.3.4.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN AAAA +SECTION AUTHORITY +@ SOA ns host 2018060423 3600 300 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.c4.com. IN A +SECTION ANSWER +www.c4.com. IN CNAME www.c5.com. +ENTRY_END +RANGE_END +; ns.l10c5.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.5.10 +$ORIGIN l10c5.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l9 IN NS +SECTION AUTHORITY +l9 IN NS ns.l9 +SECTION ADDITIONAL +ns.l9 IN A 1.3.5.9 +ENTRY_END +RANGE_END + +; ns.l9.l10c5.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.5.9 +$ORIGIN l9.l10c5.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l8 IN NS +SECTION AUTHORITY +l8 IN NS ns.l8 +SECTION ADDITIONAL +ns.l8 IN A 1.3.5.8 +ENTRY_END +RANGE_END + +; ns.l8.l9.l10c5.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.5.8 +$ORIGIN l8.l9.l10c5.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l7 IN NS +SECTION AUTHORITY +l7 IN NS ns.l7 +SECTION ADDITIONAL +ns.l7 IN A 1.3.5.7 +ENTRY_END +RANGE_END + +; ns.l7.l8.l9.l10c5.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.5.7 +$ORIGIN l7.l8.l9.l10c5.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l6 IN NS +SECTION AUTHORITY +l6 IN NS ns.l6 +SECTION ADDITIONAL +ns.l6 IN A 1.3.5.6 +ENTRY_END +RANGE_END + +; ns.l6.l7.l8.l9.l10c5.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.5.6 +$ORIGIN l6.l7.l8.l9.l10c5.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l5 IN NS +SECTION AUTHORITY +l5 IN NS ns.l5 +SECTION ADDITIONAL +ns.l5 IN A 1.3.5.5 +ENTRY_END +RANGE_END + +; ns.l5.l6.l7.l8.l9.l10c5.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.5.5 +$ORIGIN l5.l6.l7.l8.l9.l10c5.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l4 IN NS +SECTION AUTHORITY +l4 IN NS ns.l4 +SECTION ADDITIONAL +ns.l4 IN A 1.3.5.4 +ENTRY_END +RANGE_END + +; ns.l4.l5.l6.l7.l8.l9.l10c5.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.5.4 +$ORIGIN l4.l5.l6.l7.l8.l9.l10c5.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l3 IN NS +SECTION AUTHORITY +l3 IN NS ns.l3 +SECTION ADDITIONAL +ns.l3 IN A 1.3.5.3 +ENTRY_END +RANGE_END + +; ns.l3.l4.l5.l6.l7.l8.l9.l10c5.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.5.3 +$ORIGIN l3.l4.l5.l6.l7.l8.l9.l10c5.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l2 IN NS +SECTION AUTHORITY +l2 IN NS ns.l2 +SECTION ADDITIONAL +ns.l2 IN A 1.3.5.2 +ENTRY_END +RANGE_END + +; ns.l2.l3.l4.l5.l6.l7.l8.l9.l10c5.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.5.2 +$ORIGIN l2.l3.l4.l5.l6.l7.l8.l9.l10c5.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l1 IN NS +SECTION AUTHORITY +l1 IN NS ns.l1 +SECTION ADDITIONAL +ns.l1 IN A 1.3.5.1 +ENTRY_END +RANGE_END + +; ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c5.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.5.1 +$ORIGIN l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c5.com. +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN A +SECTION ANSWER +ns IN A 1.3.5.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN AAAA +SECTION AUTHORITY +@ SOA ns host 2018060423 3600 300 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.c5.com. IN A +SECTION ANSWER +www.c5.com. IN CNAME www.c6.com. +ENTRY_END +RANGE_END +; ns.l10c6.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.6.10 +$ORIGIN l10c6.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l9 IN NS +SECTION AUTHORITY +l9 IN NS ns.l9 +SECTION ADDITIONAL +ns.l9 IN A 1.3.6.9 +ENTRY_END +RANGE_END + +; ns.l9.l10c6.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.6.9 +$ORIGIN l9.l10c6.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l8 IN NS +SECTION AUTHORITY +l8 IN NS ns.l8 +SECTION ADDITIONAL +ns.l8 IN A 1.3.6.8 +ENTRY_END +RANGE_END + +; ns.l8.l9.l10c6.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.6.8 +$ORIGIN l8.l9.l10c6.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l7 IN NS +SECTION AUTHORITY +l7 IN NS ns.l7 +SECTION ADDITIONAL +ns.l7 IN A 1.3.6.7 +ENTRY_END +RANGE_END + +; ns.l7.l8.l9.l10c6.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.6.7 +$ORIGIN l7.l8.l9.l10c6.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l6 IN NS +SECTION AUTHORITY +l6 IN NS ns.l6 +SECTION ADDITIONAL +ns.l6 IN A 1.3.6.6 +ENTRY_END +RANGE_END + +; ns.l6.l7.l8.l9.l10c6.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.6.6 +$ORIGIN l6.l7.l8.l9.l10c6.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l5 IN NS +SECTION AUTHORITY +l5 IN NS ns.l5 +SECTION ADDITIONAL +ns.l5 IN A 1.3.6.5 +ENTRY_END +RANGE_END + +; ns.l5.l6.l7.l8.l9.l10c6.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.6.5 +$ORIGIN l5.l6.l7.l8.l9.l10c6.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l4 IN NS +SECTION AUTHORITY +l4 IN NS ns.l4 +SECTION ADDITIONAL +ns.l4 IN A 1.3.6.4 +ENTRY_END +RANGE_END + +; ns.l4.l5.l6.l7.l8.l9.l10c6.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.6.4 +$ORIGIN l4.l5.l6.l7.l8.l9.l10c6.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l3 IN NS +SECTION AUTHORITY +l3 IN NS ns.l3 +SECTION ADDITIONAL +ns.l3 IN A 1.3.6.3 +ENTRY_END +RANGE_END + +; ns.l3.l4.l5.l6.l7.l8.l9.l10c6.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.6.3 +$ORIGIN l3.l4.l5.l6.l7.l8.l9.l10c6.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l2 IN NS +SECTION AUTHORITY +l2 IN NS ns.l2 +SECTION ADDITIONAL +ns.l2 IN A 1.3.6.2 +ENTRY_END +RANGE_END + +; ns.l2.l3.l4.l5.l6.l7.l8.l9.l10c6.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.6.2 +$ORIGIN l2.l3.l4.l5.l6.l7.l8.l9.l10c6.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l1 IN NS +SECTION AUTHORITY +l1 IN NS ns.l1 +SECTION ADDITIONAL +ns.l1 IN A 1.3.6.1 +ENTRY_END +RANGE_END + +; ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c6.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.6.1 +$ORIGIN l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c6.com. +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN A +SECTION ANSWER +ns IN A 1.3.6.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN AAAA +SECTION AUTHORITY +@ SOA ns host 2018060423 3600 300 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.c6.com. IN A +SECTION ANSWER +www.c6.com. IN CNAME www.c7.com. +ENTRY_END +RANGE_END +; ns.l10c7.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.7.10 +$ORIGIN l10c7.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l9 IN NS +SECTION AUTHORITY +l9 IN NS ns.l9 +SECTION ADDITIONAL +ns.l9 IN A 1.3.7.9 +ENTRY_END +RANGE_END + +; ns.l9.l10c7.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.7.9 +$ORIGIN l9.l10c7.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l8 IN NS +SECTION AUTHORITY +l8 IN NS ns.l8 +SECTION ADDITIONAL +ns.l8 IN A 1.3.7.8 +ENTRY_END +RANGE_END + +; ns.l8.l9.l10c7.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.7.8 +$ORIGIN l8.l9.l10c7.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l7 IN NS +SECTION AUTHORITY +l7 IN NS ns.l7 +SECTION ADDITIONAL +ns.l7 IN A 1.3.7.7 +ENTRY_END +RANGE_END + +; ns.l7.l8.l9.l10c7.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.7.7 +$ORIGIN l7.l8.l9.l10c7.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l6 IN NS +SECTION AUTHORITY +l6 IN NS ns.l6 +SECTION ADDITIONAL +ns.l6 IN A 1.3.7.6 +ENTRY_END +RANGE_END + +; ns.l6.l7.l8.l9.l10c7.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.7.6 +$ORIGIN l6.l7.l8.l9.l10c7.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l5 IN NS +SECTION AUTHORITY +l5 IN NS ns.l5 +SECTION ADDITIONAL +ns.l5 IN A 1.3.7.5 +ENTRY_END +RANGE_END + +; ns.l5.l6.l7.l8.l9.l10c7.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.7.5 +$ORIGIN l5.l6.l7.l8.l9.l10c7.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l4 IN NS +SECTION AUTHORITY +l4 IN NS ns.l4 +SECTION ADDITIONAL +ns.l4 IN A 1.3.7.4 +ENTRY_END +RANGE_END + +; ns.l4.l5.l6.l7.l8.l9.l10c7.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.7.4 +$ORIGIN l4.l5.l6.l7.l8.l9.l10c7.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l3 IN NS +SECTION AUTHORITY +l3 IN NS ns.l3 +SECTION ADDITIONAL +ns.l3 IN A 1.3.7.3 +ENTRY_END +RANGE_END + +; ns.l3.l4.l5.l6.l7.l8.l9.l10c7.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.7.3 +$ORIGIN l3.l4.l5.l6.l7.l8.l9.l10c7.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l2 IN NS +SECTION AUTHORITY +l2 IN NS ns.l2 +SECTION ADDITIONAL +ns.l2 IN A 1.3.7.2 +ENTRY_END +RANGE_END + +; ns.l2.l3.l4.l5.l6.l7.l8.l9.l10c7.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.7.2 +$ORIGIN l2.l3.l4.l5.l6.l7.l8.l9.l10c7.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l1 IN NS +SECTION AUTHORITY +l1 IN NS ns.l1 +SECTION ADDITIONAL +ns.l1 IN A 1.3.7.1 +ENTRY_END +RANGE_END + +; ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c7.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.7.1 +$ORIGIN l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c7.com. +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN A +SECTION ANSWER +ns IN A 1.3.7.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN AAAA +SECTION AUTHORITY +@ SOA ns host 2018060423 3600 300 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.c7.com. IN A +SECTION ANSWER +www.c7.com. IN CNAME www.c8.com. +ENTRY_END +RANGE_END +; ns.l10c8.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.8.10 +$ORIGIN l10c8.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l9 IN NS +SECTION AUTHORITY +l9 IN NS ns.l9 +SECTION ADDITIONAL +ns.l9 IN A 1.3.8.9 +ENTRY_END +RANGE_END + +; ns.l9.l10c8.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.8.9 +$ORIGIN l9.l10c8.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l8 IN NS +SECTION AUTHORITY +l8 IN NS ns.l8 +SECTION ADDITIONAL +ns.l8 IN A 1.3.8.8 +ENTRY_END +RANGE_END + +; ns.l8.l9.l10c8.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.8.8 +$ORIGIN l8.l9.l10c8.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l7 IN NS +SECTION AUTHORITY +l7 IN NS ns.l7 +SECTION ADDITIONAL +ns.l7 IN A 1.3.8.7 +ENTRY_END +RANGE_END + +; ns.l7.l8.l9.l10c8.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.8.7 +$ORIGIN l7.l8.l9.l10c8.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l6 IN NS +SECTION AUTHORITY +l6 IN NS ns.l6 +SECTION ADDITIONAL +ns.l6 IN A 1.3.8.6 +ENTRY_END +RANGE_END + +; ns.l6.l7.l8.l9.l10c8.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.8.6 +$ORIGIN l6.l7.l8.l9.l10c8.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l5 IN NS +SECTION AUTHORITY +l5 IN NS ns.l5 +SECTION ADDITIONAL +ns.l5 IN A 1.3.8.5 +ENTRY_END +RANGE_END + +; ns.l5.l6.l7.l8.l9.l10c8.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.8.5 +$ORIGIN l5.l6.l7.l8.l9.l10c8.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l4 IN NS +SECTION AUTHORITY +l4 IN NS ns.l4 +SECTION ADDITIONAL +ns.l4 IN A 1.3.8.4 +ENTRY_END +RANGE_END + +; ns.l4.l5.l6.l7.l8.l9.l10c8.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.8.4 +$ORIGIN l4.l5.l6.l7.l8.l9.l10c8.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l3 IN NS +SECTION AUTHORITY +l3 IN NS ns.l3 +SECTION ADDITIONAL +ns.l3 IN A 1.3.8.3 +ENTRY_END +RANGE_END + +; ns.l3.l4.l5.l6.l7.l8.l9.l10c8.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.8.3 +$ORIGIN l3.l4.l5.l6.l7.l8.l9.l10c8.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l2 IN NS +SECTION AUTHORITY +l2 IN NS ns.l2 +SECTION ADDITIONAL +ns.l2 IN A 1.3.8.2 +ENTRY_END +RANGE_END + +; ns.l2.l3.l4.l5.l6.l7.l8.l9.l10c8.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.8.2 +$ORIGIN l2.l3.l4.l5.l6.l7.l8.l9.l10c8.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l1 IN NS +SECTION AUTHORITY +l1 IN NS ns.l1 +SECTION ADDITIONAL +ns.l1 IN A 1.3.8.1 +ENTRY_END +RANGE_END + +; ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c8.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.8.1 +$ORIGIN l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c8.com. +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN A +SECTION ANSWER +ns IN A 1.3.8.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN AAAA +SECTION AUTHORITY +@ SOA ns host 2018060423 3600 300 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.c8.com. IN A +SECTION ANSWER +www.c8.com. IN CNAME www.c9.com. +ENTRY_END +RANGE_END +; ns.l10c9.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.9.10 +$ORIGIN l10c9.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l9 IN NS +SECTION AUTHORITY +l9 IN NS ns.l9 +SECTION ADDITIONAL +ns.l9 IN A 1.3.9.9 +ENTRY_END +RANGE_END + +; ns.l9.l10c9.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.9.9 +$ORIGIN l9.l10c9.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l8 IN NS +SECTION AUTHORITY +l8 IN NS ns.l8 +SECTION ADDITIONAL +ns.l8 IN A 1.3.9.8 +ENTRY_END +RANGE_END + +; ns.l8.l9.l10c9.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.9.8 +$ORIGIN l8.l9.l10c9.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l7 IN NS +SECTION AUTHORITY +l7 IN NS ns.l7 +SECTION ADDITIONAL +ns.l7 IN A 1.3.9.7 +ENTRY_END +RANGE_END + +; ns.l7.l8.l9.l10c9.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.9.7 +$ORIGIN l7.l8.l9.l10c9.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l6 IN NS +SECTION AUTHORITY +l6 IN NS ns.l6 +SECTION ADDITIONAL +ns.l6 IN A 1.3.9.6 +ENTRY_END +RANGE_END + +; ns.l6.l7.l8.l9.l10c9.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.9.6 +$ORIGIN l6.l7.l8.l9.l10c9.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l5 IN NS +SECTION AUTHORITY +l5 IN NS ns.l5 +SECTION ADDITIONAL +ns.l5 IN A 1.3.9.5 +ENTRY_END +RANGE_END + +; ns.l5.l6.l7.l8.l9.l10c9.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.9.5 +$ORIGIN l5.l6.l7.l8.l9.l10c9.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l4 IN NS +SECTION AUTHORITY +l4 IN NS ns.l4 +SECTION ADDITIONAL +ns.l4 IN A 1.3.9.4 +ENTRY_END +RANGE_END + +; ns.l4.l5.l6.l7.l8.l9.l10c9.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.9.4 +$ORIGIN l4.l5.l6.l7.l8.l9.l10c9.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l3 IN NS +SECTION AUTHORITY +l3 IN NS ns.l3 +SECTION ADDITIONAL +ns.l3 IN A 1.3.9.3 +ENTRY_END +RANGE_END + +; ns.l3.l4.l5.l6.l7.l8.l9.l10c9.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.9.3 +$ORIGIN l3.l4.l5.l6.l7.l8.l9.l10c9.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l2 IN NS +SECTION AUTHORITY +l2 IN NS ns.l2 +SECTION ADDITIONAL +ns.l2 IN A 1.3.9.2 +ENTRY_END +RANGE_END + +; ns.l2.l3.l4.l5.l6.l7.l8.l9.l10c9.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.9.2 +$ORIGIN l2.l3.l4.l5.l6.l7.l8.l9.l10c9.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l1 IN NS +SECTION AUTHORITY +l1 IN NS ns.l1 +SECTION ADDITIONAL +ns.l1 IN A 1.3.9.1 +ENTRY_END +RANGE_END + +; ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c9.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.9.1 +$ORIGIN l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c9.com. +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN A +SECTION ANSWER +ns IN A 1.3.9.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN AAAA +SECTION AUTHORITY +@ SOA ns host 2018060423 3600 300 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.c9.com. IN A +SECTION ANSWER +www.c9.com. IN CNAME www.c10.com. +ENTRY_END +RANGE_END +; ns.l10c10.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.10.10 +$ORIGIN l10c10.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l9 IN NS +SECTION AUTHORITY +l9 IN NS ns.l9 +SECTION ADDITIONAL +ns.l9 IN A 1.3.10.9 +ENTRY_END +RANGE_END + +; ns.l9.l10c10.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.10.9 +$ORIGIN l9.l10c10.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l8 IN NS +SECTION AUTHORITY +l8 IN NS ns.l8 +SECTION ADDITIONAL +ns.l8 IN A 1.3.10.8 +ENTRY_END +RANGE_END + +; ns.l8.l9.l10c10.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.10.8 +$ORIGIN l8.l9.l10c10.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l7 IN NS +SECTION AUTHORITY +l7 IN NS ns.l7 +SECTION ADDITIONAL +ns.l7 IN A 1.3.10.7 +ENTRY_END +RANGE_END + +; ns.l7.l8.l9.l10c10.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.10.7 +$ORIGIN l7.l8.l9.l10c10.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l6 IN NS +SECTION AUTHORITY +l6 IN NS ns.l6 +SECTION ADDITIONAL +ns.l6 IN A 1.3.10.6 +ENTRY_END +RANGE_END + +; ns.l6.l7.l8.l9.l10c10.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.10.6 +$ORIGIN l6.l7.l8.l9.l10c10.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l5 IN NS +SECTION AUTHORITY +l5 IN NS ns.l5 +SECTION ADDITIONAL +ns.l5 IN A 1.3.10.5 +ENTRY_END +RANGE_END + +; ns.l5.l6.l7.l8.l9.l10c10.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.10.5 +$ORIGIN l5.l6.l7.l8.l9.l10c10.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l4 IN NS +SECTION AUTHORITY +l4 IN NS ns.l4 +SECTION ADDITIONAL +ns.l4 IN A 1.3.10.4 +ENTRY_END +RANGE_END + +; ns.l4.l5.l6.l7.l8.l9.l10c10.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.10.4 +$ORIGIN l4.l5.l6.l7.l8.l9.l10c10.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l3 IN NS +SECTION AUTHORITY +l3 IN NS ns.l3 +SECTION ADDITIONAL +ns.l3 IN A 1.3.10.3 +ENTRY_END +RANGE_END + +; ns.l3.l4.l5.l6.l7.l8.l9.l10c10.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.10.3 +$ORIGIN l3.l4.l5.l6.l7.l8.l9.l10c10.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l2 IN NS +SECTION AUTHORITY +l2 IN NS ns.l2 +SECTION ADDITIONAL +ns.l2 IN A 1.3.10.2 +ENTRY_END +RANGE_END + +; ns.l2.l3.l4.l5.l6.l7.l8.l9.l10c10.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.10.2 +$ORIGIN l2.l3.l4.l5.l6.l7.l8.l9.l10c10.com. +ENTRY_BEGIN +MATCH opcode subdomain +ADJUST copy_id copy_query +REPLY QR NOERROR +SECTION QUESTION +l1 IN NS +SECTION AUTHORITY +l1 IN NS ns.l1 +SECTION ADDITIONAL +ns.l1 IN A 1.3.10.1 +ENTRY_END +RANGE_END + +; ns.l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c10.com. +RANGE_BEGIN 0 100 + ADDRESS 1.3.10.1 +$ORIGIN l1.l2.l3.l4.l5.l6.l7.l8.l9.l10c10.com. +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN A +SECTION ANSWER +ns IN A 1.3.10.1 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +ns IN AAAA +SECTION AUTHORITY +@ SOA ns host 2018060423 3600 300 86400 3600 +ENTRY_END + +ENTRY_BEGIN +MATCH opcode qtype qname +ADJUST copy_id +REPLY QR AA NOERROR +SECTION QUESTION +www.c10.com. IN A +SECTION ANSWER +www.c10.com. IN CNAME www.foo.com. +ENTRY_END +RANGE_END + +STEP 1 QUERY +ENTRY_BEGIN +REPLY RD +SECTION QUESTION +www.example.com. IN A +ENTRY_END + +STEP 10 CHECK_ANSWER +ENTRY_BEGIN +MATCH all +REPLY QR RD RA SERVFAIL +SECTION QUESTION +www.example.com. IN A +SECTION ANSWER +; This is the answer that is exceeding the global quota. +; www.example.com. IN CNAME www.c1.com. +; www.c1.com. IN CNAME www.c2.com. +; www.c2.com. IN CNAME www.c3.com. +; www.c3.com. IN CNAME www.c4.com. +; www.c4.com. IN CNAME www.c5.com. +; www.c5.com. IN CNAME www.c6.com. +; www.c6.com. IN CNAME www.c7.com. +; www.c7.com. IN CNAME www.c8.com. +; www.c8.com. IN CNAME www.c9.com. +; www.c9.com. IN CNAME www.c10.com. +; www.c10.com. IN CNAME www.foo.com. +; www.foo.com. IN A 1.2.3.4 +ENTRY_END + +STEP 20 TRAFFIC + +SCENARIO_END diff --git a/util/config_file.c b/util/config_file.c index 9a93befd3..bd6f8f40b 100644 --- a/util/config_file.c +++ b/util/config_file.c @@ -408,6 +408,9 @@ config_create(void) cfg->ipset_name_v6 = NULL; #endif cfg->ede = 0; + cfg->iter_scrub_ns = 20; + cfg->iter_scrub_cname = 11; + cfg->max_global_quota = 128; return cfg; error_exit: config_delete(cfg); @@ -718,6 +721,9 @@ int config_set_option(struct config_file* cfg, const char* opt, else S_NUMBER_OR_ZERO("serve-expired-client-timeout:", serve_expired_client_timeout) else S_YNO("ede:", ede) else S_YNO("ede-serve-expired:", ede_serve_expired) + else S_NUMBER_OR_ZERO("iter-scrub-ns:", iter_scrub_ns) + else S_NUMBER_OR_ZERO("iter-scrub-cname:", iter_scrub_cname) + else S_NUMBER_OR_ZERO("max-global-quota:", max_global_quota) else S_YNO("serve-original-ttl:", serve_original_ttl) else S_STR("val-nsec3-keysize-iterations:", val_nsec3_key_iterations) else S_YNO("zonemd-permissive-mode:", zonemd_permissive_mode) @@ -1186,6 +1192,9 @@ config_get_option(struct config_file* cfg, const char* opt, else O_DEC(opt, "serve-expired-client-timeout", serve_expired_client_timeout) else O_YNO(opt, "ede", ede) else O_YNO(opt, "ede-serve-expired", ede_serve_expired) + else O_DEC(opt, "iter-scrub-ns", iter_scrub_ns) + else O_DEC(opt, "iter-scrub-cname", iter_scrub_cname) + else O_DEC(opt, "max-global-quota", max_global_quota) else O_YNO(opt, "serve-original-ttl", serve_original_ttl) else O_STR(opt, "val-nsec3-keysize-iterations",val_nsec3_key_iterations) else O_YNO(opt, "zonemd-permissive-mode", zonemd_permissive_mode) @@ -2389,6 +2398,7 @@ config_apply(struct config_file* config) MINIMAL_RESPONSES = config->minimal_responses; RRSET_ROUNDROBIN = config->rrset_roundrobin; LOG_TAG_QUERYREPLY = config->log_tag_queryreply; + MAX_GLOBAL_QUOTA = config->max_global_quota; UNKNOWN_SERVER_NICENESS = config->unknown_server_time_limit; USEFUL_SERVER_TOP_TIMEOUT = RTT_MAX_TIMEOUT; BLACKLIST_PENALTY = USEFUL_SERVER_TOP_TIMEOUT*4; diff --git a/util/config_file.h b/util/config_file.h index 23aacc67a..6b16efa63 100644 --- a/util/config_file.h +++ b/util/config_file.h @@ -760,6 +760,12 @@ struct config_file { #endif /** respond with Extended DNS Errors (RFC8914) */ int ede; + /** limit on NS RRs in RRset for the iterator scrubber. */ + size_t iter_scrub_ns; + /** limit on CNAME, DNAME RRs in answer for the iterator scrubber. */ + int iter_scrub_cname; + /** limit on upstream queries for an incoming query and subqueries. */ + int max_global_quota; }; /** from cfg username, after daemonize setup performed */ diff --git a/util/configlexer.lex b/util/configlexer.lex index cd5062092..9a95dc078 100644 --- a/util/configlexer.lex +++ b/util/configlexer.lex @@ -588,6 +588,9 @@ edns-client-string-opcode{COLON} { YDVAR(1, VAR_EDNS_CLIENT_STRING_OPCODE) } nsid{COLON} { YDVAR(1, VAR_NSID ) } ede{COLON} { YDVAR(1, VAR_EDE ) } proxy-protocol-port{COLON} { YDVAR(1, VAR_PROXY_PROTOCOL_PORT) } +iter-scrub-ns{COLON} { YDVAR(1, VAR_ITER_SCRUB_NS) } +iter-scrub-cname{COLON} { YDVAR(1, VAR_ITER_SCRUB_CNAME) } +max-global-quota{COLON} { YDVAR(1, VAR_MAX_GLOBAL_QUOTA) } {NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; } /* Quoted strings. Strip leading and ending quotes */ diff --git a/util/configparser.y b/util/configparser.y index b650b8109..0ab15f8eb 100644 --- a/util/configparser.y +++ b/util/configparser.y @@ -205,7 +205,8 @@ extern struct config_parser_state* cfg_parser; %token VAR_PROXY_PROTOCOL_PORT VAR_STATISTICS_INHIBIT_ZERO %token VAR_HARDEN_UNKNOWN_ADDITIONAL VAR_DISABLE_EDNS_DO VAR_CACHEDB_NO_STORE %token VAR_LOG_DESTADDR VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED -%token VAR_COOKIE_SECRET_FILE +%token VAR_COOKIE_SECRET_FILE VAR_ITER_SCRUB_NS VAR_ITER_SCRUB_CNAME +%token VAR_MAX_GLOBAL_QUOTA %% toplevelvars: /* empty */ | toplevelvars toplevelvar ; @@ -343,7 +344,8 @@ content_server: server_num_threads | server_verbosity | server_port | server_interface_automatic_ports | server_ede | server_proxy_protocol_port | server_statistics_inhibit_zero | server_harden_unknown_additional | server_disable_edns_do | - server_log_destaddr | server_cookie_secret_file + server_log_destaddr | server_cookie_secret_file | + server_iter_scrub_ns | server_iter_scrub_cname | server_max_global_quota ; stubstart: VAR_STUB_ZONE { @@ -4006,6 +4008,33 @@ server_cookie_secret_file: VAR_COOKIE_SECRET_FILE STRING_ARG cfg_parser->cfg->cookie_secret_file = $2; } ; +server_iter_scrub_ns: VAR_ITER_SCRUB_NS STRING_ARG + { + OUTYY(("P(server_iter_scrub_ns:%s)\n", $2)); + if(atoi($2) == 0 && strcmp($2, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->iter_scrub_ns = atoi($2); + free($2); + } + ; +server_iter_scrub_cname: VAR_ITER_SCRUB_CNAME STRING_ARG + { + OUTYY(("P(server_iter_scrub_cname:%s)\n", $2)); + if(atoi($2) == 0 && strcmp($2, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->iter_scrub_cname = atoi($2); + free($2); + } + ; +server_max_global_quota: VAR_MAX_GLOBAL_QUOTA STRING_ARG + { + OUTYY(("P(server_max_global_quota:%s)\n", $2)); + if(atoi($2) == 0 && strcmp($2, "0") != 0) + yyerror("number expected"); + else cfg_parser->cfg->max_global_quota = atoi($2); + free($2); + } + ; ipsetstart: VAR_IPSET { OUTYY(("\nP(ipset:)\n"));