From 60ba27177ed5b6ed810c4f0bf969584ea240ecb9 Mon Sep 17 00:00:00 2001 From: Nipa Kumar Date: Mon, 22 Feb 2016 16:28:59 -0800 Subject: [PATCH] Default zones will have an empty forwarders {} list. 1) Add default zone config (A records) with empty forwarders list {}. This results in contrail-named daemon delegating the subzone using NS records configured. Adding forwarders list under zone ensure the rule applied for a zone. Previously as the forwarders list was under view level, for any records not in local-cache within the zone, resulted in queries being forwarded. 2) Add RR zones (PTR records) with an empty forwarders list. This will result in DNS not trying to resolve the PTR records when RR is disabled. 3) When dns forwarder is configured, this will apply at view level and zone level will not be empty anymore. 4) When dns forwarder is configures, zone level will be empty only if RR is diabled for PTR records. view "default-domain-vdns-1" { rrset-order {order random;}; virtual-forwarder "default-domain-vdns-2"; zone "1.1.21.in-addr.arpa." IN { type master; file "/etc/contrail/dns/default-domain-vdns-1.1.1.21.in-addr.arpa.zone"; allow-update {127.0.0.1;}; }; zone "new.net" IN { type master; file "/etc/contrail/dns/default-domain-vdns-1.new.net.zone"; allow-update {127.0.0.1;}; }; }; view "default-domain-vdns-2" { rrset-order {order random;}; forwarders {8.8.8.8; 10.84.5.100; 172.21.200.60; 172.29.131.60; }; zone "1.1.31.in-addr.arpa." IN { type master; file "/etc/contrail/dns/default-domain-vdns-2.1.1.31.in-addr.arpa.zone"; allow-update {127.0.0.1;}; forwarders { }; }; zone "4.4.4.in-addr.arpa." IN { type master; file "/etc/contrail/dns/default-domain-vdns-2.4.4.4.in-addr.arpa.zone"; allow-update {127.0.0.1;}; forwarders { }; }; zone "new.net" IN { type master; file "/etc/contrail/dns/default-domain-vdns-2.new.net.zone"; allow-update {127.0.0.1;}; forwarders { }; }; }; view "default-domain-vdns-ns-record" { rrset-order {order random;}; forwarders {8.8.8.8; 10.84.5.100; 172.21.200.60; 172.29.131.60; }; zone "2.2.2.in-addr.arpa." IN { type master; file "/etc/contrail/dns/default-domain-vdns-ns-record.2.2.2.in-addr.arpa.zone"; allow-update {127.0.0.1;}; forwarders { }; }; zone "6.6.6.in-addr.arpa." IN { type master; file "/etc/contrail/dns/default-domain-vdns-ns-record.6.6.6.in-addr.arpa.zone"; allow-update {127.0.0.1;}; forwarders { }; }; zone "abc.net" IN { type master; file "/etc/contrail/dns/default-domain-vdns-ns-record.abc.net.zone"; allow-update {127.0.0.1;}; forwarders { }; }; }; Change-Id: I3a573c771d09a247a0627fab3734af7f176f66ff Closes-Bug:1547236 Closes-Bug:1542516 --- src/dns/bind/named_config.cc | 25 ++- src/dns/bind/named_config.h | 2 +- src/dns/mgr/dns_mgr.cc | 6 +- src/dns/test/dns_bind_test.cc | 70 ++++---- src/dns/testdata/named.conf.rr_ext_disabled | 162 +++++++++++++++++ src/dns/testdata/named.conf.rr_ext_disabled.2 | 168 ++++++++++++++++++ 6 files changed, 385 insertions(+), 48 deletions(-) create mode 100644 src/dns/testdata/named.conf.rr_ext_disabled create mode 100644 src/dns/testdata/named.conf.rr_ext_disabled.2 diff --git a/src/dns/bind/named_config.cc b/src/dns/bind/named_config.cc index e07b74ccd8a..1c3d01189d8 100644 --- a/src/dns/bind/named_config.cc +++ b/src/dns/bind/named_config.cc @@ -74,13 +74,6 @@ void NamedConfig::ChangeView(const VirtualDnsConfig *vdns) { zones.push_back(old_domain); RemoveZoneFiles(vdns, zones); } - // If reverse resolution is disabled now, remove the reverse zone files - bool reverse_resolution = vdns->IsReverseResolutionEnabled(); - if (!reverse_resolution && vdns->HasReverseResolutionChanged()) { - ZoneList zones; - MakeReverseZoneList(vdns, zones); - RemoveZoneFiles(vdns, zones); - } } void NamedConfig::DelView(const VirtualDnsConfig *vdns) { @@ -262,11 +255,13 @@ void NamedConfig::WriteViewConfig(const VirtualDnsConfig *updated_vdns) { file_ << " forwarders {" << default_forwarders_ << "};" << endl; } + bool reverse_resolution = curr_vdns->IsReverseResolutionEnabled(); for (unsigned int i = 0; i < zones.size(); i++) { - WriteZone(view_name, zones[i], true); + WriteZone(view_name, zones[i], true, reverse_resolution, next_dns); // update the zone view map, to be used to generate default view if (curr_vdns->IsExternalVisible()) zone_view_map.insert(ZoneViewPair(zones[i], view_name)); + } file_ << "};" << endl << endl; @@ -290,18 +285,25 @@ void NamedConfig::WriteDefaultView(ZoneViewMap &zone_view_map) { } for (ZoneViewMap::iterator it = zone_view_map.begin(); it != zone_view_map.end(); ++it) { - WriteZone(it->second, it->first, false); + WriteZone(it->second, it->first, false, false, ""); } file_ << "};" << endl << endl; } void NamedConfig::WriteZone(const string &vdns, const string &name, - bool is_master) { + bool is_master, bool is_rr, const string &next_dns) { file_ << " zone \"" << name << "\" IN \{" << endl; if (is_master) { file_ << " type master;" << endl; file_ << " file \"" << GetZoneFilePath(vdns, name) << "\";" << endl; file_ << " allow-update {127.0.0.1;};" << endl; + if (!next_dns.empty()) { + if (!is_rr && (name.find("in-addr.arpa") != std::string::npos)) { + file_ << " forwarders { };" << endl; + } + } else { + file_ << " forwarders { };" << endl; + } } else { file_ << " type static-stub;" << endl; file_ << " virtual-server-name \"" << vdns << "\";" << endl; @@ -404,9 +406,6 @@ void NamedConfig::MakeZoneList(const VirtualDnsConfig *vdns_config, zones.push_back(dns_domain); // Reverse zones - if (!vdns_config->IsReverseResolutionEnabled()) { - return; - } MakeReverseZoneList(vdns_config, zones); } diff --git a/src/dns/bind/named_config.h b/src/dns/bind/named_config.h index f704e6e8d1d..37a2339af01 100644 --- a/src/dns/bind/named_config.h +++ b/src/dns/bind/named_config.h @@ -113,7 +113,7 @@ class NamedConfig { void WriteViewConfig(const VirtualDnsConfig *updated_vdns); void WriteDefaultView(ZoneViewMap &zone_view_map); void WriteZone(const std::string &vdns, const std::string &name, - bool is_master); + bool is_master, bool is_rr, const std::string &next_dns); void AddZoneFiles(ZoneList &zones, const VirtualDnsConfig *vdns); void RemoveZoneFile(const VirtualDnsConfig *vdns, std::string &zone); std::string GetZoneNSName(const std::string domain_name); diff --git a/src/dns/mgr/dns_mgr.cc b/src/dns/mgr/dns_mgr.cc index 9486c281532..117223801b6 100644 --- a/src/dns/mgr/dns_mgr.cc +++ b/src/dns/mgr/dns_mgr.cc @@ -181,13 +181,13 @@ void DnsManager::DnsPtrZone(const Subnet &subnet, const VirtualDnsConfig *vdns, if (!bind_status_.IsUp()) return; - bool reverse_resolution = vdns->IsReverseResolutionEnabled(); std::string dns_domain = vdns->GetDomainName(); - if (dns_domain.empty() || !reverse_resolution) { + if (dns_domain.empty()) { DNS_BIND_TRACE(DnsBindTrace, "Ptr Zone <" << vdns->GetName() << "> ; ignoring event: " << DnsConfig::ToEventString(ev) << " Domain: " << dns_domain << " Reverse Resolution: " << - (reverse_resolution ? "enabled" : "disabled")); + (vdns->IsReverseResolutionEnabled()? "enabled" : + "disabled")); return; } diff --git a/src/dns/test/dns_bind_test.cc b/src/dns/test/dns_bind_test.cc index 20fc8cc7221..4b1a549fab0 100644 --- a/src/dns/test/dns_bind_test.cc +++ b/src/dns/test/dns_bind_test.cc @@ -271,16 +271,13 @@ TEST_F(DnsBindTest, Reordered) { boost::replace_all(content, "true", "false"); EXPECT_TRUE(parser_.Parse(content)); task_util::WaitForIdle(); - for (int i = 0; i < 4; i++) { + EXPECT_TRUE(FilesEqual(cfg->named_config_file().c_str(), + "controller/src/dns/testdata/named.conf.rr_ext_disabled")); + // Now we create all zones irrespective of reverse_resolution + for (int i = 0; i < 17; i++) { string s1 = cfg->GetZoneFilePath(dns_domains[i]); EXPECT_TRUE(FileExists(s1.c_str())); } - for (int i = 4; i < 17; i++) { - string s1 = cfg->GetZoneFilePath(dns_domains[i]); - EXPECT_FALSE(FileExists(s1.c_str())); - } - EXPECT_TRUE(FilesEqual(cfg->named_config_file().c_str(), - "controller/src/dns/testdata/named.conf.9")); // change external-visible and reverse_resolution fields to true boost::replace_all(content, "false", "true"); @@ -547,20 +544,21 @@ TEST_F(DnsBindTest, ReorderedExternalReverseResolutionDisabled) { }; EXPECT_TRUE(FilesEqual(cfg->named_config_file().c_str(), - "controller/src/dns/testdata/named.conf.9")); + "controller/src/dns/testdata/named.conf.rr_ext_disabled")); for (int i = 0; i < 4; i++) { string s1 = cfg->GetZoneFilePath(dns_domains[i]); EXPECT_TRUE(FileExists(s1.c_str())); } for (int i = 4; i < 17; i++) { string s1 = cfg->GetZoneFilePath(dns_domains[i]); - EXPECT_FALSE(FileExists(s1.c_str())); + EXPECT_TRUE(FileExists(s1.c_str())); } EXPECT_TRUE(FileExists("rndc.conf")); EXPECT_TRUE(FilesEqual("rndc.conf", "controller/src/dns/testdata/rndc.conf")); + // Case1 : Add subnet to an ipam const char config_change[] = "\ \ \ @@ -589,14 +587,16 @@ TEST_F(DnsBindTest, ReorderedExternalReverseResolutionDisabled) { } for (int i = 4; i < 17; i++) { string s1 = cfg->GetZoneFilePath(dns_domains[i]); - EXPECT_FALSE(FileExists(s1.c_str())); + EXPECT_TRUE(FileExists(s1.c_str())); } + string zone = "3.2.25.in-addr.arpa"; string s1 = cfg->GetZoneFilePath(zone); - EXPECT_FALSE(FileExists(s1.c_str())); - EXPECT_TRUE(FilesEqual(cfg->named_config_file().c_str(), - "controller/src/dns/testdata/named.conf.9")); + EXPECT_TRUE(FileExists(s1.c_str())); + EXPECT_FALSE(FilesEqual(cfg->named_config_file().c_str(), + "controller/src/dns/testdata/named.conf.rr_ext_disabled.2")); + // Case 2: Add and Delete a subnet from an ipam const char config_change_1[] = "\ \ \ @@ -648,24 +648,25 @@ TEST_F(DnsBindTest, ReorderedExternalReverseResolutionDisabled) { string new_dns_domains[] = { "3.2.129.in-addr.arpa", "3.2.130.in-addr.arpa", - "3.2.25.in-addr.arpa", }; + EXPECT_TRUE(parser_.Parse(config_change_1)); task_util::WaitForIdle(); - EXPECT_TRUE(FilesEqual(cfg->named_config_file().c_str(), - "controller/src/dns/testdata/named.conf.9")); - for (int i = 0; i < 4; i++) { + EXPECT_FALSE(FilesEqual(cfg->named_config_file().c_str(), + "controller/src/dns/testdata/named.conf.rr_ext_disabled")); + + for (int i = 0; i < 12; i++) { string s1 = cfg->GetZoneFilePath(dns_domains[i]); EXPECT_TRUE(FileExists(s1.c_str())); } - for (int i = 4; i < 17; i++) { + for (int i = 12; i < 17; i++) { string s1 = cfg->GetZoneFilePath(dns_domains[i]); EXPECT_FALSE(FileExists(s1.c_str())); } - for (int i = 0; i < 3; i++) { + for (int i = 0; i < 2; i++) { string s1 = cfg->GetZoneFilePath(new_dns_domains[i]); - EXPECT_FALSE(FileExists(s1.c_str())); + EXPECT_TRUE(FileExists(s1.c_str())); } const char config_change_2[] = "\ @@ -707,8 +708,19 @@ TEST_F(DnsBindTest, ReorderedExternalReverseResolutionDisabled) { EXPECT_TRUE(parser_.Parse(config_change_2)); task_util::WaitForIdle(); - EXPECT_TRUE(FilesEqual(cfg->named_config_file().c_str(), - "controller/src/dns/testdata/named.conf.9")); + + string deleted_dns_subnets[] = { + "3.2.129.in-addr.arpa", + "3.2.130.in-addr.arpa", + "13.2.12.in-addr.arpa", + }; + + for (int i = 0; i < 3; i++) { + string s1 = cfg->GetZoneFilePath(deleted_dns_subnets[i]); + EXPECT_FALSE(FileExists(s1.c_str())); + } + EXPECT_FALSE(FilesEqual(cfg->named_config_file().c_str(), + "controller/src/dns/testdata/named.conf.rr_ext_disabled")); const char config_change_3[] = "\ \ @@ -735,31 +747,31 @@ TEST_F(DnsBindTest, ReorderedExternalReverseResolutionDisabled) { string deleted_domains[] = { "3.2.129.in-addr.arpa", "3.2.130.in-addr.arpa", - "13.2.12.in-addr.arpa", "0.3.13.in-addr.arpa", + "13.2.12.in-addr.arpa", "1.3.13.in-addr.arpa", "2.3.13.in-addr.arpa", "3.3.13.in-addr.arpa", }; string remaining_domains[] = { - "3.2.25.in-addr.arpa", "192.1.1.in-addr.arpa", "193.1.1.in-addr.arpa", "3.2.1.in-addr.arpa", + "3.2.25.in-addr.arpa", }; EXPECT_TRUE(parser_.Parse(config_change_3)); task_util::WaitForIdle(); - EXPECT_TRUE(FilesEqual(cfg->named_config_file().c_str(), - "controller/src/dns/testdata/named.conf.9")); + EXPECT_FALSE(FilesEqual(cfg->named_config_file().c_str(), + "controller/src/dns/testdata/named.conf.rr_ext_disabled")); for (int i = 0; i < 7; i++) { string s1 = cfg->GetZoneFilePath(deleted_domains[i]); EXPECT_FALSE(FileExists(s1.c_str())); } for (int i = 0; i < 4; i++) { string s1 = cfg->GetZoneFilePath(remaining_domains[i]); - EXPECT_FALSE(FileExists(s1.c_str())); + EXPECT_TRUE(FileExists(s1.c_str())); } const char config_change_4[] = "\ @@ -786,10 +798,6 @@ TEST_F(DnsBindTest, ReorderedExternalReverseResolutionDisabled) { string s1 = cfg->GetZoneFilePath(dns_domains[i]); EXPECT_FALSE(FileExists(s1.c_str())); } - for (int i = 0; i < 3; i++) { - string s1 = cfg->GetZoneFilePath(new_dns_domains[i]); - EXPECT_FALSE(FileExists(s1.c_str())); - } } } // namespace diff --git a/src/dns/testdata/named.conf.rr_ext_disabled b/src/dns/testdata/named.conf.rr_ext_disabled new file mode 100644 index 00000000000..616c8d09832 --- /dev/null +++ b/src/dns/testdata/named.conf.rr_ext_disabled @@ -0,0 +1,162 @@ +options { + directory "./"; + managed-keys-directory "./"; + empty-zones-enable no; + pid-file "./contrail-named.pid"; + listen-on port 53 { any; }; + allow-query { any; }; + allow-recursion { any; }; + allow-query-cache { any; }; + max-cache-size 100M; +}; + +key "rndc-key" { + algorithm hmac-md5; + secret "xvysmOR8lnUQRBcunkC6vg=="; +}; + +controls { + inet 127.0.0.1 port 8094 + allow { 127.0.0.1; } keys { "rndc-key"; }; +}; + +logging { + channel debug_log { + file "/var/log/named/bind.log" versions 3 size 5m; + severity debug; + print-time yes; + print-severity yes; + print-category yes; + }; + category default { + debug_log; + }; + category queries { + debug_log; + }; +}; + +view "last-DNS" { + rrset-order {order cyclic;}; + virtual-forwarder "juniper.net"; + zone "test.juniper.net" IN { + type master; + file "./test.juniper.net.zone"; + allow-update {127.0.0.1;}; + }; +}; + +view "last-DNS1" { + rrset-order {order fixed;}; + virtual-forwarder "juniper.net"; + zone "0.3.13.in-addr.arpa." IN { + type master; + file "./0.3.13.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "1.3.13.in-addr.arpa." IN { + type master; + file "./1.3.13.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "13.2.12.in-addr.arpa." IN { + type master; + file "./13.2.12.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "2.3.13.in-addr.arpa." IN { + type master; + file "./2.3.13.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "3.3.13.in-addr.arpa." IN { + type master; + file "./3.3.13.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "test1.juniper.net" IN { + type master; + file "./test1.juniper.net.zone"; + allow-update {127.0.0.1;}; + }; +}; + +view "new-DNS" { + rrset-order {order random;}; + virtual-forwarder "example.com"; + zone "192.1.1.in-addr.arpa." IN { + type master; + file "./192.1.1.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "193.1.1.in-addr.arpa." IN { + type master; + file "./193.1.1.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "3.2.1.in-addr.arpa." IN { + type master; + file "./3.2.1.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "6.5.4.in-addr.arpa." IN { + type master; + file "./6.5.4.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "64.3.2.2.in-addr.arpa." IN { + type master; + file "./64.3.2.2.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "65.3.2.2.in-addr.arpa." IN { + type master; + file "./65.3.2.2.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "66.3.2.2.in-addr.arpa." IN { + type master; + file "./66.3.2.2.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "67.3.2.2.in-addr.arpa." IN { + type master; + file "./67.3.2.2.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "test.example.com" IN { + type master; + file "./test.example.com.zone"; + allow-update {127.0.0.1;}; + }; +}; + +view "test-DNS" { + rrset-order {order random;}; + virtual-forwarder "juniper.net"; + zone "contrail.juniper.net" IN { + type master; + file "./contrail.juniper.net.zone"; + allow-update {127.0.0.1;}; + }; +}; + +view "_default_view_" { + match-clients {any;}; + match-destinations {any;}; + match-recursive-only no; +}; + diff --git a/src/dns/testdata/named.conf.rr_ext_disabled.2 b/src/dns/testdata/named.conf.rr_ext_disabled.2 new file mode 100644 index 00000000000..a468b755ffb --- /dev/null +++ b/src/dns/testdata/named.conf.rr_ext_disabled.2 @@ -0,0 +1,168 @@ +options { + directory "./"; + managed-keys-directory "./"; + empty-zones-enable no; + pid-file "./contrail-named.pid"; + listen-on port 53 { any; }; + allow-query { any; }; + allow-recursion { any; }; + allow-query-cache { any; }; + max-cache-size 100M; +}; + +key "rndc-key" { + algorithm hmac-md5; + secret "xvysmOR8lnUQRBcunkC6vg=="; +}; + +controls { + inet 127.0.0.1 port 8094 + allow { 127.0.0.1; } keys { "rndc-key"; }; +}; + +logging { + channel debug_log { + file "/var/log/named/bind.log" versions 3 size 5m; + severity debug; + print-time yes; + print-severity yes; + print-category yes; + }; + category default { + debug_log; + }; + category queries { + debug_log; + }; +}; + +view "last-DNS" { + rrset-order {order cyclic;}; + virtual-forwarder "juniper.net"; + zone "test.juniper.net" IN { + type master; + file "./test.juniper.net.zone"; + allow-update {127.0.0.1;}; + }; +}; + +view "last-DNS1" { + rrset-order {order fixed;}; + virtual-forwarder "juniper.net"; + zone "0.3.13.in-addr.arpa." IN { + type master; + file "./0.3.13.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "1.3.13.in-addr.arpa." IN { + type master; + file "./1.3.13.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "13.2.12.in-addr.arpa." IN { + type master; + file "./13.2.12.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "2.3.13.in-addr.arpa." IN { + type master; + file "./2.3.13.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "3.3.13.in-addr.arpa." IN { + type master; + file "./3.3.13.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "test1.juniper.net" IN { + type master; + file "./test1.juniper.net.zone"; + allow-update {127.0.0.1;}; + }; +}; + +view "new-DNS" { + rrset-order {order random;}; + virtual-forwarder "example.com"; + zone "192.1.1.in-addr.arpa." IN { + type master; + file "./192.1.1.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "193.1.1.in-addr.arpa." IN { + type master; + file "./193.1.1.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "3.2.1.in-addr.arpa." IN { + type master; + file "./3.2.1.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "3.2.25.in-addr.arpa." IN { + type master; + file "./3.2.1.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "6.5.4.in-addr.arpa." IN { + type master; + file "./6.5.4.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "64.3.2.2.in-addr.arpa." IN { + type master; + file "./64.3.2.2.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "65.3.2.2.in-addr.arpa." IN { + type master; + file "./65.3.2.2.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "66.3.2.2.in-addr.arpa." IN { + type master; + file "./66.3.2.2.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "67.3.2.2.in-addr.arpa." IN { + type master; + file "./67.3.2.2.in-addr.arpa.zone"; + allow-update {127.0.0.1;}; + forwarders { }; + }; + zone "test.example.com" IN { + type master; + file "./test.example.com.zone"; + allow-update {127.0.0.1;}; + }; +}; + +view "test-DNS" { + rrset-order {order random;}; + virtual-forwarder "juniper.net"; + zone "contrail.juniper.net" IN { + type master; + file "./contrail.juniper.net.zone"; + allow-update {127.0.0.1;}; + }; +}; + +view "_default_view_" { + match-clients {any;}; + match-destinations {any;}; + match-recursive-only no; +}; +