昔我往矣

【翻译】DNS配置第二部分--主域名服务器

2012年03月26日

原文链接:http://www.redhat.com/magazine/026dec06/features/dns/?sc_cid=bcm_edmsept_007
如果你没有看过第一部分,那请你先学习本文的第一部分,然后一起来学习更多DNS的优点!在上一部分中,已经搭建并运行了一台DNS服务器,这一次,看看我们如何使用一些DNS技巧来管理域里面的所有主机名。

欢迎回来
在DNS系列的第一部分中,我们搭建了一台缓存名字服务器,通过缓存经常收到请求的DNS查询,起到了提高客户机网络响应速度的效果。在这一篇文章中,我们会把缓存名字服务器扩展为主名字服务器,为内部网络的客户机提供可靠的主机信息。

概述
和上一台缓存名字服务器一样,我们使用RHEL和Fedora提供的BIND RPM包来配置主域名服务器。给缓存名字服务器增加权威相应功能只需要真假两个文件和修改已经存在的name.conf文件。为了达到目的,我们先做出如下的假定:

   1)BIND 9.x RPM包在第一部分讨论中,已经在这台作为域名服务器的机器上安装过了。
  2)内部网络是192.168.15.0/24。假如你的不是这样,请做出相应的替换。
  3)搭建的这台主域名服务器只接受192.168.15.0/24网络内的客户机的请求。
  4)主域名服务器如果收到不能解析的DNS请求,将还是会向上一层的ISP域名服务器转发。
  5)我们将使用hughes.lan作为内部域名。

你可能已经发现了,我们选择了一个虚构的名为lan的顶级域(top-level domain,TLD)。由于只是内部家庭网络使用,所以内部域名可以随心所欲的设置。但是,公共网络的域名服务器要按照某种规则设定,因为只有遵循规则,一台名字服务器才能响应世界其他地方发来的主机信息的请求。

区域
名字服务器把域的信息存放在在一个名叫区域数据文件的名字空间文件中。一个区域数据文件包含了这个域中所有的资源记录,这份资源记录描述了域中的所有主机。我们首先要修改已经存在的named.conf文件,涉及到了域中的两个域文件。

  正向域:定义了主机名到ip地址的映射。
  反向域:定义ip地址到主机名的映射。

打开/var/named/chroot/etc/named.conf文件,向里面加入如下正向域和反向域的指令:

# Forward Zone for hughes.lan domain
zone "hughes.lan" IN {
        type master;
        file "hughes.lan.zone";
};

# Reverse Zone for hughes.lan domain
zone "15.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.15.zone";            
};

正向域和反向域都type字段都是master,表示这台名字服务器是hughes.lan域中的主名字服务器。file字段表明了相应域的资源记录包含在那个域文件中。注意,反向域使用特殊的域名:in-addr-arpa。DNS使用这个特殊的域来实现ip到主机名的映射。反向查询是一个相反的过程,所以名字是从叶子到根的方向(把域名想象成一个树的结构),域名中最上面的元素就处在了最右边了。对于家庭网络来说,反向查找域是一个可有可无的选项,为了保持完整,我们会保留这个选项。在BIND RPM包中有一个root域名字服务器,当所有配置的域都不能解析时使用。这个根域的名字是“.”;type字段表示为hint,对用的文件名为named.ca,里面有世界上13台根域名服务器的列表。一般不会直接使用根域名服务器,所以一般把不能解析的请求向ISP域名服务器转发。

现在修改named.conf全局选项,以允许内部的客户机向名字服务器发出查询。把已经存在的全局选项段修改如下:

acl hughes-lan { 192.168.15.0/24; 127.0/8; };
options {
        directory "/var/named";
        allow-query { hughes-lan; };
        forwarders { xxx.xxx.xxx.xxx; xxx.xxx.xxx.xxx; }; # ISP primary/secondary
    forward-only; # Rely completely on ISP for cache misses
};

上面的acl语句设置了ip地址的范围,可以参考named.conf文件。allow-query指定了可以向名字服务器发出请求的主机的ip地址范围。forwarders语句指明了如果不能解析的dns请求,则向上一级名字服务器转发。forward-only语句限制了我们的域名服务器只能向我们的ISP名字服务器转发,而不能向其它的名字服务器查询我们的ISP名字服务器不能查到的信息。ISP的主域名服务器和从属域名服务器同时down机的情况十分少见,但是,如果你的上层ISP名字服务器不能解析的某个主机名时,你希望你的名字服务器可以试着向根服务器发起解析请求一个,你可以使用forward-only语句。

区域文件
现在我们已经准备好,可以开始在区域文件中定义named.conf文件中配置相关的主机名映射。区域文件存放在/var/named/chroot/var/named目录中,named的设定权限为664。

#cd /var/named/chroot/var/named
#touch hughes.lan.zone
#chown named:named hughes.lan.zone
#chmod 644 hughes.lan.zone

看看下面的hughes.lan转发域的区域文件的模板,然后详细了解各个部分:

$TTL 1D

hughes.lan.             IN      SOA     velma.hughes.lan. foo.bar.tld. (
                                200612060                 ; serial
                                2H                        ; refresh slaves
                                5M                        ; retry
                                1W                        ; expire
                                1M                        ; Negative TTL
                                )

@                       IN      NS      velma.hughes.lan.

velma.hughes.lan.       IN      A       192.168.15.10     ; RHEL server
fred.hughes.lan.        IN      A       192.168.15.1      ; router
scooby.hughes.lan.      IN      A       192.168.15.2      ; upstairs WAP
shaggy.hughes.lan.      IN      A       192.168.15.3      ; downstairs WAP
scooby-dum.hughes.lan.  IN      A       192.168.15.4      ; Fedora desktop
daphne.hughes.lan.      IN      A       192.168.15.5      ; network printer
mysterymachine          IN      A       192.168.15.6      ; mail server
scrappy            IN    A    192.168.15.7      ; Windows box
                              ; aliases
www            IN    CNAME    velma.hughes.lan. ; WWW server    
virtual            IN    CNAME    velma             ; virtual WWW tests
mail                    IN      CNAME   mysterymachine    ; sendmail host

                              ; DHCP Clients
dhcp01.hughes.lan.      IN      A       192.168.15.100
dhcp02.hughes.lan.      IN      A       192.168.15.101
dhcp03.hughes.lan.      IN      A       192.168.15.102
dhcp04.hughes.lan.      IN      A       192.168.15.103
dhcp05.hughes.lan.      IN      A       192.168.15.104

@                       IN      MX  10  mail.hughes.lan.

在hughes.lan.zone的第一行,TTL(Time To Live,生存时间)值设置为一天。TTL是用来设定把名字服务器的响应缓存多久的。假如你是公共的名字服务器,还有其他的名字服务器依赖于你的域信息,那么TTL的值可以有更多的含义。注意,TTL值中的“D”表示的是Day。Bind还使用“W”来表示week,使用“H”表示Hours,“M”表示Minutes。
第一条资源记录是SOA(Start Of Authority,起始授权机构)记录,表示这个名字服务器是hughes.lan域内最权威的资源。IN代表Internet Class,也是可选项。SOA后面的第一个主机名是我们的主名字服务器。第二个名字“foo.bar.tld.”,是本域内交换个人邮件使用的地址。注意,“@”被“.”代替了,最后结尾的也是一个“.”。第三段的值是一串数字,指名当前的修订版本,典型的是YYYYMMDD的格式,最后面的一个数字表示那天的修订版本号。后面的第四,第五,第六,第七个值在本文中忽略,不做讨论。

NS记录列出了当前域中的各个权威名字服务器。注意,这一行中的第一个“@”。“@”字符是这个域的速记符,hughes.lan对应named.conf中关于本域的配置。

下一个块的A记录包含了主机到ip地址的映射。CNAME记录充当前面定义的A记录的别名。注意,完整合格的域名后面是要带上"."的。如果这个“.”被忽略,那么hughes.lan域会添加为主机名。在这个例子中,有一个主机名scrappy,将会变成scrappy.hughes.lan。

如果想要搭建一个内网邮件服务器,那就增加一个MX记录吧,指定邮件服务器。例子中的MX值“10”是代表的是优先级(从0到65535),代表了这台邮件服务器的有限级别。客户机会先尝试具有高优先级的邮件服务器。

反向域文件,192.168.15.zone,和正向域很像,但是包含一条PTR记录,而不是A记录。

$TTL 1D

@       IN      SOA     velma.hughes.lan. foo.bar.tld. (
200612060       ; serial
2H              ; refresh slaves
5M              ; retry
1W              ; expire
1M              ; Negative TTL
)

        IN      NS      velma.hughes.lan.
10      IN      PTR     velma.hughes.lan.
1       IN      PTR     fred.hughes.lan.
2       IN      PTR     scooby.hughes.lan.
3       IN      PTR     shaggy.hughes.lan.
4       IN      PTR     scooby-dum.hughes.lan.
5       IN      PTR     daphne.hughes.lan.
6       IN      PTR     mysterymachine.hughes.lan.
7       IN      PTR     scrappy.hughes.lan.

100     IN      PTR     dhcp01.hughes.lan.
101     IN      PTR     dhcp02.hughes.lan.
102     IN      PTR     dhcp03.hughes.lan.
103     IN      PTR     dhcp04.hughes.lan.
104     IN      PTR     dhcp05.hughes.lan.

测试
保存域文件,确保正确的权限设置,使用named-checkzone检查语法:

# named-checkzone hughes.lan hughes.lan.zone
# named-checkzone 15.168.192.in-addr.arpa 192.168.15.zone

纠正named-checkzone报告的错误。重启域名服务:

# service named restart

浏览/var/log/messages文件,确保域已经成功加载。
使用如下的DNS请求(替换为你自己的域)

# dig scooby.hughes.lan
# dig -x 192.168.15.2

输出应该和下面的结果类似:

.
.

;; QUESTION SECTION:
;scooby.hughes.lan.             IN      A

;; ANSWER SECTION:
scooby.hughes.lan.      86400   IN      A       192.168.15.2

;; AUTHORITY SECTION:
hughes.lan.             86400   IN      NS      velma.hughes.lan.

;; ADDITIONAL SECTION:
velma.hughes.lan.       86400   IN      A       192.168.15.10
.
.
.

继续测试每个添加到域文件的主机,好好享受自己、新搭建的主域名服务器吧!

结论
这一系列关于DNS的文章器目的是搭建高等级的DNS服务器,提高管理家庭网络的效率。我们见识到了缓存名字服务器对网络性能的提高,主域名服务器方便人们使用友好的主机名代替ip地址管理静态和动态获取ip的主机。对于有兴趣学习更多在本文中讨论到的关于DNS或者扩展域名服务的读者,请关注以下资源:
BIND user documenation located in /usr/share/doc/bind-9.x.x
DNS and BIND (5th Edition)http://www.amazon.com/gp/product/0596100574?ie=UTF8&tag=wwwredhatcom-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0596100574

当前暂无评论 »

添加新评论 »