DNS服务器标准软件:
bind:Berkeley Internet Name Domain
相关联的软件包:以bind开头的软件包
bind-libs 提供一些外围工具的库文件
bind-utils 客户端命令行的工具程序
bind 服务器端包,用于提供DNS server的
bind-chroot,一定不要装,这个程序很诡异
bind-devel 开发包
bind-libbind-devel 开发包
bind-sdb 将DNS的数据放在mysql数据库中
如果要用的话,就只用安装bind就可以了
caching-nameserver,这个软件包用yum安装以后可以自动给你安装配成成一个纯缓存名称的DNS服务器
dig -t NS .
dig -t NS . @a.root-servers.net > /var/named/named.ca
DNS的特殊之处,DNS是协议,bind是软件,而进程名字叫named
配置文件主要有三个,或者说是两个
第一个:/etc/named.conf
第二个:/etc/rndc.conf或者叫/etc/rndc.key这两个文件不完全一样,但是配置rndc的
是bind的远程辅助工具,
主配置文件主要定义区域的,本地DNS服务器主要负责哪些区域的名称服务器的解析,所以主要是定义一些区域的,
当然这里还定义一些全局的选项,/etc/named.conf,要想实现名称解析,还需要一些数据文件,这些数据文件在redhat上
默认在/var/named/目录下,通常每一个区域都要有一个配置文件,所以每一个域都会有两个配置文件
来实现本域内的正向与反向的解析,这些数据文件叫什么名字无所为,可以自己定义,但是有一个是必须
得有的,如果你在互联网上使用,你必须告诉你的DNS服务器你的根在哪里,你必须告诉它
全球那十三台根节点服务器的域名服务器是谁,在redhat上通常叫named.ca,这个名字加什么不重要,
重要的是你在/etc/named.conf里的定义,只要对应的文件存在就可以了,
主配置文件主要有两段组成:
第一段,全局选项段:
我们使用options来引导,加一个{},在里面定义各选项来引导,但是对于这个配置文件来讲,
语法要求非常严格,在”{“的前后一定要有空格,否则就是语法错误,后面有字符的话,字符
与”{“之间也必须有空格,如果没有字符除外,其次,除了”{“之外,一下的所有行写完之后
都必须加”;“这就是全局选项段,在这里的定义,在全服务器都会生效,而不是对某个区域生效,
全局选项段的格式如下:
options {
version "haha";
};
如果仅仅是对某个区域生效的话,我们将使用zone关键字,来声明一个区域,使用“zone”
关键字,通常后面跟上你使用的名字,形如zone “a.org“,后面跟上关键字”IN“
然后再用一些花括号括起来,在里面添加选项,这些选项只对区域有效,”IN“可以省略不带,
格式形如:
zone ”a.org“ IN{
};
除了这两种之外,你也可以像redhat的其他服务器包一样将DNS的各配置文件分段,如果分了段
还可以包含其他指令,我们使用Include指令,
Include将其他配置文件包含起来,表示作为此配置文件的一部分存在,可以和这个文件组合
成我们的主配置文件,
一个基本的主配置文件该如何建立:
先查看一下/etc/named.conf是否存在,此时应该是没有的,需要自己手动创建,
vim /etc/named.conf
按照格式来:
全局选项段:
options {
directory "/var/named"; //就这一个选项最重要,用于定义工作目录是什么,告诉你的服务器你的数据文件在哪里。
}; //在这里可以使用的全局选项非常之多,可以使用man named 来查看
区域选项段:其实,就算不向任何人提供服务,就是作为一个缓存名称服务器,那也要定义至少三个区域
第一个区域:根
zone "." IN {
type hint; //这是固定的叫提示域,所谓提示就一步步引导你解析到你想要的主机名
file "name.ca"; //这个文件是存放全球那13个根节点域名服务器的,默认是不存在的,需要自己手动创建
}; //这里使用相对路径,相对的就是你在全局里选项定义的路径
第二个区域:正向解析
zone "localhost" IN {
type master; //这也是固定的,我相对我自己是主域名服务器
file "localhost.zone"; //通常是你区域的名称加上.zone的后缀
};
第三个区域:反向解析
zone "0.0.127.in-addr.arpa" IN {
type master; //这也是固定的,我相对我自己是主域名服务器
file "named.local"; //这是redhat上通常的用法
};
此时,只要别人把域名服务器指向你,并且你可以上网,那么你就可以解析互联网上的名称,
它会帮你去找,只要找不到,就去找根,
主配置文件建好之后,还要建立相关的文件
还要注意的是包括你的主配置文件及其你的数据文件必须将属组改为named
chown :named /etc/named.conf
三个主配置文件都在/var/named/下,所以
cd /var/named/
发现那三个主配置文件都不在,
dig -t NS .查询全球的根节点,某些时候会查不全,那么久针对其中的一个查询,
dig -t NS . @a.root-servers.net 此时肯定能得到最终答案
dig -t NS . @a.root-servers.net > /var/named/named.ca 然后我们将它重定向叫named.ca
此时一个配置文件已完成。
建立第二个文件”localhost.zone“
vim localhost.zone
对于区域 文件 只能包含两类型的数据:1、宏定义,或者叫变量定义2、各条记录,或叫解析记录
$TTL 86400 //这就定义了一个宏,是缓存的有效期限,值变化很快的时候就定义小一点,不变化的就定义长一点
解析记录:
name [ttl] IN RECORD_TYPE value
↑可以省略
形如:
www.a.org 86400 IN A 1.1.1.1
这是A记录,
反过来是PTR,指针记录,把IP地址解析成主机名
形如:1.1.1.1 86400 IN PTR www.a.org 其实这种格式是不对的,后面我们会写正确的格式,
ttl的值需要根据实际情况来设定,一般不要少于十分钟
第一条记录只能是SOA记录,对于一个数据文件来讲,SOA通常只能有一个。
这个name永远个你zone里面定义的一样,最后以”.“结束,表示到根结束
↓
↓ ↓最后跟你的管理员的邮件地址,最后的点”.“绝对不能省
#localhost. 600 IN SOA localhost. admin@localhost. //
↑对于SOA来讲,它的值比较独特,必须说明这台主机所对应的名称叫什么,一般你可以写成你的区域名字,或者是主DNS的名字对于localhost来说就叫localhost
localhost.这个点不可少,
↓这里的”@“也有特殊含义 ,是个缩略词,相当于前面的”localhost“,所以这里可以用@替换,所以后面的邮件地址应写成如下形式
@ 600 IN SOA localhost. admin.localhost. (
2011081601 数据的版本号,不能超过10位,一般可以按你的日期来写,主要是为了数据同步时用的。
1H 可以使用的有M,D,W, 刷新时间,默认是秒
10M 重试时间
7D 从服务器的过期时间,就是自杀时间
1D)
否定答案的TTL值,我已经告诉过你没有就是没有,所以在这个时间内不要再烦我了
第二条,NS 记录,说明一下,这个域的DNS服务器都有谁,格式一样,先写name,通常这个name就是你的区域的名字,所以可以写成localhost.,
此时你连”@“也可以不用写,它可以直接从上面继承,但是如果这两条记录之间有别的记录,那你就必须写了。”NS“后面跟的不能是IP地址,必须是你的DNS服务器的主机名
通常是”ns.什么“,此处就叫localhost.
IN NS localhost.
localhost. IN A 127.0.0.1
做了这么多主要是为了解析localhost叫127.0.0.1
反向
@ 600 IN SOA localhost. admin.localhost. (
2011081601 数据的版本号
1H 可以使用的有M,D,W, 刷新时间,默认是秒
10M 重试时间
7D 从服务器的过期时间,就是自杀时间
1D)
否定答案的TTL值,我已经告诉过你没有就是没有,所以在这个时间内不要再烦我了
第二条,NS 记录
IN NS localhost.
1 IN PIR localhost.
↑我们的区域的名字叫”0.0.127“所以我们这里只需要补全就可以了,这是固定格式
这三个文件的属组都应该改为named
service named configtest
named-checkconfig检查语法信息
named-checkzone检查区域语法错误,不检查逻辑错误
named-checkzone ”localhost“ /var/named/localhost.zone
named-checkzone ”0.0.127.in-addr.arpa“ /var/named/localhost.zone
此时启动服务
service named start
查看53号端口
然后编辑一下自己的客户端:/etc/resolv.conf
将nameserver指向127.0.0.1就OK了
然后你可以验证一下
dig -t A www.baidu.com
看一下,形如一下就对了:
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> -t A www.baidu.com
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34470
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 0
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 1200 IN CNAME www.a.shifen.com.
www.a.shifen.com. 600 IN A 61.135.169.125
www.a.shifen.com. 600 IN A 61.135.169.105
;; AUTHORITY SECTION:
a.shifen.com. 86422 IN NS ns6.a.shifen.com.
a.shifen.com. 86422 IN NS ns2.a.shifen.com.
a.shifen.com. 86422 IN NS ns4.a.shifen.com.
a.shifen.com. 86422 IN NS ns5.a.shifen.com.
;; Query time: 3250 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Aug 16 19:50:38 2011
;; MSG SIZE rcvd: 162