在学习Bind过程中,发现一篇很好的文章,所以把它摘录下来,一方面方便自己日后的配置,另一方面也给大家一起学习学习。我的bind也是参考这篇文章来配置的。(原文地址:http://hi.baidu.com/chenshake/blog/item/162f03172220d7044b90a718.html)

 
linux下提供dns服务的软件用的最多的是bind,在工作中,其实一般公司不会自己建立一个dns服务器,一般解析都交给万网,新网,这些代理商他们做。就等于外包把,减轻自己的工作量。
不过如果你在试验的条件下,比如你要测试邮件,那么你还是要架设一个dns服务器,这样你才能进行完整的测试。还有就是你公司希望dns自己来管理。下面就谈谈整个的过程。我经历过一次公司架设dns服务器的过程。
 
dns服务器架设的准备工作
 
1:注册一个域名,比如test.com,假设是在万网注册的。
2:拿你的机器去托管,比如电信通托管,那么他们会根据你的需要,给你1ip192.168.1.168,当然这不是公网的ip,只是举例。
3:找万网,说我要搭建一台dns服务器,dns 的名字是ns1.test.com ip地址是192.168.1.168,名字可以根据你自己喜欢来定,就是大家习惯都是ns1ns2 这样的主机名。这个是要收费的,好像是每年200左右。万网需要把你注册的ns1.test.com 和对应的ip,提交给域名最高的管理机构,在他那里做解析。
4:如果我没有猜错,过两天三天后,这个时候,你 ping ns1.test.com 就返回ip地址是192.168.1.168,不过由于你没有假设机器,所以显示无法到达。
5:这个时候你就可以在你的机器上假设dns服务器了,你可以选择windowslinux系统,都有相应的软件,在linux下,至少有两个软件可以架设dns服务器,不过最出名的是bind
6:反向dns解析,这个也是大家经常问的问题,反向,就是通过ip查找域名,不过现在很多都是一个ip对应多个域名,那么反向解析是那个域名呢,为什么要做反向解析呢?我的理解是:如果是web服务,你是不需要做反向解析的。做了反向解析也无所谓,没有什么影响。只有在提供邮件服务的情况下,才需要考虑反向域名解析。
因为现在反垃圾邮件的策略,就是通过查询反向dns解析,你的mx记录,是否是你现在发送的ip,如果不是,就不接受。
做邮件的反向dns解析,不只是你在你的dns上做配置,还需要你服务器托管商,比如电信通,他帮你去注册这个反向dns解析,这在国内也是需要收费的。好像还很贵。有些地方1千一年。
7:假如我现在有注册了一个域名,example.com ,在域名的管理的地方,有一个地方是选择你的dns服务器,这个时候,你就可以选择你刚建好的 ns1.test.com. 如果你希望帮助别人解析域名,也是需要他修改他域名记录,把他的域名解析改为你的服务器,这样你在你的机器上建立相应的记录才会生效。
假如你朋友的域名是 domain.com ,你帮他做dns解析,指向ip192.168.1.168,但是你朋友并没有修改他域名记录里的dns服务,没有修改成ns1.test.com. 那么这种情况下会出现什么情况呢?假如我的机器的dns是设置为192.168.1.168,也就是你架设dns服务器的ip,那么我访问 domain.com 是没有问题的,但是别人是不会这样做的,他还是无法访问的。不知道我说明白没有。
 
dns的功能介绍
 
缓存dnsdns转发)
这个功能,其实比较简单,也是大家用的最多的,配置也很简单,只需要把所有需要解析的请求转发给另外一台机器就可以了。现在很多router,你的dns都是192.168.1.1,其实就是一个dns转发。
dns解析功能
就是给机器做域名解析,这其实也不算复杂,其实配置bind一个比较麻烦的地方就是修改配置文件的时候比较容易搞错。如果你在现成的配置文件上修改,那是很简单一件事情。
dns的高级功能
这其实也是dns复杂的地方,不同的企业,有不同的需求。比如我们现在的网络的南北互通的问题,怎么才能做到南方的请求,给他南方的ip呢?这其实就是dns的高级功能view
不过这些也只是了解就可以了。现在很多机房都提供智能dns的服务,
 
达到的目的
 
dns server:ns1.test.com
ip
192.168.1.168
www.test.com           192.168.1.168
mail.test.com            192.168.1.168
ns1.test.com             192.168.1.168
配置过程
软件的安装,我们是采用编译的方式,那么编译安装的软件,安装的位置你是可以指定的,这个比rpm包安装灵活的地方,但是也有一个问题,每一个人的习惯是不太一样,放的位置也不一样。所以编译安装,灵活带来的问题。
有人习惯把所有的信息放在一个文件夹里,有人习惯把配置文件放到/etc 的目录下,这样比较方便,因为用rpm包安装,配置文件就是放那里。
不过通过编译安装的软件,如果你不是特意修改,那么他缺省的位置就是 /usr/local ,这个是需要你记住的。
下载软件放的位置,也是一样,每个人的习惯都不一样,我的习惯是都放在/usr/src 里,解压也是在这个文件夹里。
 
下载软件
 
由于我们需要用源码包来安装,光盘里的是rpm包,所以我们需要去下载。
目前最新的版本是9.4.2
你可以在windows下下载完,通过winscp上传,不过对于这些不大的软件,还是学习一下怎么在linux下下载。
wget 的用法很多,包括指定下载路径,如果你不会指定下载路径,那么你就转到/usr/src 的目录下再下载。
 Bind9配置过程_DNS
 
编译安装
把下面的命令直接复制过去运行就可以了,linux会运行完一行再运行第二行,由于这个我已经反复多次,肯定不会出错。大家可以一条一条执行。
安装过程
安装的目录是/usr/local/named, 所有的域名的文件都是放在 /usr/local/named/var下,这个路径需要注意,很多文章是在/var/named这个目录下,不过我觉得把所有的文件放在named的目录下,会更好。
tar zxvf bind-9.4.2.tar.gz
cd bind-9.4.2
./configure --prefix=/usr/local/named && make && make install
groupadd bind
useradd -g bind -d /usr/local/named -s /sbin/nologin bind
cd /usr/local/named/etc
/usr/local/named/sbin/rndc-confgen > rndc.conf
cat rndc.conf > rndc.key
chmod 777 /usr/local/named/var
tail -10 rndc.conf | head -9 | sed s/#\ //g > named.conf

vi named.conf
添加下面内容(
#################
options {
directory "/usr/local/named/var";          //
域名文件存放的绝对路径

pid-file "named.pid";              //
如果bind启动,自动会在/usr/local/named/var目录生成一个named.pid文件,打开文件就是named进程的ID
};
zone "." IN {
        type hint;          //
根域名服务器

        file "named.root"; //
存放在//usr/local/named/var目录,文件名为named.root
};
zone "localhost" IN {
        type master;     //
类型为主域名服务器

        file "localhost.zone"; //
本地正向解析的文件
        allow-update { none; }; 
};
zone "0.0.127.in-addr.arpa" IN {
        type master;      //
类型为主域名服务器

        file "named.local";   //
本地反向解析的文件
        allow-update { none; };
};
zone "test.com" IN {      //建立test.com
        type master;      
        file "test.com.zone";    //test.com
域映射IP地址可在此文件编写
        allow-update { none; };
};

zone "1.168.192.in-addr.arpa" in {   //
反向解析
        type master;   
        file "test.com.rev";              //
存放反向解析的文件
        allow-update { none; };
};
########################
cd /usr/local/named/var
1named.root
dig @a.root-servers.net . ns > named.root
2localhost.zone
##########
$TTL    86400
$ORIGIN localhost.
@                       1D IN SOA       @ root (
                                        42              ; serial (d. adams)
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
                        1D IN NS        @
                        1D IN A         127.0.0.1
#############
3named.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.
####################

4
test.com.zone
############
$TTL 86400      ; 1 day
@               IN      SOA     ns1.test.com.      root.test.com. (
                                2008050122 ; serial
                                28800      ; refresh (8 hours)
                                7200       ; retry (2 hours)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      ns1.test.com.
                        A       192.168.1.168
                        MX      10 mail.test.com.
www                     A       192.168.1.168
mail        A      192.168.1.168
ns1        A      192.168.1.168
#########################
5
test.com.rev
#############
$TTL 86400
@ IN SOA ns1.test.com. root.test.com.(
                                                              20031001;
                                                              7200;
                                                              3600;
                                                              43200;
                                                             86400);
@           IN           NS             ns1.test.com.
168         IN           PTR          ns1.test.com. 
##############
 
三:启动脚本
 
vi /etc/rc.d/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/named/sbin/named ]; then
/usr/local/named/sbin/named -c /usr/local/named/etc/named.conf -u bind && echo . && echo 'BIND9 server started' 
fi
;;
stop)
kill `cat /usr/local/named/var/named.pid` && echo . && echo 'BIND9 server stopped' 
;;
restart)
echo . 
echo "Restart BIND9 server" 
$0 stop
sleep 10
$0 start
;;
reload)
/usr/local/named/sbin/rndc reload
;;
status)
/usr/local/named/sbin/rndc status
;;
*)
echo "$0 start | stop | restart |reload |status" 
;;
esac

chmod 755 /etc/rc.d/init.d/named
chkconfig --add named
service named start

四:启动测试
 
/usr/local/named/sbin/named -g
你可以看到启动的过程,如果你的配置文件有错误,所以你可以根据这个排错

启动服务测试一下
/usr/local/named/sbin/named -c /usr/local/named/etc/named.conf -u bind &

查看状态
/usr/local/named/sbin/rndc status
启动服务
service named restart
编辑/etc/resolv.conf
修改这个文件,把本机的dns指向本机168
nslookup就可以测试了。