#!/usr/bin/perl -w # # Script zur automatischen Konfiguration von Name-Servern. # (c) Bernd Burre 2002 # jegliche Nutzung erfolgt auf eigenes Risiko # weitere Informationen unter http://www.linux-hamburg.de # # Das Datum bestimmen ( $mtag, $mon, $jahr) = (localtime(time))[3,4,5]; $mon=$mon +1; if ($mtag < 10) { $mtag = "0" . "$mtag"; } if ($mon < 10) { $mon = "0" . "$mon"; } $jahr=$jahr + 1900; # $datum="$mtag.$mon.$jahr.$std.$min"; # print "$datum\n"; # den Servernamen bestimmen open RC, "/etc/rc.config"; while () { if ( /^FQHOSTNAME=(.*)/) { $SERVERNAME="$1"; $SERVERNAME =~ s/"//g; } } close(RC); $SERVERNAME =~ m/^([^\.]+)\.(.*$)/; $SERVER=$1; $DOMAIN=$2; # # Sicherheitsabfrage, der Ausdruck "dummy" darf nicht # im Domainteil enthalten sein if ( $DOMAIN =~ /dummy/ ) { die "Das Netzwerk wurde nicht konfiguriert\n"; } # Die Serverip und die Netzip bestimmen # $SERVIP=gethostbyname($SERVERNAME); ($IP1,$IP2,$IP3,$IP4)=unpack('C4',$SERVIP); # zum Debuggen # $IP1=192; # $IP2=168; # $IP3=2; # $IP4=3; # End Debug $NETIP="$IP1.$IP2.$IP3"; $SERVERIP="$NETIP.$IP4"; $NETIP="$IP1.$IP2"; # print "$SERVERNAME\n"; # print "$SERVER\n"; # print "$DOMAIN\n"; print "$SERVERIP\n"; # print "$NETIP\n"; # # sub soa_erzeugen { $serial="$jahr" . "$mon" . "$mtag" . "01"; print FILE "\@ IN SOA $SERVER.$DOMAIN. postmaster.$DOMAIN. (\n"; print FILE " $serial ;serial\n"; print FILE " 86400 ;refresh\n"; print FILE " 3600 ;retry\n"; print FILE " 3600000 ;expire\n"; print FILE " 604800 ;minimum\n"; print FILE " )\n"; print FILE " IN NS $SERVER.$DOMAIN.\n"; } ### END soa_erzeugen ### # sub namedLan_erzeugen { print FILE "\$TTL 1d;\n"; if ($IP4 == 1) { print FILE "\$generate 2-254 hh$IP3-\$ A $NETIP.$IP3.\$;\n"; } elsif ($IP4 ==2) { print FILE "\$generate 1-1 hh$IP3-\$ A $NETIP.$IP3.\$;\n"; print FILE "\$generate 3-254 hh$IP3-\$ A $NETIP.$IP3.\$;\n"; } elsif ($IP4 == 253) { print FILE "\$generate 1-252 hh$IP3-\$ A $NETIP.$IP3.\$;\n"; print FILE "\$generate 254-254 hh$IP3-\$ A $NETIP.$IP3.\$;\n"; } elsif ($IP4 == 254) { print FILE "\$generate 1-253 hh$IP3-\$ A $NETIP.$IP3.\$;\n"; } else { $anf=$IP4 - 1; $end=$IP4 + 1; print FILE "\$generate 1-$anf hh$IP3-\$ A $NETIP.$IP3.\$;\n"; print FILE "\$generate $end-254 hh$IP3-\$ A $NETIP.$IP3.\$;\n"; } for ($i=$IP3+1; $i < $IP3 + 4; $i++) { if ($i < 255) { print FILE "\$generate 1-254 hh$i-\$ A $NETIP.$i.\$;\n"; } } soa_erzeugen; print FILE " IN MX 10 $SERVER.$DOMAIN.\n"; print FILE ";\n"; print FILE "$SERVER IN A $SERVERIP\n"; print FILE "WWW IN CNAME $SERVER\n"; print FILE "Mail IN CNAME $SERVER\n"; print FILE "NS IN CNAME $SERVER\n"; print FILE "ftp IN CNAME $SERVER\n"; print FILE "News IN CNAME $SERVER\n"; print FILE ";\n"; } # sub namedNAL_erzeugen { print FILE "\$TTL 1d;\n"; if ($IP4 == 1) { print FILE "\$generate 2-254 \$.$IP3 PTR hh$IP3-\$.$DOMAIN.\n"; } elsif ($IP4 == 2) { print FILE "\$generate 1-1 \$.$IP3 PTR hh$IP3-\$.$DOMAIN.\n"; print FILE "\$generate 3-254 \$.$IP3 PTR hh$IP3-\$.$DOMAIN.\n"; } elsif ($IP4 == 253) { print FILE "\$generate 1-252 \$.$IP3 PTR hh$IP3-\$.$DOMAIN.\n"; print FILE "\$generate 254-254 \$.$IP3 PTR hh$IP3-\$.$DOMAIN.\n"; } elsif ($IP4 == 254) { print FILE "\$generate 1-253 \$.$IP3 PTR hh$IP3-\$.$DOMAIN.\n"; } else { $anf=$IP4 - 1; $end=$IP4 + 1; print FILE "\$generate 1-$anf \$.$IP3 PTR hh$IP3-\$.$DOMAIN.\n"; print FILE "\$generate $end-254 \$.$IP3 PTR hh$IP3-\$.$DOMAIN.\n"; } for ($i=$IP3+1; $i < $IP3 + 4; $i++) { if ($i < 255) { print FILE "\$generate 1-254 \$.$i PTR hh$i-\$.$DOMAIN.\n"; } } soa_erzeugen; print FILE ";\n"; print FILE "$IP4.$IP3 IN PTR $SERVER.$DOMAIN.\n"; print FILE ";\n"; } ### END named_NALerzeugen ### # sub namedlocal_erzeugen { print FILE "\$TTL 1d;\n"; soa_erzeugen; print FILE ";\n"; print FILE "localhost. IN A 127.0.0.1\n"; } # sub namedlacol_erzeugen { print FILE "\$TTL 1d;\n"; soa_erzeugen; print FILE ";\n"; print FILE "1 IN PTR localhost.\n"; } # sub namedconf_erzeugen { print FILE "\n"; print FILE "options {\n"; print FILE " directory \"/var/named\";\n"; print FILE " allow-query { 127.0/16; $NETIP/16; };\n"; print FILE " forwarders {\n"; print FILE " 194.95.246.252;\n"; print FILE " 194.95.249.252;\n"; print FILE " };\n"; print FILE "};\n"; print FILE "\n"; print FILE "zone \".\" {\n"; print FILE " type hint;\n"; print FILE " file \"root.hint\";\n"; print FILE "};\n"; print FILE "\n"; print FILE "zone \"$DOMAIN\" {\n"; print FILE " type master;\n"; print FILE " file \"named.Lan\";\n"; print FILE " allow-update { 127.0/16; $NETIP/16; };\n"; print FILE "};\n"; print FILE "\n"; print FILE "zone \"localhost\" {\n"; print FILE " type master;\n"; print FILE " file \"named.local\";\n"; print FILE "};\n"; print FILE "\n"; print FILE "zone \"0.0.127.in-addr.arpa\" {\n"; print FILE " type master;\n"; print FILE " file \"named.lacol\";\n"; print FILE "};\n"; print FILE "\n"; print FILE "zone \"$IP2.$IP1.in-addr.arpa\" {\n"; print FILE " type master;\n"; print FILE " file \"named.NAL\";\n"; print FILE " allow-update { 127.0/16; $NETIP/16; };\n"; print FILE "};\n"; } open FILE,"> /var/named/named.Lan"; namedLan_erzeugen; close(FILE); open FILE,"> /var/named/named.NAL"; namedNAL_erzeugen; close(FILE); open FILE,"> /var/named/named.local"; namedlocal_erzeugen; close(FILE); open FILE,"> /var/named/named.lacol"; namedlacol_erzeugen; close(FILE); open FILE,"> /etc/named.conf"; namedconf_erzeugen; close(FILE); exit 0;