第一:说明,软件说明,和安装的目的

架设基于linux下的DNS服务器,本文参照:http://www.tevisky.com/post-6.html

http://www.turbolinux.com.cn/turbo/wiki/doku.php?id=dns:bind-chroot%E5%8A%9F%E8%83%BD

 

第二:本例操作环境

所使用的系统环境为 Centos 5.6 64位操作系统

[root@jedy ~]# uname -a
Linux jedy.com 2.6.18-238.el5 #1 SMP Thu Jan 13 15:51:15 EST 2011 x86_64 x86_64 x86_64 GNU/Linux
[root@jedy ~]# more /etc/redhat-release
CentOS release 5.6 (Final)
[root@jedy ~]#

第三:所需要的软件包如下

bind-9.9.0.tar.gz http://www.isc.org/downloads/all

第四:安装

1.yum 或rpm方式安装

[root@jedy ~]# yum –y install bind bind-utils bind-libs bind-chroot

 

2.源码安装

[root@jedy ~]# tar zxvf bind-9.9.0.tar.gz -C /usr/local/src/
[root@jedy ~]# cd /usr/local/src/bind-9.9.0/
[root@jedy bind-9.9.0]# ./configure --prefix=/usr/local/bind-9.9.0 --enable-threads --disable-openssl-version-check --sysconfdir=/etc --with-libtool

对于.configure参数的说明:

--prefix=/usr/local/bind 是指定bind9的安装目录,默认是/usr/local

--enable-threads 是开启多线程的支持;如果你的系统有多个CPU,那么可以使用这个选项

--disable-openssl-version-check 是关闭openssl的检查

--with-openssl=/usr/local/openssl 是指定openssl的安装路径

--sysconfdir=/etc/bind 设置named.conf配置文件放置的目录,默认是--prefix选项指定的目录下的/etc下

--localstatdir=/var 设置 run/named.pid 放置的目录,默认是--prefix选项指定的目录下的/var下

--with-libtool 将BIND的库文件编译为动态共享库文件,这个选项默认是未选择的。
如果不选这个选项,那么编译后的named命令会比较大,lib目录中的库文件都是.a后缀的
如果选上这个选项,那么编译后的named命令会很小,lib目录中的库文件则是.so后缀

[root@jedy bind-9.9.0]# make && make install \\ 这个是编译和安装,&&是指在 make执行成功后才会执行make instal
[root@jedy bind-9.9.0]# ln –sv /usr/local/bind-9.9.0 /usr/local/bind
[root@jedy bind-9.9.0]# useradd –r named
[root@jedy bind-9.9.0]# /usr/local/bind/sbin/rndc-confgen > /etc/rndc.conf \\ 生成/etc/rndc.conf
[root@jedy bind-9.9.0]# tail -10 /etc/rndc.conf|head -9|sed s/#\ //g >>/etc/named.conf \\ 生成/etc/named.conf

 

第五:配置

1.编辑named.conf文件

[root@jedy bind-9.9.0]# vi /etc/named.conf \\ 编辑named.conf文件

文件内容如下:

key "rndc-key" { \\ key文件
algorithm hmac-md5;
secret "9T7II+imYuy9VTB8VNVlzg==";
};

options {
directory "/usr/local/bind/var"; \\ zone文件存放位置
pid-file "/usr/local/bind/var/run/named.pid";
version "I am bind 9.9.0";

allow-query {any;};

};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};

acl "my lan"{ \\ 定义my lan的范围
127.0.0.0/8;172.16.200.0/24;
};

view "local" { \\ 定义本地视图 视图名称可以自定义
match-clients { "my lan"; }; \\ 仅允许my lan中定义的地址使用本视图
recursion yes;

zone "." IN { \\ 根区域文件
type hint;
file "named.ca";
};

zone "jedy.com" IN { \\ jedy.com的区域文件
type master;
file "named.jedy.com";
};

zone "200.16.172.in-addr.arpa" IN { \\ jedy.com的反向解析文件 反向解析可不做
type master;
file "named.172.16.200";
};
};

zone "localhost" IN { \\ localhost的区域文件
type master;
file "localhost.zone";
allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN { \\ localhost的反向解析文件
type master;
file "named.local";
allow-update { none; };
};
};

view "internet" { \\ 定义internet视图 视图名称可以自定义 目的在于让internet访问时解析成公网ip
match-clients { any; };
recursion no;

zone "." IN {
type hint;
file "named.ca";
};

zone "jedy.com" IN { \\ jedy.com解析成公网ip
type master;
file "named.jedy.com.internet";
};

zone "10.199.10.in-addr.arpa" IN { \\ jedy.com解析成公网ip的反向解析文件 反向解析可不做
type master;
file "named.10.199.10";
};
};

~

2. named.root 需要到根域上去下载。如下:

[root@jedy bind-9.9.0]# ftp rs.internic.net
Connected to rs.internic.net.
220-**********************************************************
220-***** *****
220-***** InterNIC Public FTP Server *****
220-***** *****
220-***** Login with username "anonymous" *****
220-***** You may change directories to the following: *****
220-***** *****
220-***** domain - Root Domain Zone Files *****
220-***** *****
220-***** Unauthorized access to this system may *****
220-***** result in criminal prosecution. *****
220-***** *****
220-***** All sessions established with this server are *****
220-***** monitored and logged. Disconnect now if you do *****
220-***** not consent to having your actions monitored *****
220-***** and logged. *****
220-***** *****
220-**********************************************************
220
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (rs.internic.net:root): anonymous
331 Please specify the password.
Password:anonymous
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd domain
250 Directory successfully changed.
ftp> get root.zone
local: named.root remote: named.root
227 Entering Passive Mode (199,7,52,73,189,56)
150 Opening BINARY mode data connection for named.root (3048 bytes).
226 File send OK.
3048 bytes received in 7.9e-05 seconds (3.8e+04 Kbytes/s)
ftp> bye

[root@jedy bind-9.9.0]# mv root.zone /usr/local/bind/var/named.ca

[root@jedy bind-9.9.0]# cd /usr/local/bind/var

 

3.新建各区域文件

[root@jedy var]# vim localhost.zone 内容如下:

$TTL 86400
@ IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum

IN NS @
IN A 127.0.0.1
IN AAAA ::1 \\ ipv6

[root@jedy var]# vim named.local 内容如下:

$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.

1 IN PTR localhost.

[root@jedy var]# vim named.jedy.com 内容如下:

$TTL 86400
@ IN SOA jedy.com. root.jedy.com. (
2008080804 ;
28800 ;
14400 ;
3600000 ;
86400 ) ;
@ IN NS jedy.com.
@ IN MX 10 mail.jedy.com.
jedy.com. IN A 172.16.200.225
www IN A 172.16.200.225
mail IN CNAME www

[root@jedy var]# vim named.172.16.200 内容如下:

$TTL 86400
@ IN SOA jedy.com. root.jedy.com. (
2008080802 ;
28800 ;
14400 ;
3600000 ;
86400 ) ;
@ IN NS jedy.com.
225 IN PTR jedy.com.
225 IN PTR www.jedy.com.
225 IN PTR mail.jedy.com.

[root@jedy var]# vim named.jedy.com.internet 内容如下:

$TTL 86400
@ IN SOA jedy.com. root.jedy.com. (
2008080804 ;
28800 ;
14400 ;
3600000 ;
86400 ) ;
@ IN NS jedy.com.
@ IN MX 10 mail.jedy.com.
jedy.com. IN A 10.199.10.240
www IN A 10.199.10.240
mail IN CNAME www

[root@jedy var]# vim named.10.199.10 内容如下:

$TTL 86400
@ IN SOA jedy.com. root.jedy.com. (
2008080802 ;
28800 ;
14400 ;
3600000 ;
86400 ) ;
@ IN NS jedy.com.
240 IN PTR jedy.com.
240 IN PTR www.jedy.com.
240 IN PTR mail.jedy.com.

4.测试配置文件是否正确

 

检查主配置文件是否正确,如果没有提示说明你的配置文件没有配置的语法错误

[root@jedy var]# /usr/local/bind/sbin/named-checkconf /etc/named.conf


检查区域文件是否正确返回下列内容正确,中间的localhost是你在nmaed.conf文件指定的区域

[root@jedy var]# /usr/local/bind/sbin/named-checkzone localhost /usr/local/bind/var/localhost.zone

zone localhost/IN: loaded serial 2012051502
OK
[root@jedy var]#

 

检查自定义的域是否配置正确,中间的jedy.com也是你在named.conf文件中指定的区域
[root@jedy var]# /usr/local/bind/sbin/named-checkzone jedy.com /usr/local/bind/var/named.jedy.com
zone jedy.com/IN: loaded serial 2012051502
OK
[root@jedy var]# mkdir /usr/local/bind/var/run

[root@jedy var]# chown named /usr/local/bind/var/run
[root@jedy var]# /usr/local/bind/sbin/named -C /etc/named.conf -u root& // 启动 dns服务器

[root@jedy var]# netstat –tlnp | grep 53

 

至此 关于bind的安装配置部分结束。

 

第六:测试连接

#使用nslook host 或dig。

[root@jedy var]# /usr/local/bind/bin/dig @127.0.0.1 jedy.com A

; <&lt;>&gt; DiG 9.9.0 <&lt;>&gt; @127.0.0.1 jedy.com A
; (1 server found)
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 36479
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;jedy.com. IN A

;; ANSWER SECTION:
jedy.com. 86400 IN A 172.16.200.225

;; AUTHORITY SECTION:
jedy.com. 86400 IN NS jedy.com.

;; Query time: 3 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue May 15 15:40:59 2012
;; MSG SIZE rcvd: 67

[root@jedy var]#

第七:使用服务器进程启动dns

1.新建named 服务器进程

[root@jedy var]# cd

[root@jedy ~]# vim /etc/init.d/named

################################脚本开始################################

#!/bin/bash
# named a network name service.
# chkconfig: 345 35 75
# description: a name server

if [ `id -u` -ne 0 ]
then
echo "ERROR:For bind to port 53,must run as root."
exit 1
fi
case "$1" in
start)
if [ -x /usr/local/bind/sbin/named ]; then
/usr/local/bind/sbin/named -c /etc/named.conf -u named && echo . && echo 'BIND9 server started'
fi
;;
stop)
kill `cat /usr/local/bind/var/run/named.pid` && echo . && echo 'BIND9 server stopped'
;;
restart)
echo .
echo "Restart BIND9 server"
$0 stop
sleep 10
$0 start
;;
reload)
/usr/local/bind/sbin/rndc reload
;;
status)
/usr/local/bind/sbin/rndc status
;;
*)
echo "$0 start | stop | restart |reload |status"
;;
esac

################################脚本结束################################

2.启动 dns

[root@jedy ~]#chmod +x /etc/init.d/named

[root@jedy ~]#services named start

3. 加入开机自动启动

[root@jedy ~]#chkconfig –add named

4. 查看服务端口状态

[root@jedy ~]#netstart -tlnp | grep named 如果有53 说明服务启动成功

第八:使用chroot提高DNS的安全性

前面我们在配置文件里也增加了对DNS的保护,如 view 的设置 和acl的设置,本此节中 我们使用chroot 功能更一步加强DNS的安全性

 

要开启chroot功能,在rpm安装DNS时 要安装bind-chroot包,源码安装时会默认开启此功能,(如果在编辑时加上 --disable-chroot 将会关闭chroot功能)

1.新建chroot的各个文件

[root@jedy ~]# mkdir -pv /var/named/chroot/etc /var/named/chroot/dev /var/named/chroot/var/ \\ 建立chroot相关的文件夹

[root@jedy ~]# cd /var/named/chroot/
[root@jedy chroot]# chown –R named.named /var/named

[root@jedy chroot]# cp /usr/local/bind/var/* /var/named/chroot/var/
[root@jedy chroot]# cp /etc/named.conf /var/named/chroot/etc
[root@jedy chroot]# cd /var/named/chroot/dev
[root@jedy dev]# mknod random c 1 8
[root@jedy dev]# mknod zero c 1 5
[root@jedy dev]# mknod null c 1 3
[root@jedy dev]# cd ..

2.修改主配置文件

[root@jedy chroot]# vi /var/named/chroot/etc/named.conf

options {
directory "/var"; \\ 更改这一行,定义zone文件的存放位置,其实使用chroot后这个位置就是相对于chroot目录的位置 ,在本文是 /var/named/chroot/var
pid-file "/var/run/named.pid"; \\ 更改这一行,定义pid文件的存放位置,其实使用chroot后这个位置就是相对于chroot目录的位置 ,在本文是 /var/named/chroot/var/run/named.pid
version "I am bind 9.9.0";

[root@jedy chroot]#

3.测试chroot功能
[root@jedy chroot]# /usr/local/bind/sbin/named -t /var/named/chroot -u named \\ 测试named能不能起来,如果可以起来 说明成功 再确认一下端口
[root@jedy chroot]# netstat -tlnp | grep named
tcp 0 0 192.168.19.64:53 0.0.0.0:* LISTEN 22928/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 22928/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 22928/named
[root@jedy chroot]#

4.使用服务器进程启动服务
[root@jedy chroot]#

[root@jedy chroot]# more /etc/init.d/named
#!/bin/bash
# named a network name service.
# chkconfig: 345 35 75
# description: a name server

if [ `id -u` -ne 0 ]
then
echo "ERROR:For bind to port 53,must run as root."
exit 1
fi
case "$1" in
start)
if [ -x /usr/local/bind/sbin/named ]; then
/usr/local/bind/sbin/named -t /var/named/chroot -u named && echo . && echo 'BIND9 server started' \\ 修改此处
fi
;;
stop)
kill `cat /var/named/chroot/var/run/named.pid` && echo . && echo 'BIND9 server stopped' \\ 修改此处
;;
restart)
echo .
echo "Restart BIND9 server"
$0 stop
sleep 10
$0 start
;;
reload)
/usr/local/bind/sbin/rndc reload
;;
status)
/usr/local/bind/sbin/rndc status
;;
*)
echo "$0 start | stop | restart |reload |status"
;;
esac
[root@jedy chroot]# chkconfig --del named
[root@jedy chroot]# chkconfig --add named
[root@jedy chroot]# service named start
[root@jedy chroot]# netstart –tlnp | grep named
[root@jedy chroot]#
[root@jedy chroot]#
[root@jedy chroot]#

至此 关于dns的安装配置全部结束。

本文出自 “jedy 网络技术&linux学习” 博客,请务必保留此出处http://jedy82.blog.51cto.com/425872/855541