作者:cyrich
安装BIND1.去下载最新版本,如bind-9.3.2.tar.gz
2.编译安装
#tar zxvf bind-9.3.2.tar.gz
#cd bind-9.3.2
#./configure --sysconfdir=/etc 配置文件放在/etc
#make
#make install
rpm包安装,程序放在/usr/sbin目录下,默认编译安装程序放在/usr/local目录下,编译安装需手工创建主配置文件
#vi /etc/named.conf
编译时,注意大括号前后需有空格,光盘有一个叫caching-nameserver的软件包,装完后会自动复制一份默认的一些配置文件。这里我们都是手工创建
option {
directory “/var/named”; 指定服务器工作目录
};
zone “.” { 根区,服务器必须知道如何查找根,因为这里没有根服务器的数据库。 type hint; 所以定义为hint,链接到根的数据库,并指定链拉文件
file “name.ca”;
};
#mkdir /var/named
named.ca用来保存根域服务器的地址,但现在不知道根域服务器地址到底是多少。下面演示如何查找根服务器地址产生named.ca文件:
首先我们找一个可用的DNS IP,利用此DNS查找根地址。
#echo “nameserver 192.58.128.30” > /etc/resolv.conf
#dig -t NS . (dig是一个挖掘DNS记录的工具)
-t 指定类型为NS,即查找根DNS记录,查找后的结果:左边是根的域,右边是根服务器的主机名
#dig -t NS . > /var/named/named.ca
有了根服务器后,这台DNS服务器就可启动了。
用RNDC控制服务器
1.产生rndc控制文件
#rndc-confgen >/etc/rndc.conf
#tail +13 /etc/rndc.conf >>/etc/named.conf
将配置文件13行起到结尾的内容追加到named.conf
2.启动named服务器,监视/var/log/messages
#named
#tail /var/log/messages
如有错误,根据提示解决,例如RPM包安装可能会提示无法打开/var/run/named/named.pid
可以用root用户删除/var/run/named目录,再重建一个。
3.测试rndc和解析效果
#rndc status
#echo “nameserver 127.0.0.1” > /etc/resolv.conf
#host
第一次解析主机后将信息存入缓存,以后再解析时就很快,只要有了根区就可以查到整个互联网。
host,dig都是通过DNS查询,对于一台服务器来说,我们自己的应用环境总有一台叫localhost的主机,默认情况下localhost的主机总是在hosts文件定义,为取代hosts文件,需要把localhost加进DNS服务器,任何一台有网络的主机都 会有一个回环设备地址,回环设备地址没有相应的主机名,很多服务都 会起不来。
添加localhost域
#vi /etc/named.conf 添加
zone “localhost” { 区名叫localhost
type master; 表示这是主域服务器,数据库是自己维护的,不需要其他人管理
file “named.local”; 数据库文件(区文件)位置
};
编缉/var/named/named.local
@ 1D IN SOA localhost. root (
2006081201编号更新一次自己加1,当发生改变时,会通知其他域名服务器更新数据库
1H 多少时间刷新其他DNS的数据库记录
15M 主向从DNS服务器发送信息出现错误,会隔15分钟再重试
1W 如果重试还有错,一星期后过期
1D ) 缓存保存时间,默认为1天
IN NS @ 指定这个域的DNS服务器
IN A 127.0.0.1 指定DNS服务器的IP地址
在这个文件里必须指定这个文件所服务的域的范围,到底为哪个域服务,第一个字段,一般是域名或主机名,@表示当前的域名,就是前面zone后面的那句”localhost”,localhost将作为一个变量传递给named.local文件
第二个字段,表示域类型,IN为互联网类型
第三个字段,记录类型,任何区文件里都有一条SOA记录。还有其他记录类型,如NS域名服务器,A地址,接着后面是当前域的域名和管理者信息,管理者信息是一个邮箱地址,上面使用了缩写,全写应该是root.localhost.
注意不能用@,因为前面说过了,这是表示当前域名,并且最后是以点结束。
小括号前后要有空格,小括号包括的是整个域的管理信息。
localhost. IN NS localhost. 表示localhost. 域的DNS服务器为localhost
localhost. IN A 127.0.0.1 表示localhost主机IP地址为127.0.0.1
主机名,域名要以点结尾,表示结束。相同记录可省略某个字段
增加一个正向区/etc/named.conf 添加
zone “chinaitlab.com” {
type master;
file “chinaitlab.com.zone”;
};
/var/named/chinaitlab.com.zone:
@ 1D IN SOA chinaitlab.com. root (
2006081201
1H
15M
1W
1D )
IN NS ns
IN MX 10 mail
ns IN A 192.168.0.22
www IN A 10.0.0.1
news IN CNAME www
FQDN:完整的域名
A表示地址记录
SOA后跟当前域名,如果全写用点号结束,缩写则不用
root默认跟当前域名后缀,上面的root全写应为root.chinaitlab.com.
NS后必须跟主机名,不能跟IP地址
MX邮件交换机,指出当前域的邮件服务器
10为优先级
当指定了NS,MX记录,必须为他们指定一个IP地址
news是www的别名
#rndc reload 重新加载配置文件named.conf
#dig chinaitlab.com 测试,查询chinaitlab.com这个域的信息
#host 查询主机的IP(默认查询的是A记录)
有时候NS记录会这样写
…. IN NS @
IN A 192.168.0.22
前面省略的表示当前的域名,后面@表示当前域,这台主机虽然前后都可以用@,但@在NS表示的意思是主机而不是域。
#host -t NS chinaitlab.com
查询chinaitlab.com的DNS服务器是谁
#host -t A chinaitlab.com
查询chinaitlab.com这个域的A记录,即这个域的DNS服务器的IP
-t 表示记录类型,可以跟SOA,NS,A等
dig 查询比较详细,host查询信息比较简洁。
为了可以使用缩写的主机名,可以
#echo “search chinaitlab.com” >>/etc/resolv.conf
这样#host www时,会自动在www后面补全要搜索的域名,相当于#host
小括号里的管理信息主要应用在主域服务器和辅助服务器之间。
可以在第一行加上一个全局变量$TTL 1D 表示生存周期,这样关于生存周期的字段就可省略。
(正向)一个区文件必须有一条SOA记录,NS记录和这条NS记录对应指出NS IP地址的记录
(反向)一个反向文件,必须有一条SOA,一条NS,一条PTR记录
127.0.0的反向区反向区的区名由其IP反过来写加上.in-addr.arpa后缀,如127.0.0的反向区名:0.0.127.in-addr.arpa
vi /etc/named.conf 追加
zone “0.0.127.in-addr.arpa” {
type master;
file “127.0.0.zone”;
};
编缉/var/named/127.0.0.zone:
$TTL 1D
@ IN SOA @ root.localhost. (
2006081201
1H
15M
1W
1D )
IN NS localhost.
1 IN PTR localhost.
在这个反向区文件里@表示0.0.127.in-addr.arpa区名,所以root不能简写,SOA后跟当前的服务范围,@表示服务范围是当前区,最后一条表示把127.0.0.1指向localhost.。1是简写,它表示1.0.0.127.in-addr.arpa
如果是rpm包安装可以使用
#service named restart 重启服务器
#service named reload 重新加载配置文件
但编译安装只能使用rndc
#rndc reload
测试
#host 127.0.0.1 查询地址指向的名称
#dig -x 127.0.0.1
技巧:如在putty中运行vi,在vi里无法使用小键盘,设置putty的TeminalàFeatures,打勾Disable application keypad mode
vi中删除行首字符
:.,$-1s/^#\ //
.当前行 s 替换 // 删除
,到 ^# 行首#
$-1 倒数第二行 \ 转义空格字符
增加一个真实的反向区反向区为192.168.0
/etc/named.conf
zone “0.168.192.in-addr.arpa” {
type master;
file “192.168.0.zone”;
};
/var/named/192.168.0.zone:
@ IN SOA chinaitlab.com root.chinaitlab.com. (
2006091201
36000
7200
3600000
86400 )
IN NS chinaitlab.com.
1 IN PTR .
2 IN PTR ftp.chinaitlab.com.
3.0.168.192.in-addr.arpa. IN PTR mail.chinaitlab.com.
NS记录指出当前区的DNS服务器,DNS必须能找到,必须有NS的正向解析,由于前面曾在chinaitlab.com域中解析了chinaitlab.com,所以这里的名为chinaitlab.com的DNS主机是能找到的。如果前面解析了ns.chinaitlab.com为DNS服务器,则这里就应该改成ns.chinaitlab.com.
能不能缩写一定要区分,在反向区文件中,主机名是不能缩写的,但地址可以。只要弄清@字符所代表的含义就行,它就是缩写了的内容。
测试:
#rndc reload
#host 192.168.0.2
技巧:
#history 显示历史记录(执行过的命令)
#history 20 显示最近20条操作记录
#history -c 清空历史记录
vi中查找“-c”字符,使用“:/\-c /代表查找 \代表转义
子域授权主服务器的/etc/named/chinaitlab.com.zone
domain IN NS ns.domain
ns.domain IN A 192.168.0.2
在父域chinaitlab.com的区文件中,指定子域domain的DNS服务器为ns.domain,并添加A记录。当查询domain.chinaitlab.com域的主机时,将会通过ns.domain.chinaitlab.com这台子域服务器来查询,但无法子域服务中查找父域中的主机,说明父域和子域之间是单向的。
当使用#host ns.domina.chinaitlab.com查询时,仍无法查询成功,虽然区文件中定义了ns.domain的A记录,但我们查询的是domain子域的主机,它将去192.168.0.2的子域服务器中查找主机记录,但现在子域服务器还没有配置。
上面的ns.domain也可改成:
domain IN NS domain
domain IN A 192.168.0.2
用父域的domain主机名指向domain子域,不管子域DNS主机名怎 么改,只要能指向子域的DNS服务器就行。
登录子域服务器192.168.0.2
按照以前的设置编译安装或rpm安装,然后
#named -u named 启动
在/etc/named.conf添加
zone “domain.chinaitlab.com” {
type master;
file “domain.chinaitlab.com.zone”;
};
编缉/var/named/domain.chinaitlab.com.zone
$TTL 1D
@ IN SOA @ root (
2006091201
1H
15M
1W
1D )
IN NS ns.
ns IN A 192.168.0.2
www IN A 192.168.0.3
#rndc reload
#echo “nameserver 127.0.0.1” > /etc/resolv.conf
#host ns.domain.chinaitlab.com
#host
现在如果resolv.conf文件的nameserver是子域的192.168.0.2,那么只能解析到子域的主机,不能找到父域的主机。但是如果nameserver是主域的DNS192.168.0.22,可以查询到父域和子域中的主机,所以我们使用时,客户机只要将DNS指向主的DNS服务器,这里也就是那台192.168.0.22,这样就可以解析到整个域中的主机。
辅助域名服务器辅助域名服务器的作用就是备份主域服务器的数据,当主服务器崩溃或暂时离线时,可代替主服务器来工作,一般机可以设置两个DNS服务器,一个主的,一个备份的。
首先要保证主服务器能正常工作,这样辅助服务器才能同步主服务器的数据。我们主要是在辅助域名服务器上做配置。
登录辅助服务器192.168.0.2
主配置文件/etc/named.conf添加
zone “chinaitlab.com” {
type slave;
file “chinaitlab.com.zone”;
masters { 192.168.0.22; };
};
辅助域名配置很简单,只需在主配置文件增加一个区即可,也不用配置区文件,它由服务器同步自动产生。
slave表示辅助服务器
chinaitlab.com.zone不用创建会自动产生。
等同步完以后,我们可以看看它的内容,应该和主服务器的区文件是一致的。masters指定主域服务器,注意其中的格式,大括号前后的空格,分号。
#rndc reload
#tail /var/log/messages 发现同步时出现错误,这是由于/var/named目录权限不允许named用户写,而named服务是由named用户启动的,所以我们要修改一下/var/named目录权限
#ls -ld /var/named/
-d表示目录信息
#chmod g+w /var/named
rndc reload
测试,在辅助服务器中,nameserver是自己。
#host 成功解析
主从服务器的同步和更新主要是通过区文件中的SOA记录来实现 的。以前面为例,第一次同步,从主服务器下载数据库文件(区文件),每隔1小时更新管理信息,如发现编号发生变化,则同步数据库文件,同步时向主服务器发送请求失败,每隔15分钟重试,当重试了1周后仍无法成功,则过期不再送请求,缓存保存时间为1天。
以普通用户身份执行
首先修改named.conf,设置pid.file选项值
option {
….
pid-file “/var/run/named/named.pid”;
};
#useradd -s /bin/false -d /dev/null named (不允许登录,没有home目录)
#mkdir /var/run/named
#chown named.named /var/run/named
#chmod 700 /var/run/named
#named -u named
#echo “/usr/local/sbin/named -u named” >>/etc/rc.local
根据需要修改/var/named目录的属性。使用named用户运行,确保服务器的安全性,防止服务器受到攻击后得到root权限。
#ps aux | grep named
aux 打印进程的用户身份
如果是rpm安装,则
#echo “/usr/sbin/named -u named” >>/etc/rc.local
如果是rpm安装,创建用户、目录、目录权限等已经自动完成了。如果是辅助服务器,同步时需要写/var/named,但named用户是无权写入的,所以应该修改/var/named目录权限,允许named组写。
常用配置选项
options {
directory “/var/named”; 默认工作目录,数据库文件存放的位置
forwarders { 192.168.2.1; }; 当服务器无法解析请求时,转发给192.168.2.1来解析,再无法解析就请求根
allow-transfer { 192.168.1.1; }; 允许哪台服务器同步数据库文件,一般来用控制辅助服务器,这里为全局设置
allow-query { 192.168.0/24; }; 允许某台主机或某个网段访问这台DNS服务器
};
zone “chinaitlab.com” {
type master;
file “chinaitlab.com.zone”;
allow-transfer { 192.168.1.1; };
};
1.编缉/etc/named.conf
设置options选项
一个根区
自己需要解析的区
及相应的反向区
2.rndc-confgen产生rndc.conf
并把最后几行追加到named.conf
3.根区数据库文件,可使用dig工具产生,其它区文件手工编辑。