四、正确配置DNS相关文件

1)几个重要的DNS服务器配置文件类型

在使用DNS服务器之前,需要对与之相关的配置文件进行安全配置,因而首先需要了解这些基本文件,表1详细给出了几种主要的与DNS有关的文件以及详细描述:

表1  DNS相关配置文件介绍

2)named.conf主配置文件

在使用named.conf进行配置时,需要了解如下常用的配置语句,如表2所示。

表2  named.conf主配文件配置语句说明

根据在实际应用中的广泛程度和重要性,下面我们着重对option语句和zone声明的使用进行介绍。

1.使用option语句

option语句的使用语法为:

option语句的使用语法为:

option {

配置子句1;  

配置子句2;

};

在上述语法中,其配置子句常用的主要有如下两类:? 

◆directory:该子句后接目录路径,主要用于定义服务器区配置文件的工作目录,如/home等;? 

◆forwarders:该子句后接IP地址,定义转发器;

2.使用zone声明

区声明是主配置文件中非常常用而且是最重要的部分,它一般要说明域名、服务器类型以及域信息源三个重要部分。它的语法为:

zone “zone_name” IN {

type 子句;  

file  子句;

其他子句;

};

那么,围绕上述三个重要部分,区声明语句有如下两类子句:? 

◆type:其主要有如下三种,master说明一个区为主域名服务器)、slave说明一个区为辅助域名服务器)和hint说明一个区为启动时初始化高速缓存的域名服务器)。? 

◆file:后接文件路径,主要说明一个区的域信息源的路径。

3.使用ACL访问控制列表)

访问控制列表ACL,Access Control List)就是一个被命名的地址匹配列表。使用访问控制列表可以使配置简单而清晰,一次定义之后可以在多处使用,不会使配置文件因为大量的IP地址而变得混乱。

要定义访问控制列表,可以在BIND的主配置文件/etc/named.conf中使用acl语句来实现。acl语句的语法为:

acl  acl_name { 

address_match_list;

};

BIND里默认预定义了4个名称的地址匹配列表,他们可以直接使用,分别为:?   

◆Any:表示所有主机;? 

◆Localhost:表示本机;? 

◆Localnets:表示本地网络上的所有主机;? 

◆None:表示不匹配任何主机。

需要注意的是:acl是named.conf中的顶级语句,不能将其嵌入其他的语句。要使用用户自己定义的访问控制列表,必须在使用之前定义。因为可以在options语句里使用访问控制列表,所以定义访问控制列表的acl语句应该位于options语句之前。

另外,为了便于维护管理员定义的访问控制列表,可以将所有定义acl的语句存放在单独的文件/etc/named.conf.acls中,然后在主配置文件/etc /named.conf中如下语句:

include "/etc/named.conf.options";

之前添加如下的配置行

include "/etc/named.conf.acls"; 

定义了ACL之后,可以在如下的子句中使用:? 

◆allow-query  options,zone:指定哪主机或网络可以查询本服务器或区,默认的是允许所有主机进行查询。 

◆allow-transfer  options,zone:指定哪些主机允许和本地服务器进行域传输,默认值是允许和所有主机进行域传输。  ? 

◆allow-recursion  options:指定哪些主机可以进行递归查询。如果没有设定,缺省是允许所有主机进行递归查询的。注意禁止一台主机的递归查询,并不能阻止这台主机查询已经存在于服务器缓存中的数据。 ? 

◆allow-update  zone:指定哪些主机允许为主域名服务器提交动态DNS更新。默认为拒绝任何主机进行更新。 ? 

◆blackhole  options:指定不接收来自哪些主机的查询请求和地址解析。默认值是none。

上面列出的一些配置子句既可以出现在全局配置options语句里,又可以出现在zone声明语句里,当在两处同时出现时,zone声明语句中的配置将会覆盖全局配置options语句中的配置。

3)区文件

区文件定义了一个区的域名信息,通常也称域名数据库文件。每个区文件都是由若干个资源记录RR,resource records)和区文件指令所组成。

1.资源记录

每个区域文件都是由SOA RR开始,同时包括NS RR。对于正向解析文件还包括A RR、MX RR、CNAME RR等等;而对于反向解析文件还包括PTR RR。

RR具有基本的格式。标准资源记录的基本格式是:

[name]      [ttl]     IN     type     redata

各个自字节之间由空格或制表符分隔。表3描述了这些字段的含义:

 

 

表3  标准资源纪录中的字段

2.区文件指令

表4列出了可以在区文件中使用的4个区文件指令。

表4   区文件指令

为了方便读者对DNS服务器配置文件的使用有个详细的了解,本节将针对一个实际的配置文件例子来进行讲解。该配置文件如下所示。我们虚构了一个域cmpbook.com来举例说明主服务器的配置,下面是定义cmpbook.com域的主服务器的named.conf文件:

// generated by named-bootconf.pl

options {

directory "/var/named";

/*

* If there is a firewall between you and nameservers you want

* to talk to, you might need to uncomment the query-source

* directive below. Previous versions of BIND always asked

* questions using port 53, but BIND 8.1 uses an unprivileged

* port by default.

*/

// query-source address * port 53;

};

// a caching only nameserver config

//

zone "." {

type hint;

file "named.ca";

};

zone "cmpbook.com"{

type master;

file "cmpbook.com";

};

zone "0.0.127.in-addr.arpa" {

type master;

file "named.local";

};

zone "132.211.in-addr.arpa"{

type master;

file "named.rev";

};

上例中第一个master告诉我们这是cmpbook.com域的主服务器。该域的数据是从named.hosts文件中加载的。在我们这个例子中,我们将文件名named.hosts作为区文件名。第三个master语句指向能将IP地址211.132.0.0映射为主机名的文件。它假定本地服务器是反向域132.211.in-addr.arpa的主服务器,该域的数据从文件named.rev中加载。

除了定义上述的主文件外,还需要定义如下的区文件/var/named/cmpbook.com):

$TTL 86400

$ORIGIN cmpbook.com.

@   

1D IN SOA @ root (     42  ; serial (d. adams)     

3H  ; refresh     15M  ; retry     1W  ; expiry

1D )  ; minimum

@ IN NS @   @ IN A  127.0.0.1   

www IN A 211.132.211.80

ftp IN A 211.132.211.68

web IN CNAME www

5)使用Dlint工具进行DNS配置文件检查

Dlint是一个专门检查DNS配置文件开放源代码的软件,用户可以从网站http://www.domtools.com上自行下载安装,目前该网站上的最新版本为Dlint1.4.1。需要注意:使用该软件前要求系统安装支持Perl语言和Dig命令BIND中一个软件包)的相关软件包。

Dlint软件的安装步骤如下所示,系统会将Dlint安装在/usr/bin/目录下:

1)解压缩软件包

#tar dlint1.4.1.tar.gz

2)切换到解压缩的目录下,执行安装命令

#cd dlint1.4.1

#make

Dlint主要针对DNS配置文件进行如下检查:? 

◆检查配置文件是否存在拼写错误;? 

◆检查配置文件中是否有AAddress)记录的主机名称都有配套的PTR反向解析记录的简称)记录。如果有A记录的主机名称没有PTR,则配置文件不能通过。另外,Dlint可以在用户配置文件中为A记录查找丢失的PTR记录;? 

◆记录in-addr.arpa区的每一条PTR记录是否有对应的A记录存在,并以递归的方式检查子区,查找它们的配置问题;

如下显示了使用Dlint工具进行DNS配置文件检查的运行结果:

#dlint localhost.localhost

;; dlint version 1.4.1, Copyright (C) 1998 Paul A. Balyoz <pab@domtools.com>

;;     Dlint comes with ABSOLUTELY NO WARRANTY.;

;;    This is free software, and you are welcome to redistribute it

;;     under certain conditions.  Type 'man dlint' for details.

;; command line: /usr/local/bin/dlint localhost.localhost

;; flags: normal-domain recursive.

;; using dig version 9.2.1

;; run starting: 涓? 4鏈?15 07:08:18 CST 2009

;; ============================================================

;; Now linting localhost.localhost

ERROR: no name servers found for domain localhost.localhost       

That domain is probably not a zone.  Remove the leftmost portion of the name and try again.

;; ============================================================

;; dlint of localhost.localhost run ending with errors.

;; run ending: 涓? 4鏈?15 07:08:18 CST 2009

6)使用命令检验DNS功能

1.nslookup命令

nslookup命令是用来验证DNS功能以及故障的一种非常简便有效的工具,通过该命令可以对用户搭建的DNS服务器或者是公用的服务器的功能进行有效验证。该命令不但可以在Linux下使用,而且也可以在Windows系列操作系统中使用。如果该命令能够成功返回信息,也就是能够通过域名从DNS服务器得到需要解析的IP地址信息,或者通过提供IP地址信息得到域名信息。那么,就表明该DNS是正常运行的。

如下例子给出使用nslookup命令向DNS查询www.sohu.com域名IP地址的应用场景,验证表明DNS功能正常:

//正向查询

#nslookup www.google.com

Note:  nslookup is deprecated and may be removed from future releases.

Consider using the `dig' or `host' programs instead.  Run nslookup with

the `-sil[ent]' option to prevent this message from appearing.

Server:         10.2.13.18

Address:        10.2.13.18#53   Non-authoritative answer: www.google.com  canonical name = www.l.google.com www.l.google.com        canonical name = www-china.l.google.com.

Name:   www-china.l.google.com

Address: 72.14.235.99

Name:   www-china.l.google.com

Address: 72.14.235.104

Name:   www-china.l.google.com

Address: 72.14.235.147

//反向查询

#nslookup 72.14.235.99

Note:  nslookup is deprecated and may be removed from future releases.

Consider using the `dig' or `host' programs instead.  Run nslookup with

the `-sil[ent]' option to prevent this message from appearing.

Server:         10.2.13.18

Address:        10.2.13.18#53   Non-authoritative answer:

99.235.14.72.in-addr.arpa       name = tw-in-f99.google.com.   Authoritative answers can be found from:

235.14.72.in-addr.arpa  nameserver = ns3.google.com.

235.14.72.in-addr.arpa  nameserver = ns1.google.com.

235.14.72.in-addr.arpa  nameserver = ns4.google.com.

235.14.72.in-addr.arpa  nameserver =

ns2.google.com.

ns1.google.com  internet address = 216.239.32.10

ns2.google.com  internet address = 216.239.34.10

ns3.google.com  internet address = 216.239.36.10

ns4.google.com  internet address = 216.239.38.10

2.dig命令

dig域信息搜索器)命令是一个用于询问DNS域名服务器的灵活的工具。它执行DNS搜索,显示从受请求的域名服务器返回的答复。多数DNS管理员利用dig作为DNS问题的故障诊断,因为它灵活性好、易用、输出清晰。虽然通常情况下dig使用命令行参数,但它也可以按批处理模式从文件读取搜索请求。不同于早期版本,dig的BIND9实现允许从命令行发出多个查询。除非被告知请求特定域名服务器,dig将尝试/etc/resolv.conf中列举的所有服务器。当未指定任何命令行参数或选项时,dig将对“.”根)执行NS查询。

值得一提的是:dig命令比nslookup命令获取的信息更加详细和全面,因此在Linux下建议用户采用该命令替代nslookup命令进行查询和验证DNS的功能nslookup命令运行中也提供了“Note: nslookup is deprecated and may be removed from future releases.Consider using the `dig' or `host' programs instead.”字样进行提示)。

另外,鉴于dig命令的强大功能,它提供了几十个参数选项供用户使用,具体情况可以使用man命令进行查阅,这不是本专题的重点内容,下面仅仅给出2个例子来进行简单演示和说明:

1)运行dig命令获得根DNS信息

#dig
; <<>> DiG 9.2.1 <<>>

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41868

;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 14

;; QUESTION SECTION:

;.                              IN      NS
;; ANSWER SECTION:

.                       290515  IN      NS      K.ROOT-SERVERS.NET.

.                       290515  IN      NS      J.ROOT-SERVERS.NET.

.                       290515  IN      NS      D.ROOT-SERVERS.NET.

.                       290515  IN      NS      M.ROOT-SERVERS.NET.

.                       290515  IN      NS      C.ROOT-SERVERS.NET.

.                       290515  IN      NS      G.ROOT-SERVERS.NET.

.                       290515  IN      NS      A.ROOT-SERVERS.NET.

.                       290515  IN      NS      E.ROOT-SERVERS.NET.

.                       290515  IN      NS      H.ROOT-SERVERS.NET.

.                       290515  IN      NS      F.ROOT-SERVERS.NET.

.                       290515  IN      NS      L.ROOT-SERVERS.NET.

.                       290515  IN      NS      B.ROOT-SERVERS.NET.

.                       290515  IN      NS      I.ROOT-SERVERS.NET. 

;; ADDITIONAL SECTION:

D.ROOT-SERVERS.NET.     109756  IN      A       128.8.10.90

E.ROOT-SERVERS.NET.     109756  IN      A       192.203.230.10

F.ROOT-SERVERS.NET.     282557  IN      A       192.5.5.241

F.ROOT-SERVERS.NET.     282557  IN      AAAA    2001:500:2f::f

G.ROOT-SERVERS.NET.     109756  IN      A       192.112.36.4

H.ROOT-SERVERS.NET.     539017  IN      A       128.63.2.53

H.ROOT-SERVERS.NET.     541758  IN      AAAA    2001:500:1::803f:235

I.ROOT-SERVERS.NET.     109756  IN      A       192.36.148.17

J.ROOT-SERVERS.NET.     452944  IN      A       192.58.128.30

J.ROOT-SERVERS.NET.     455358  IN      AAAA    2001:503:c27::2:30

K.ROOT-SERVERS.NET.     103767  IN      A       193.0.14.129

L.ROOT-SERVERS.NET.     103467  IN      A       199.7.83.42

L.ROOT-SERVERS.NET.     103467  IN      AAAA    2001:500:3::42

M.ROOT-SERVERS.NET.     109072  IN      A       202.12.27.33

;; Query time: 50 msec

;; SERVER: 10.2.13.18#53(10.2.13.18)

;; WHEN: Wed Apr 15 06:39:20 2009

;; MSG SIZE  rcvd: 500

2)正向解析域名www.google.com

#dig www.google.com

; <<>> DiG 9.2.1 <<>> www.google.com

;; global options:  printcmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53325

;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 7, ADDITIONAL: 7
;; QUESTION SECTION:

;www.google.com.                        IN      A ;; ANSWER SECTION:

www.google.com.         600893  IN      CNAME   www.l.google.com.

www.l.google.com.       292     IN      CNAME   www-china.l.google.com.

www-china.l.google.com. 81      IN      A       72.14.235.99

www-china.l.google.com. 81      IN      A       72.14.235.104

www-china.l.google.com. 81      IN      A       72.14.235.147 ;; AUTHORITY SECTION:

l.google.com.           78559   IN      NS      a.l.google.com.

l.google.com.           78559   IN      NS      b.l.google.com.

l.google.com.           78559   IN      NS      d.l.google.com.

l.google.com.           78559   IN      NS      f.l.google.com.

l.google.com.           78559   IN      NS      c.l.google.com.

l.google.com.           78559   IN      NS      e.l.google.com.

l.google.com.           78559   IN      NS      g.l.google.com. ;; ADDITIONAL SECTION:

g.l.google.com.         66906   IN      A       74.125.95.9

a.l.google.com.         559     IN      A       209.85.139.9

b.l.google.com.         79061   IN      A       74.125.45.9

c.l.google.com.         64857   IN      A       64.233.161.9

d.l.google.com.         72926   IN      A       74.125.77.9

e.l.google.com.         65021   IN      A       209.85.137.9

f.l.google.com.         64805   IN      A       72.14.235.9

;; Query time: 21 msec

;; SERVER: 10.2.13.18#53(10.2.13.18)

;; WHEN: Wed Apr 15 06:28:57 2009

;; MSG SIZE  rcvd: 348


相关内容