CONTENT
  • CHANGES
Szukaj
counter

#top Instalacja


Instalację serwera Named/Bind można wykonać na różne sposoby: od kompilacji ze źdródeł poprzez instalację pojedynczych paczek rpm za pomocą polecenia rpm skończywszy na instalacja z użyciem menedżera pakietów, który zainstaluje wszystkie niezbędne paczki wraz zależnościami.
Celem niniejszego dokumentu nie jest rozważanie różnych metod instalacji tylko nieco usprawnienie użyteczności konfiguracji serwera Named/Bind po zainstalowaniu oraz wprowadzenie porządku / hierarchi położenia plików z których korzysta usługa w strukturze katalogowej.
Dobrą konwencją jest przechowywanie plików konfiguracyjnych każdego demona we własnym osobnym podkatalogu w katalogu etc, w przypadku instalacji Named/Bind z paczki w systemach Linux z rodziny RedHat taki katalog należy utworzyć i przenieć do niego plik konfiguracyjny named.conf.
Wszystko to zostało opisane poniżej.



#top Poinstalacyjna konfiguracja


#top Keep oryginal start script


mv /etc/init.d/named /etc/init.d/named-rpm
cp -av /etc/init.d/named-rpm /etc/init.d/named



#top Update start script


Run below command only on CentOS 5.* system (named <= BIND 9.3.4):
sed 's,/etc/rc.d/init.d/functions,/etc/rc.d/init.d/functions\n\n[ -r /etc/sysconfig/named ] \&\& . /etc/sysconfig/named,g' -i /etc/init.d/named



#top Update start script (set config for rndc)


sed 's,/usr/sbin/rndc stop,/usr/sbin/rndc $RNDCOPT stop,g' -i /etc/init.d/named
sed 's,/usr/sbin/rndc status,/usr/sbin/rndc $RNDCOPT status,g' -i /etc/init.d/named
sed 's,/usr/sbin/rndc reload,/usr/sbin/rndc $RNDCOPT reload,g' -i /etc/init.d/named



#top Create /etc/sysconfig/named file


echo 'OPTIONS="-c /etc/named/named.conf"' >> /etc/sysconfig/named
echo 'RNDCOPT="-c /etc/named/rndc.conf"' >> /etc/sysconfig/named
echo >> /etc/sysconfig/named



#top Correct logrotate file


sed '1s,^,/var/log/named/named.log /var/log/named/queries.log ,g' -i /etc/logrotate.d/named



#top Create config/log directory


mkdir /var/log/named
chown named /var/log/named

mkdir /etc/named
mkdir /etc/named/db
mkdir /etc/named/zones





#top create/update config



#top Create/Update config (CentOS 5.*)


Run below command only on CentOS 5.* system
rndc-confgen > rndc-tempfile.conf
cat rndc-tempfile.conf | awk  '{print($0);if(index($0,"End of rndc.conf")>0){exit(0);}}' > /etc/named/rndc.conf
cat rndc-tempfile.conf | awk  'BEGIN{show=0;}{if(index($0,"following in named.conf")>0){show=1;print($0);getline;} if(index($0,"End of named.conf")>0){show=0;print($0);} if(show==1){print(substr($0,3));} }' > /etc/named/rndc.key
rm -f rndc-tempfile.conf

cp -av /usr/share/doc/bind-*/sample/etc/named.rfc1912.zones /etc/named/named.rfc1912.zones
sed 's,file ",file "/etc/named/db/,g' -i /etc/named/named.rfc1912.zones
touch -r /usr/share/doc/bind-*/sample/etc/named.rfc1912.zones /etc/named/named.rfc1912.zones

cp -av /usr/share/doc/bind-*/sample/var/named/localdomain.zone /etc/named/db/localdomain.zone
cp -av /usr/share/doc/bind-*/sample/var/named/localhost.zone /etc/named/db/localhost.zone
cp -av /usr/share/doc/bind-*/sample/var/named/named.local /etc/named/db/named.local
cp -av /usr/share/doc/bind-*/sample/var/named/named.ip6.local /etc/named/db/named.ip6.local
cp -av /usr/share/doc/bind-*/sample/var/named/named.broadcast /etc/named/db/named.broadcast
cp -av /usr/share/doc/bind-*/sample/var/named/named.zero /etc/named/db/named.zero

cp -av /usr/share/doc/bind-*/sample/etc/named.root.hints /etc/named/named.zoneroot
cp -av /usr/share/doc/bind-*/sample/var/named/named.root /etc/named/named.ca

touch /etc/named/named.local.conf



#top Create/Update config (CentOS 6.*)


Run below command only on CentOS 6.* system
rndc-confgen -r /dev/urandom > rndc-tempfile.conf
cat rndc-tempfile.conf | awk  '{print($0);if(index($0,"End of rndc.conf")>0){exit(0);}}' > /etc/named/rndc.conf
cat rndc-tempfile.conf | awk  'BEGIN{show=0;}{if(index($0,"following in named.conf")>0){show=1;print($0);getline;} if(index($0,"End of named.conf")>0){show=0;print($0);} if(show==1){print(substr($0,3));} }' > /etc/named/rndc.key
rm -f rndc-tempfile.conf

mv /etc/named.conf /etc/named/named.conf
mv /etc/named.iscdlv.key /etc/named/named.iscdlv.key
mv /etc/named.rfc1912.zones /etc/named/named.rfc1912.zones
mv /etc/named.root.key /etc/named/named.root.key

sed 's,file ",file "/etc/named/db/,g' -i /etc/named/named.rfc1912.zones

cp -av /usr/share/doc/bind-*/sample/var/named/named.loopback /etc/named/db/named.loopback
cp -av /usr/share/doc/bind-*/sample/var/named/named.localhost /etc/named/db/named.localhost
cp -av /usr/share/doc/bind-*/sample/var/named/named.empty /etc/named/db/named.empty

cp -av /usr/share/doc/bind-*/sample/var/named/named.ca /etc/named/named.ca

touch /etc/named/named.local.conf



#top Create /etc/named/named.conf


cat > /etc/named/named.conf << EOF
//
// Sample named.conf BIND DNS server 'named' configuration file
// for the Red Hat BIND distribution.
//
// See the BIND Administrator's Reference Manual (ARM) for details, in:
//   file:///usr/share/doc/bind-*/arm/Bv9ARM.html
// Also see the BIND Configuration GUI : /usr/bin/system-config-bind and
// its manual.
//

include "/etc/named/named.options.conf";
include "/etc/named/rndc.key";

// these are zones that contain definitions for all the localhost
// names and addresses, as recommended in RFC1912 - these names should
// ONLY be served to localhost clients:
include "/etc/named/named.rfc1912.zones";

// all views must contain the root hints zone:
include "/etc/named/named.zoneroot";

// local zones
include "/etc/named/named.local.conf";

EOF



#top Create /etc/named/named.zoneroot


cat > /etc/named/named.zoneroot << EOF
//
//   The 'named.root' root cache hints zone for the bind DNS 'named' nameserver.
//
//   named's cache must be primed with the addresses of the root zone '.' nameservers.
//   The root zone file can be obtained by querying the root 'A' nameserver:
//     $ dig . ns @198.41.0.4 > named.root
//   Or by download via FTP / HTTP:
//     $ wget ftp://ftp.rs.internic.net/domain/named.root
//
//   Every view that is to provide recursive service must include this zone.
//
zone "." IN {
	type hint;
	file "/etc/named/named.ca";
};

EOF
sed 's,        ,\t,g' -i /etc/named/named.zoneroot



#top Create /etc/named/named.options.conf


#top named.options.conf (CentOS 5.*)


cat > /etc/named/named.options.conf << EOF
//
// named.options.conf
//
// See the BIND Administrator's Reference Manual (ARM) for details, in:
//   file:///usr/share/doc/bind-*/arm/Bv9ARM.html
// Also see the BIND Configuration GUI : /usr/bin/system-config-bind and
// its manual.
//

options {
	directory "/var/named"; // the default
	dump-file   "/var/named/data/cache_dump.db";
	statistics-file "/var/named/data/named_stats.txt";
	memstatistics-file "/var/named/data/named_mem_stats.txt";
	// Put pid file in working dir
	pid-file "/var/run/named/named.pid";
	//listen-on { any; };
	listen-on port 53 { any; };
	listen-on-v6 port 53 { any; };
	
	recursion yes;
	allow-recursion { 127.0.0.1; };
};

logging {
	channel named_file   { file "/var/log/named/named.log";   severity dynamic; print-time yes; };
	channel queries_file { file "/var/log/named/queries.log"; severity dynamic; print-time yes; };
	
	category default { named_file;   };
	category queries { queries_file; };
};

EOF
sed 's,        ,\t,g' -i /etc/named/named.options.conf


#top named.options.conf (CentOS 6.*)


cat > /etc/named/named.options.conf << EOF
//
// named.options.conf
//
// See the BIND Administrator's Reference Manual (ARM) for details, in:
//   file:///usr/share/doc/bind-*/arm/Bv9ARM.html
// Also see the BIND Configuration GUI : /usr/bin/system-config-bind and
// its manual.
//

options {
	directory "/var/named"; // the default
	// Put pid file in working dir
	pid-file "/var/run/named/named.pid";
	listen-on port 53 { any; };
	listen-on-v6 port 53 { any; };
	
	dump-file   "/var/named/data/cache_dump.db";
	statistics-file "/var/named/data/named_stats.txt";
	memstatistics-file "/var/named/data/named_mem_stats.txt";
	
	recursion yes;
	allow-recursion { 127.0.0.1; };
	
	dnssec-enable yes;
	dnssec-validation yes;
	//dnssec-lookaside auto; // trouble with recursion
	
	/* Path to ISC DLV key */
	bindkeys-file "/etc/named/named.iscdlv.key";
};

logging {
	channel named_file   { file "/var/log/named/named.log";   severity dynamic; print-time yes; };
	channel queries_file { file "/var/log/named/queries.log"; severity dynamic; print-time yes; };
	
	category default { named_file;   };
	category queries { queries_file; };
};

EOF
sed 's,        ,\t,g' -i /etc/named/named.options.conf



#top Create /etc/named/named.local.conf


Plik named.local.conf jest prawidłowym miejscem na definicje domen dla zainstalowanego i skonfigurowanego serwera nazw named/bind, wszystkie obsługiwane domeny powinny być skonfigurowane w tym pliku. Położenie plików stref zależne jest roli strefy: master/slave. Pliki stref dla których serwer jest masterem dobrze jest umieścić w katalogu /etc/named/zones. Natomiast pliki stef dla których serwer jest slave i odbiera je od mastera muszą wskazywać na katalog w którym serwer ma uprawnienia zapisu, czyli: /var/named/slaves





#top Start named server


/etc/init.d/named start

tail -f /var/log/named/named.log
tail -f /var/log/named/queries.log





#top Chroot named (version2-symbolic-links)


W pierwszej kolejności należy utworzyć niezbędne katalogi:
mkdir -p /srv/chrootnamed
mkdir -p /srv/chrootnamed/dev/pts
mkdir -p /srv/chrootnamed/etc/sysconfig
mkdir -p /srv/chrootnamed/proc
mkdir -p /srv/chrootnamed/sbin
mkdir -p /srv/chrootnamed/usr/bin
mkdir -p /srv/chrootnamed/usr/sbin
mkdir -p /srv/chrootnamed/var
mkdir -p /srv/chrootnamed/var/log
mkdir -p /srv/chrootnamed/var/run

W zależności od architektury należy utworzyć odpowiednie katalogi na biblioteki demona.
Poniższe kroki należy wykonać dla architektury 32-bit:
# arch: 32bit
mkdir -p /srv/chrootnamed/lib
mkdir -p /srv/chrootnamed/usr/lib

Poniższe kroki należy wykonać dla architektury 64-bit:
# arch: 64bit
mkdir -p /srv/chrootnamed/lib64
mkdir -p /srv/chrootnamed/usr/lib64

Następnie należy utworzyć specjalne pliki blokowe z których korzysta daemon:
mknod /srv/chrootnamed/dev/null c 2 2
mknod /srv/chrootnamed/dev/random c 1 8
chown root:root /srv/chrootnamed/dev/null
chown root:root /srv/chrootnamed/dev/random
chmod 666 /srv/chrootnamed/dev/null
chmod 666 /srv/chrootnamed/dev/random

W kolejnym kroku należy skopiować niezbędne biblioteki wymagane do poprawnej inicjalizacji środowiska przez daemona named:
Poniższe kroki należy wykonać dla architektury 32-bit:
# arch: 32bit - lib
cp -av /lib/libnss_compat.so.2 /srv/chrootnamed/lib/libnss_compat.so.2
cp -av /lib/`readlink /lib/libnss_compat.so.2` /srv/chrootnamed/lib/`readlink /lib/libnss_compat.so.2`
cp -av /lib/libnss_files.so.2 /srv/chrootnamed/lib/libnss_files.so.2
cp -av /lib/`readlink /lib/libnss_files.so.2` /srv/chrootnamed/lib/`readlink /lib/libnss_files.so.2`

Poniższe kroki należy wykonać dla architektury 64-bit:
# arch: 64bit - lib64
cp -av /lib64/libnss_compat.so.2 /srv/chrootnamed/lib64/libnss_compat.so.2
cp -av /lib64/`readlink /lib64/libnss_compat.so.2` /srv/chrootnamed/lib64/`readlink /lib64/libnss_compat.so.2`
cp -av /lib64/libnss_files.so.2 /srv/chrootnamed/lib64/libnss_files.so.2
cp -av /lib64/`readlink /lib64/libnss_files.so.2` /srv/chrootnamed/lib64/`readlink /lib64/libnss_files.so.2`

W następnym kroku należy skopiować plik binarny samego demona oraz biblioteki wymagane przez daemona do działania:
cp -av /sbin/nologin /srv/chrootnamed/sbin/nologin
cp -av /usr/sbin/named /srv/chrootnamed/usr/sbin/named
for libname in `ldd /usr/sbin/named | sed  -e 's,^[\s\t]*,,g' -e 's,^.*=> ,,g' -e 's,(.*$,,g'`;do cp -av $libname /srv/chrootnamed$libname; if test -L $libname;then cp -av `dirname $libname`/`readlink $libname` /srv/chrootnamed`dirname $libname`/`readlink $libname`; fi; done

Następnie należy jeszcze skopiować pliki konfiguracyjne wymagane do poprawnej inicjalizacji środowiska przez daemona named:
cp -av /etc/localtime /srv/chrootnamed/etc/localtime
cp -av /etc/nsswitch.conf /srv/chrootnamed/etc/nsswitch.conf
cat /etc/passwd | grep  -E '^root|^named' > /srv/chrootnamed/etc/passwd
cat /etc/group | grep  -E '^root|^named' > /srv/chrootnamed/etc/group

W kojnenym kroku należy poprawić skrypt inicjalizacyjny uruchamiający daemona, aby uruchamiał daemona w przygotowanym środowisku chroot:
sed 's,daemon /usr/sbin/\$named,daemon chroot $CHROOT /usr/sbin/$named,g' -i /etc/init.d/named
sed 's,\(daemon.*/usr/sbin/"$named".*\)$,#\1\n    daemon --pidfile "$ROOTDIR/$PIDFILE" chroot $CHROOT /usr/sbin/"$named" -u named ${OPTIONS};,g' -i /etc/init.d/named
sed 's,^\(OPTIONS=.*\)$,CHROOT=/srv/chrootnamed\n\1,g' -i /etc/sysconfig/named

Na konieć pozostało przenieść pliki konfiguracyjne, logi, itp. do środowiska chroot oraz utworzyć dowiązania symboliczne do starej lokalizacji:
mv -v /etc/named /srv/chrootnamed/etc/named
mv -v /var/named /srv/chrootnamed/var/named
mv -v /var/log/named /srv/chrootnamed/var/log/named
mv -v /var/run/named /srv/chrootnamed/var/run/named

ln -s /srv/chrootnamed/etc/named /etc/named
ln -s /srv/chrootnamed/var/named /var/named
ln -s /srv/chrootnamed/var/log/named /var/log/named
ln -s /srv/chrootnamed/var/run/named /var/run/named





#top Start named server (chroot named)


/etc/init.d/named start

tail -f /var/log/named/named.log
tail -f /var/log/named/queries.log





#top Extra options for start script


checkconfig() {
[...]
}
--------------------
######################
# BEGIN paste from mdv
trace() {
	/usr/sbin/rndc $RNDCOPT trace "$1"
	return $?
}
notrace() {
	/usr/sbin/rndc $RNDCOPT notrace
	return $?
}
reload() {
	echo -n $"Reloading $named: "
	/usr/sbin/rndc $RNDCOPT reload "$1" >/dev/null 2>&1 || /usr/bin/killall -HUP named
	RETVAL=$?
	[ "$RETVAL" -eq 0 ] && success $"$named reload" || failure $"$named reload"
	echo
	return $RETVAL
}
refresh() {
	/usr/sbin/rndc $RNDCOPT refresh "$1"
	return $?
}
retransfer() {
	/usr/sbin/rndc $RNDCOPT retransfer "$1"
	return $?
}
freeze() {
	/usr/sbin/rndc $RNDCOPT freeze "$1"
	return $?
}
thaw() {
	/usr/sbin/rndc $RNDCOPT thaw "$1"
	return $?
}
probe() {
	# named knows how to reload intelligently; we don't want linuxconf
	# to offer to restart every time
	/usr/sbin/rndc $RNDCOPT reload >/dev/null 2>&1 || echo start
	return $?
}
reconfig() {
	/usr/sbin/rndc $RNDCOPT reconfig
	return $?
}
stats() {
	/usr/sbin/rndc $RNDCOPT stats
	return $?
}
querylog() {
	/usr/sbin/rndc $RNDCOPT querylog
	return $?
}
dumpdb() {
	/usr/sbin/rndc $RNDCOPT dumpdb
	return $?
}
flush() {
	/usr/sbin/rndc $RNDCOPT flush "$1"
	return $?
}
flushname() {
	/usr/sbin/rndc $RNDCOPT flushname "$1"
	return $?
}
recursing() {
	/usr/sbin/rndc $RNDCOPT recursing
	return $?
}
# END paste from mdv
####################

# See how we were called.
[...]
	checkconfig|configtest|check|test)
		checkconfig
		;;
--------------------
	######################
	# BEGIN paste from mdv
	trace)
		trace "$2"
		;;
	notrace)
		notrace
		;;
	reload)
		reload "$2"
		;;
	refresh)
		refresh "$2"
		;;
	retransfer)
		retransfer "$2"
		;;
	freeze)
		freeze "$2"
		;;
	thaw)
		thaw "$2"
		;;
	probe)
		probe
		;;
	reconfig)
		reconfig
		;;
	stats)
		stats
		;;
	querylog)
		querylog
		;;
	dumpdb)
		dumpdb
		;;
	flush)
		flush "$2"
		;;
	flushname)
		flushname "$2"
		;;
	recursing)
		recursing
		;;
	# END paste from mdv
	####################
--------------------
	*)
		echo $"Usage: $0 {start|stop|status|restart|condrestart|reload|configtest|probe}"
		exit 2
[...]





Zmodyfikowany ostatnio: 2013/11/20 22:42:06 (10 lat temu), textsize: 16,0 kB, htmlsize: 31,1 kB

Zapraszam do komentowania, zgłaszania sugestii, propozycji, własnych przykładów, ...
Dodaj komentarzKomentarze użytkowników