Skip to content

Commit

Permalink
Default zones will have an empty forwarders {} list.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
nipak committed Mar 16, 2016
1 parent 22107b0 commit a6ec84c
Show file tree
Hide file tree
Showing 6 changed files with 385 additions and 48 deletions.
25 changes: 12 additions & 13 deletions src/dns/bind/named_config.cc
Expand Up @@ -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) {
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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);
}

Expand Down
2 changes: 1 addition & 1 deletion src/dns/bind/named_config.h
Expand Up @@ -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);
Expand Down
6 changes: 3 additions & 3 deletions src/dns/mgr/dns_mgr.cc
Expand Up @@ -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;
}

Expand Down
70 changes: 39 additions & 31 deletions src/dns/test/dns_bind_test.cc
Expand Up @@ -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");
Expand Down Expand Up @@ -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[] = "\
<config>\
<virtual-network-network-ipam ipam='ipam2' vn='vn3'> \
Expand Down Expand Up @@ -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[] = "\
<config>\
<virtual-network-network-ipam ipam='ipam1' vn='vn1'> \
Expand Down Expand Up @@ -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[] = "\
Expand Down Expand Up @@ -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[] = "\
<delete>\
Expand All @@ -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[] = "\
Expand All @@ -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
Expand Down

0 comments on commit a6ec84c

Please sign in to comment.