分类:
2010-04-21 18:16:37
这篇文章是我4年前写的,版本肯定是陈旧了,而且我看了最近爆发的DNS的bug,这个版本应该是不行的,所以如果要用bind做为DNS服务器,最好下载最新的,但是安装配置应该大同小异了。
主辅DNS服务器配置
第一部分基本的安装配置(适合主辅DNS服务器)
1、安装
为了配置方便,本人是源代码安装,首先查看rpm –qa | grep named,如果系统已经有自带的bind,可以删除,因为最新的 bug肯定少,所以我建议现在最新的bind。可以去网站上下载最新的
本人下载的是bind-9.3.2-P1.tar.gz
解压:tar –zxvf bind-9.3.2-P1.tar.gz 然后进解压目录
Cd bind-9.3.2-P1 本人是新建了一个目录,这样我删除或别的操作都很方便/usr/named
安装:./configure –prefix=/usr/named –mandir=/ur/named/share/man 在这里指明路径,和我的man的路径
make 大概需要时间稍长一点
make install 大概需要几分钟的时间。
2、配置
安装完成后。在/usr/named下面没有etc文件,自己动手新建一个mkdir /usr/named/etc 新建的etc文件夹主要放配置文件。同时在/var下新建一个namedb的文件放置区域的配置文件。
在etc中vi named.conf里面写入
Options {
Directory “/var/namedb”; (这个是工作目录)
Pid-file “named.pid”; (指定pid的名称和存放位置)
};
Zone “.” {
Type hint;
File “/usr/name/etc/named.root”;
}; (这个是建立根域)
因为此时这里还没有根域服务器的A记录,目前是空的要手动建立!
可以用dig命令,通过其他的NS服务器获取,我使用的本地DNS服务器地址是211.100.28.154 –t表示type类型。
首先在/etc/resolv.conf文件里设置好DNS服务器的地址
Echo “nameserver 211.100.28.xxx” > /etc/resolv.conf
/etc/resolv.conf内容如下:
Search test.cn (表示当提供了一个不包括完全域名的主机时,在该主机后添加domainname.com的后缀。
Nameserver 211.100.28.xxx (表示解析域名时使用的地址指定的主机为域名服务器,其中域名服务器是按照文件中出现的顺序来查询的)
将目前的DNS修改为有效的DNS服务器。然后获取根域服务器地址
Dig –t NS (有的时候敲上这个命令后会出现 –bash :dig:command not found)说是没有找到这个命令,如果出现了这样的情况要给出dig的全路径。我的是/usr/named/bin/dig –t NS 就可以了。(注:这样的情况会发生在。已经安装过bind,然后又删除了。再次重新安装回找不到这个命令要给出全路径)。
如果显示了所有根域服务器的IP地址,目前全世界的根域服务器都在美国放着,有13台。则可以直接导入到/usr.named/etc/named.root文件里面。
格式如下: /usr/named/bin/dig –t NS > /usr/named/et/named.root
如果不能导入,也可以去网上下载
此时启动named服务
/usr/named/sbin/named –c /usr/named/etc/named.conf & (如果想看启动过成可以把-c变成-gc)
将提示open /etc/rendc.key file not found
这是说没有rndc的key文件,因为配置还不完整
我们生成rndc配置文件
/usr/named/sbin/rndc-confgen > /usr/named/etc/rndc.conf (我看大多数配置都放在了/etc下,我为了管理方便放在了我的配置目录下。)
然后vi rndc.conf打开查看文件,可以看到最后面13行的内容已经用#注释了,这个说明该部分内容是要追加到/usr/named/etc/named.conf里面的。
Tail +13 /etc/rndc.conf >> /usr/named/etc/named.conf(这个是追加不是覆盖,意思式追加到13行以后。)
Ok现在就可以启动named服务了
查看运行记录,tail /var/log/messages
然后输入rndc status 可以查看rndc的状态,返回
Namber of iones:0
Debug level :0
Xfers running:0
Soa queries in progress:0
Query logging is OFF
Recursive clients:0/100
Tcp clients: 0/100
Server is up and running
说名DNS已经可以正常解析域名了!
可以试试效果host (我自己配置的这个要加全路径)
第二部分主DNS解析服务
我们先添加localhost域,首先加入解析localhost 127.0.0.1回环域
在/usr/named/etc/named.conf文件中加入zone正向区域:
接着根域的后面加入:
Zone “localhost” {
Type master; (证明这个是主服务器)
File “/var/namedb/localhost.zone”;(给出zone区域文件的工作路径)
Allow-update { none; };
};
反向区域“
Zone “0.0.127.in-addr.arpa” {
Type master;
File “/var/namedb/127.0.0.rev”;
Allow-update { none; };
};
在/var/namedb新建vi localhost.zone和vi 127.0.0.rev
Locahost.zone文件内容:
$TTL 86400
$ORIGIN localhost.
@ 1D IN SOA localhost. root.localhost.(
2006101700
1H
15M
1W
1D )
1D IN NS @
1D IN A 127.0.0.1
127.0.0.rev文件内容:
$TTL 86400
@ IN SOA localhost. root.localhost (
2006101700
1H
15M
1W
1D )
IN NS localhost
1 IN PTR localhost.
保存退出
/usr/named/bin/rndc reload
/usr/named/bin/host 127.0.0.1测试效果
Dig –x 127.0.0.1
Dig –t PTR 1.0.0.127.in-addr-arpa
我开始建立自己要解析的记录
在/usr/named/etc/named.conf中加入
zone "test.cn" {
type master;
file "/var/namedb/test.cn.zone";
allow-update { none; };
};
zone "28.100.211.in-addr.arpa" {
type master;
file "/var/namedb/211.100.28.rev";
allow-update { none; };
};
再在/var/namedb下新建vi test.cn.zone和211.100.28.rev这两个文件
test.zn.zone内容如下:
$TTL 86400
@ IN SOA test.cn. root.test.cn. (
2006102504
1H
15M
1W
1D )
IN NS dns.test.cn.
IN NS dns1.test.cn.
dns IN A 211.100.28.xxx
dns1 IN A 211.100.28.xxx
www IN A 211.100.28.xxx
mail IN A 211.100.28.xxx
mail2 IN A 211.100.28.xxx
wap IN A 211.100.28.xxx
admin IN A 211.100.28.xxx
file IN A 211.100.28.xxx
db IN A 211.100.28.xxx
IN MX 5 test.cn.
下面是反向区域211.100.28.rev的内容:
$TTL 86400
@ IN SOA test.cn. root.test.cn. (
2006102400
1H
15M
1W
1D )
IN NS dns.test.cn.
IN NS dns1.test.cn.
xxx IN PTR
xxx IN PTR dns.test.cn.
xxx IN PTR dns1.test.cn.
xxx IN PTR mail.test.cn.
xxx IN PTR mail2.test.cn.
xxx IN PTR wap.test.cn.
然后使用如下命令/usr/named/bin/rndc reload重新加载配置文件或者重新启动named
第三部分 测试DNS
我们在本地使用host这个命令测试
查看客户端配置
Cat /etc/resolv.conf
Nameserver 211.100.28.xxx
查看主域名服务器的IP地址
Ifconfig eth0 | grep inet
Inet addr : 211.100.28.xxx Bcast : 211.100.28.128 Mask :255.255.255.129
测试并显示域配置信息
正向查询主机地址
/usr/named/bin/host
has address 211.100.28.xxx
反向查询域名
/usr/named/bin/host 211.100.28.xxx
xxx.28.100.211.in-addr.arpa domain name pointer .
查询不同类型的资源记录配置
Host –t NS test.cn
Host –t SOA test.cn
Host –t MX test.cn
列出整个域的信息
Host –l test.cn. 211.100.28.xxx
列出与一个主机名相关的资源记录的详细信息
Host –a jiankong.test.cn
我们还可以使用nslookup命令测试DNS(下在我们还没有配置可以在公网使用的DNS,这个我在下面回说明的,如果我们要在远程的本机上测试,必须把自己机器上的DNS设置成你配置的这个DNS的IP地址)
Nslookup
>
正向查询主机地址
Server: 127.0.0.1
Address: 127.0.0.1#53
Name:
Address: 211.100.28.xxx
> 211.100.28.xxx
反向查询域名
Server: 127.0.0.1
Address: 127.0.0.1#53
xxx.28.100.211.in-addr.arpa name = .
下面就是一些测试的命令,这里我就不一一写出测试出来的内容,只把命令和功能打出
显示当前设置的所有数值
>set all
查询test.cn域的NS资源记录配置
>set type=NS
>test.cn
查询test.cn域的SOA 资源记录配置
>set type=SOA
>test.cn
查询test.cn域的MX 资源记录配置
>set type=MX
>test.cn
查询test.cn域的所有配置
>set type=any
>test.cn
查询反向的所有配置
>28.100.211.in-addr-arpa
退出
>exit
第四部分辅助DNS配置
具体的添加文件方式同主DNS服务器,只不过在 named.conf文件写入有区别
zone "test.cn" IN {
type slave;
file "/var/namedb/test.cn.zone";
masters { 211.100.28.xxx; };
};
zone "28.100.211.in-addr.arpa" IN {
type slave;
file "/var/namedb/211.100.28.rev";
masters { 211.100.28.xxx; };
};
辅助的DNS服务器这里的类型是type slave而不是type master
其余的和主DNS 服务器的配置都是一样的。而且当主DNS服务器更新后辅助的DNS也跟着更新。
第五部分 外网使用的DNS
在配置完成上面的服务器后,如果想让服务器在外网生效做,解析,我是在万网申请的域名,可以去你要做dns服务器的哪个域名下修改DNS服务器,并更改成你自己的地址。更改完成后大概12个小时生效,可以去CNNIC上去查询,如果生效,再把你的这个域名DNS服务器更改成自己的域名服务器。就可以生效解析了。
第六部分 DNS的高级配置
非递归名字服务器:
使BIND名字服务器以非递归模式运行:
options {
recursion no;
};
如果你想不让服务器建立起缓存,那还需要将一个配置选项和recursion no一起使用:
options {
fetch-glue no;
};
限制客户端的数量 :
options {
recursive-clients 10;
};
限制查询:
options {
allow-query { 192.168.1/24; };
};
日志分析:
在默认情况下,BIND把日志消息写到/var/log/messages文件中,而这些日志消息是非常少的,主要就是启动,关闭的日志记录和一些严重错误的消息,所以要详细记录服务器的运行状况,需要自己配置服务器的日志行为。也就是要在配置文件named.conf中使用logging语句来定制自己所需要的日志记录,logging语句的语法为:
logging {
channel
file
syslog
null;
stderr;
severity
print-time
print-severity
print-category
};
category
在日志中主要有两个概念:通道(channel)和类别(category)。通道指定了应该向哪里发送日志数据:是发送给syslog,还是写在一个文件里,或是发送给named的标准错误输出,还是发送到位存储桶(bit bucket)。类别则规定了哪些数据需要记录。下面我们主要介绍一下文件通道和类别。
在定义通道的语句中,severity是指定记录消息的级别。在bind中主要有以下几个级别(按照严重性递减的顺序):
critical 紧要关头的
error 错误的
warning 警告
notice 注意
info 信息
debug [ level ] 除错
dynamic 电动
定义了某个级别后,系统会记录包括该级别以及比该级别更严重的级别的所有消息。比如定义级别为error,则会记录critical和error两个级别的信息。一般情况下,我们记录到info级别就可以了。print-time是设定在日志中是否需要写入时间,print-severity是设定在日志中是否需要写入消息级别,print-category是设定在日志中是否需要写入日志类别。
category语句是指定哪一种类别的数据使用哪个或者哪几个已经定义了的通道。在bind9中类别有:
default
default类别匹配所有未明确指定通道的类别,但是不匹配不属于任何类别的消息。这些不属于任何类别的消息属于下面列出的这些类别。
general
包括所有未明确分类的BIND消息。
client
处理客户端请求。
config
配置文件分析和处理。
database
同BIND内部数据库相关的消息,用来存储区数据和缓存记录。
dnssec
处理DNSSEC签名的响应。
lame-servers
发现错误授权。
network
网络操作
notify
异步区变动通知。
queries
查询日志
resolver
名字解析,包括对来自解析器的递归查询的处理。
security
认可/非认可的请求。
update
动态更新事件。
xfer-in
从远程名字服务器到本地名字服务器的区传送。
xfer-out
从本地名字服务器到远程名字服务器的区传送。
例如要记录queries消息,就可以如下配置(把以下语句添加到named.conf中就可以了):
logging {
channel query_log {
file "query.log" versions 3 size 20m;
severity info;
print-time yes;
print-category yes;
};
category queries {
query_log;
};
};
这样服务器会在工作目录(directory语句所指定的目录,通常为:/var/named)下创建query.log这个文件,并把运行过程产生的queries消息写如到query.log文件中,如下:
Nov 28 16:04:55.516 queries: client 192.168.0.113#32770: query: dns.andy.com IN A
另外解释一下“[color=blue]file "query.log" versions 3 size 20m;[/color]”语句中“version”和“size”的意义:
version是指定允许同时存在多少个版本的该文件,比如指定3个版本(version 3),bind9会保存query.log、query.log0、query.log1和query.log2。
Size是指定文件大小的上限,如果只设定了size而没有设定version的话,当文件达到指定的文件大小上限时,服务器停止写入该文件。如果设定了version的话,服务器会进行循环,比如把query.log变成query.log1,query.log1变成query.log2等,然后建立一个新的query.log进行写入。
错误1:/export1/namedb/haoyisheng.com.zone:59: bjie_forum.haoyisheng.com: bad owner name (check-names)
1 error: bad owner name(check-names)
--> dns 的 RFC 中規定,名稱帶_(底線)是不允許的。(在bind8.0中是允许下划线的,9.0中不允许。)
不過,可將 check-name 取消就可以了。
在/etc/resolv.conf 加入 options no-check-names
或是在 zone xxx {
check-names ignore;
}