【转载】Linux实践工程师学习笔记十五:DNS服务器

安装BIND
1.去http://www.isc.org下载最新版本,如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 www.chinaunix.com
第一次解析主机后将信息存入缓存,以后再解析时就很快,只要有了根区就可以查到整个互联网。
 
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 www.chinaitlab.com    查询www.chinaitlab.com主机的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 www.chinaitlab.com
小括号里的管理信息主要应用在主域服务器和辅助服务器之间。
可以在第一行加上一个全局变量$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        www.chinaitlab.com.
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 www.domain.chinaitlab.com
 
现在如果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 www.chinaitlab.com           成功解析
主从服务器的同步和更新主要是通过区文件中的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工具产生,其它区文件手工编辑。

posted on 2007-07-30 18:13 黑虫 阅读(333) 评论(0)  编辑 收藏 引用 所属分类: Unix/Linux

只有注册用户登录后才能发表评论。
<2007年7月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿(4)

随笔分类(31)

随笔档案(31)

awmsky

搜索

最新评论

阅读排行榜

评论排行榜