BIND 9.2.2

介绍BIND 9.2.2

下载地址 (HTTP):       
下载地址 (FTP):        ftp://ftp.isc.org/isc/bind9/9.2.2/bind-9.2.2.tar.gz
版本:                   9.2.2
软件包大小:             4.8 MB
估计所需硬盘空间:       38 MB

Bind软件包提供了DNS服务器和客户端工具。

安装BIND

用下面的命令安装BIND:

./configure --prefix=/usr &&
make &&
make install

配置BIND

我们将配置 BIND 以无特权的用户(named)运行在一个 chroot jail(监狱) 中。这样配置的 BIND 比较安全,因为 DNS 顶多破坏 named 用户 $HOME 目录中的少量文件。

首先我们创建几个 BIND 需要的文件和目录:

groupadd -g 200 named &&
useradd -m -g named -u 200 -s /bin/false named &&
cd /home/named &&
mkdir -p dev etc/namedb/slave var/run &&
mknod /home/named/dev/null c 1 3 &&
mknod /home/named/dev/random c 1 8 &&
chmod 666 /home/named/dev/{null,random} &&
mkdir /home/named/etc/namedb/pz &&
cp /etc/localtime /home/named/etc

配置文件

named.conf, root.hints, 127.0.0, rndc.conf

用下面的命令创建 named.conf 文件:

cat > /home/named/etc/named.conf << "EOF"
 options {
     directory "/etc/namedb";
    pid-file "/var/run/named.pid";
    statistics-file "/var/run/named.stats";
       
 };
 controls {
     inet 127.0.0.1 allow { localhost; } keys { rndc_key; };
 };
 key "rndc_key" {
     algorithm hmac-md5;
     secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
 };
 zone "." {
     type hint;
     file "root.hints";
 };
 zone "0.0.127.in-addr.arpa" {
     type master;
     file "pz/127.0.0";
 };
EOF

创建一个 zone 文件:

cat > /home/named/etc/namedb/pz/127.0.0 << "EOF"
$TTL 3D
@      IN      SOA     ns.local.domain. hostmaster.local.domain. (
                        1       ; Serial
                        8H      ; Refresh
                        2H      ; Retry
                        4W      ; Expire
                        1D)     ; Minimum TTL
                NS      ns.local.domain.
1               PTR     localhost.
EOF

用下面的命令创建 root.hints 文件:

注: 必须注意:这个文件中行首不能有空格。

cat > /home/named/etc/namedb/root.hints << "EOF"
.                       6D  IN      NS      A.ROOT-SERVERS.NET.
.                       6D  IN      NS      B.ROOT-SERVERS.NET.
.                       6D  IN      NS      C.ROOT-SERVERS.NET.
.                       6D  IN      NS      D.ROOT-SERVERS.NET.
.                       6D  IN      NS      E.ROOT-SERVERS.NET.
.                       6D  IN      NS      F.ROOT-SERVERS.NET.
.                       6D  IN      NS      G.ROOT-SERVERS.NET.
.                       6D  IN      NS      H.ROOT-SERVERS.NET.
.                       6D  IN      NS      I.ROOT-SERVERS.NET.
.                       6D  IN      NS      J.ROOT-SERVERS.NET.
.                       6D  IN      NS      K.ROOT-SERVERS.NET.
.                       6D  IN      NS      L.ROOT-SERVERS.NET.
.                       6D  IN      NS      M.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.     6D  IN      A       198.41.0.4
B.ROOT-SERVERS.NET.     6D  IN      A       128.9.0.107
C.ROOT-SERVERS.NET.     6D  IN      A       192.33.4.12
D.ROOT-SERVERS.NET.     6D  IN      A       128.8.10.90
E.ROOT-SERVERS.NET.     6D  IN      A       192.203.230.10
F.ROOT-SERVERS.NET.     6D  IN      A       192.5.5.241
G.ROOT-SERVERS.NET.     6D  IN      A       192.112.36.4
H.ROOT-SERVERS.NET.     6D  IN      A       128.63.2.53
I.ROOT-SERVERS.NET.     6D  IN      A       192.36.148.17
J.ROOT-SERVERS.NET.     6D  IN      A       192.58.128.30
K.ROOT-SERVERS.NET.     6D  IN      A       193.0.14.129
L.ROOT-SERVERS.NET.     6D  IN      A       198.32.64.12
M.ROOT-SERVERS.NET.     6D  IN      A       202.12.27.33
EOF

用下列命令创建 rndc.conf 文件:

cat > /etc/rndc.conf << "EOF"
key rndc_key {
algorithm "hmac-md5";
    secret
    "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
    };
options {
    default-server localhost;
    default-key    rndc_key;
};
EOF

用下面的命令创建或修改 resolv.conf,以使用新的名称服务器:

注: 把 yourdomain.com 换成你自己的正确域名。

cp /etc/resolv.conf /etc/resolv.conf.bak
cat > /etc/resolv.conf << "EOF"
search yourdomain.com
nameserver 127.0.0.1
EOF

用下列命令设置 chroot jail 的权限:


chown -R named.named /home/named

创建 BIND 的启动脚本:


cat > /etc/rc.d/init.d/bind << "EOF"
#!/bin/bash
# Begin $rc_base/init.d/bind
# Based on sysklogd script from LFS-3.1 和 earlier.
# Rewritten by Gerard Beekmans  - [email protected]
source /etc/sysconfig/rc
source $rc_functions
case "$1" in
	start)
		echo "Starting named..."
		loadproc /usr/sbin/named -u named -t /home/named -c \
		        /etc/named.conf
		;;
	stop)
		echo "Stopping named..."
		killproc /usr/sbin/named
		;;
	restart)
		$0 stop
		sleep 1
		$0 start
		;;
   reload)
                echo "Reloading named..."
                /usr/sbin/rndc -c /etc/rndc.conf reload
                ;;
			       		
	status)
		statusproc /usr/sbin/named
		;;
	*)
		echo "Usage: $0 {start|stop|restart|status}"
		exit 1
		;;
esac
# End $rc_base/init.d/bind
EOF

增加运行级链接:


chmod 754 /etc/rc.d/init.d/bind &&
ln -s  /etc/rc.d/init.d/bind /etc/rc.d/rc0.d/K49bind &&
ln -s  /etc/rc.d/init.d/bind /etc/rc.d/rc1.d/K49bind &&
ln -s  /etc/rc.d/init.d/bind /etc/rc.d/rc2.d/K49bind &&
ln -s  /etc/rc.d/init.d/bind /etc/rc.d/rc3.d/S22bind &&
ln -s  /etc/rc.d/init.d/bind /etc/rc.d/rc4.d/S22bind &&
ln -s  /etc/rc.d/init.d/bind /etc/rc.d/rc5.d/S22bind &&
ln -s  /etc/rc.d/init.d/bind /etc/rc.d/rc6.d/K49bind

用新的启动脚本启动 BIND 服务:


/etc/rc.d/init.d/bind start

Testing BIND

用 dig 命令测试新的 BIND 9 安装情况。首先,用 dig 查找主机的本地地址。


dig -x 127.0.0.1

现在试一个外部名称查询。要知道由于缓存而存在的速度差异,就连着查同一个地址两次。


dig beyond.linuxfromscratch.org &&
dig beyond.linuxfromscratch.org
如果有缓存,你能立即看到查询的结果。查阅 bind-9.2.2/doc/arm/Bv9ARM.html, BIND 管理员参考手册,能找到更多的配置参数。

配置命令解释

groupadd -g 200 named
useradd -m -g named -u 200 -s /bin/false named
cd /home/named
mkdir -p dev etc/namedb/slave var/run
mknod /home/named/dev/null c 1 3
mknod /home/named/dev/random c 1 8
chmod 666 /home/named/dev/{null,random}
mkdir /home/named/etc/namedb/pz
cp /etc/localtime /home/named/etc : 
创建无特权用户和用户组 named,以及在 chroot 监狱中 named 需要的设备文件。

cat > /home/named/etc/named.conf << "EOF" : 创建 BIND 的配置文件,named 将从这个文件里读出地区文件的位置,根名称服务器和安全 DNS keys.

cat > /home/named/etc/namedb/pz/127.0.0 << "EOF" : 创建一个单独的地区文件.

cat > /home/named/etc/namedb/root.hints << "EOF" : root.hints 文件是一个根名称服务器的列表。这个文件必须用 dig 工具定期更新。查阅 BIND 9 管理员参考手册,可以知道更多。

cat > /etc/rndc.conf << "EOF" : rndc.conf 文件包含用 rndc 工具控制 named 操作的信息。

cat > /etc/resolv.conf << "EOF" : resolv.conf 文件将把本地主机(127.0.0.1)设置为名称服务器。

cat > /etc/rc.d/init.d/bind << "EOF" : 创建 BIND 9 的启动脚本,用来开始和停止名称服务器守护进程 named.

内容

BIND软件包中包含 dig, host, rndc, rndc-confgen, named-checkconf, named-checkzone, lwresd, named, dnssec-signzone, dnssec-signkey, dnssec-keygen, dnssec-makekeyset以及 nsupdate.

具体说明

dig

dig查询DNS服务器。

host

host是一个DNS查找工具。

rndc

rndc控制BIND的操作。

rndc-confgen

rndc-confgen生成rndc.conf文件

named-checkconf

named-checkconf检查named.conf文件的语法。

named-checkzone

named-checkzone检查区域文件的合法性。

lwresd

lwresd是为本地进程提供的只有缓存的名字服务器。

named

named是名字服务器守护进程。

dnssec-signzone

dnssec-signzone生成带有签名的区域文件。

dnssec-signkey

dnssec-signkey为区域文件密钥集生成签名。

dnssec-keygen

dnssec-keygen是DNS密钥生成器。

dnssec-makekeyset

dnssec-makekeyset利用dnssec-keygen生成的一个或多个密钥创建密钥集。

nsupdate

nsupdate用于提交DNS更新请求。