diff options
Diffstat (limited to 'bootstrap/make-reverse4-files.pl')
-rwxr-xr-x | bootstrap/make-reverse4-files.pl | 93 |
1 files changed, 56 insertions, 37 deletions
diff --git a/bootstrap/make-reverse4-files.pl b/bootstrap/make-reverse4-files.pl index be4ad99..3d8d993 100755 --- a/bootstrap/make-reverse4-files.pl +++ b/bootstrap/make-reverse4-files.pl @@ -26,23 +26,14 @@ $base .= "/" if not $base =~ m/\/$/ and not $base eq ""; my $bind_base = $base . "bind/"; my $dhcpd_base = $base . "dhcp/"; -my $dhcp_revzones_file = $dhcpd_base . "revzones.conf"; +my $dhcp_revzones_file = $dhcpd_base . "v4-revzones.conf"; my $bind_pri_revzones_file = $bind_base . "named.reverse4.conf"; my $bind_sec_revzones_file = $bind_base . "named.slave-reverse4.conf"; -my $pri_v4 = $nms::config::pri_v4; -my $pri_v6 = $nms::config::pri_v6; - -my $sec_v4 = $nms::config::sec_v4; -my $sec_v6 = $nms::config::sec_v6; - my $base_ipv4 = Net::IP->new($nms::config::base_ipv4net) or die ("base_v4 fail"); my ($p_oct, $s_oct, $t_oct) = ($nms::config::base_ipv4net =~ m/^(\d+)\.(\d+)\.(\d+)\..*/); - -$pri_v4 =~ m/^(\d+)\.(\d+)\.(\d+)\.(\d+).*/; -my ( $pp_oct, $ps_oct, $pt_oct, $pf_oct) = ( $1, $2, $3, $4 ); -$sec_v4 =~ m/^(\d+)\.(\d+)\.(\d+)\.(\d+).*/; -my ( $sp_oct, $ss_oct, $st_oct, $sf_oct) = ( $1, $2, $3, $4 ); +my ($pp_oct, $ps_oct, $pt_oct, $pf_oct) = ($nms::config::pri_v4 =~ m/^(\d+)\.(\d+)\.(\d+)\.(\d+).*/); +my ($sp_oct, $ss_oct, $st_oct, $sf_oct) = ($nms::config::sec_v4 =~ m/^(\d+)\.(\d+)\.(\d+)\.(\d+).*/); if ( $role eq "master" ) { @@ -58,34 +49,40 @@ else die ("WTF, role is neither 'master' or 'slave'"); } -while (1) -{ - +sub add_zone{ my $block = $p_oct . "." . $s_oct . "." . $t_oct . ".0/24"; - my $current = new Net::IP( $block ) or die ("new Net::IP failed for " . $block); - my $rev_zone = $t_oct . "." . $s_oct . "." . $p_oct . ".in-addr.arpa"; - + if ( $role eq "master" ) { # Generating IPv4-related reverse-stuff for # both bind9 and dhcp on master. - print DFILE "zone " . $rev_zone . " { primary " . $nms::config::ddns_to . "; key DHCP_UPDATER; }\n"; + print DFILE <<"EOF"; +zone "$rev_zone" { + primary $nms::config::ddns_to; + key DHCP_UPDATER; +} +EOF + + print NFILE <<"EOF"; +// $block +zone "$rev_zone" { + type master; + allow-update { key DHCP_UPDATER; }; + notify yes; + allow-transfer { ns-xfr; ext-xfr; }; + file "reverse/$rev_zone.zone"; +}; - print NFILE "zone \"". $rev_zone ."\" {\n"; - print NFILE " type master;\n"; - print NFILE " allow-update { key DHCP_UPDATER; };\n"; - print NFILE " notify yes;\n"; - print NFILE " allow-transfer { ns-xfr; ext-xfr; };\n"; - print NFILE " file \"reverse/". $rev_zone .".zone\";\n"; - print NFILE "};\n\n"; +EOF my $zfilename = $bind_base . "reverse/" . $rev_zone . ".zone"; open ZFILE, ">", $zfilename; - print ZFILE "; " . $zfilename . "\n"; print ZFILE <<"EOF"; +; $zfilename +; $block ; Base reverse zones are updated from dhcpd -- DO NOT TOUCH! \$TTL 3600 @ IN SOA $nms::config::pri_hostname.$nms::config::tgname.gathering.org. abuse.gathering.org. ( @@ -100,6 +97,8 @@ while (1) \$ORIGIN $rev_zone. EOF + + # add reverse if DNS-servers belong to zone if ( ($pt_oct == $t_oct) && ($ps_oct == $s_oct) ) { print ZFILE $pf_oct . " IN PTR $nms::config::pri_hostname.$nms::config::tgname.gathering.org.\n"; @@ -111,24 +110,44 @@ EOF } else { - # AKA "if not master", as in "is slave". - # A lot less work: update the named.slave-reverse4.conf file.. - print SFILE "zone \"". $rev_zone ."\" {\n"; - print SFILE " type slave;\n"; - print SFILE " notify no;\n"; - print SFILE " file \"slave/". $rev_zone .".cache\";\n"; - print SFILE " masters { bootstrap; };\n"; - print SFILE " allow-transfer { ns-xfr; ext-xfr; };\n"; - print SFILE "};\n\n"; + # if not master, aka slave + print SFILE <<"EOF"; +// $block +zone "$rev_zone" { + type slave; + notify no; + file "slave/$rev_zone.cache"; + masters { master_ns; }; + allow-transfer { ns-xfr; ext-xfr; }; +}; + +EOF } +} +# for each /24 in the primary v4-net +while (1){ + my $current = Net::IP->new($block) or die ("Net::IP failed for " . $block); + + add_zone(); + if ( $current->last_int() == $base_ipv4->last_int() ) { - print STDERR "Reached last IP network. Finished\n"; + print STDERR "Reached last IP network. Finished.\n"; last; } $t_oct++; } + +# for each specially defined /24 +foreach my $special_net (@nms::config::extra_nets){ + # a.b.c.d/24 + $base_ipv4 = Net::IP->new($special_net) or die ("base_v4 fail"); + ($p_oct, $s_oct, $t_oct) = ($special_net =~ m/^(\d+)\.(\d+)\.(\d+)\..*/); + + add_zone(); +} + # Close all files, even those that have never been opened ;) close DFILE; close NFILE; |