在学习Bind过程中,发现一篇很好的文章,所以把它摘录下来,一方面方便自己日后的配置,另一方面也给大家一起学习学习。我的bind也是参考这篇文章来配置的。(原文地址:http://hi.baidu.com/chenshake/blog/item/162f03172220d7044b90a718.html)
在
linux下提供
dns服务的软件用的最多的是
bind,在工作中,其实一般公司不会自己建立一个
dns服务器,一般解析都交给万网,新网,这些代理商他们做。就等于外包把,减轻自己的工作量。
不过如果你在试验的条件下,比如你要测试邮件,那么你还是要架设一个
dns服务器,这样你才能进行完整的测试。还有就是你公司希望
dns自己来管理。下面就谈谈整个的过程。我经历过一次公司架设
dns服务器的过程。
dns
服务器架设的准备工作
1:注册一个域名,比如
test.com,假设是在万网注册的。
2:拿你的机器去托管,比如电信通托管,那么他们会根据你的需要,给你
1个
ip:
192.168.1.168,当然这不是公网的
ip,只是举例。
3:找万网,说我要搭建一台
dns服务器
,dns 的名字是
ns1.test.com ip地址是
192.168.1.168,名字可以根据你自己喜欢来定,就是大家习惯都是
ns1,
ns2 这样的主机名。这个是要收费的,好像是每年
200左右。万网需要把你注册的
ns1.test.com 和对应的
ip,提交给域名最高的管理机构,在他那里做解析。
4:如果我没有猜错,过两天三天后,这个时候,你
ping ns1.test.com 就返回
ip地址是
192.168.1.168,不过由于你没有假设机器,所以显示无法到达。
5:这个时候你就可以在你的机器上假设
dns服务器了,你可以选择
windows,
linux系统,都有相应的软件,在
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解析,指向
ip是
192.168.1.168,但是你朋友并没有修改他域名记录里的
dns服务,没有修改成
ns1.test.com. 那么这种情况下会出现什么情况呢?假如我的机器的
dns是设置为
192.168.1.168,也就是你架设
dns服务器的
ip,那么我访问
domain.com 是没有问题的,但是别人是不会这样做的,他还是无法访问的。不知道我说明白没有。
dns
的功能介绍
缓存
dns(
dns转发)
这个功能,其实比较简单,也是大家用的最多的,配置也很简单,只需要把所有需要解析的请求转发给另外一台机器就可以了。现在很多
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包,所以我们需要去下载。
http://www.isc.org/index.pl
目前最新的版本是
9.4.2
你可以在
windows下下载完,通过
winscp上传,不过对于这些不大的软件,还是学习一下怎么在
linux下下载。
wget http://ftp.isc.org/isc/bind9/9.4.2/bind-9.4.2.tar.gz
wget 的用法很多,包括指定下载路径,如果你不会指定下载路径,那么你就转到
/usr/src 的目录下再下载。
编译安装
把下面的命令直接复制过去运行就可以了,
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
1:
named.root
dig @a.root-servers.net . ns > named.root
2:
localhost.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
#############
3:
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.
####################
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就可以测试了。