LINUX下配置DNS全文
表5 常见标准资源记录
资源记录名
记录类型
功能说明
地址
A
将主机名转换为地址。这个字段保存以点分隔的十进制形式的IP地址。任何给定的主机都只能有一个A记录,因为这个记录被认为是授权信息。这个主机的任何附加地址名或地址映射必须用CNAME类型给出
规范名
CNAME
给定一个主机的别名,主机的规范名字是在这个主机的A记录中指定的
主机信息
HINFO
描述主机的硬件和操作系统
邮件交换
MX
建立邮件交换器记录。MX记录告诉邮件传送进程把邮件送到另一个系统,这个系统知道如何将它递送到它的最终目的地
名服务器
NS
标识一个域的域名服务器。NS资源记录的数据字段包括这个域名服务器的DNS名。我们还需要指定这个名字名字服务器的地址与主机名相匹配的A记录
指针
PTR
将地址变换成主机名。主机名必须是规范主机名
管理开始
SOA
告诉域名服务器它后面跟着的所有所有资源记录是控制这个域的(SOA)表示授与控制权)。其数据字段用()括起来并且通常是多行字段。SOA记录的数据字段包含下面的项:
origin
这个域的主域名服务器的规范主机名。用点“.” 结尾的绝对主机名,因此,它不能被named守护进程修改
contact
负责维护这个域的人的电子邮件联系地址。因为@在资源记录中有特殊的意义,所以用点“.”代替这个符号。如果负责维护vbrew.com的人是clfls,那么联系地址就是clfls.vbrew.com
serial
这个区信息文件的版本号,它是一个整数。辅助域名服务器用它来确定这个区信息的文件是何时改变的。每次改变信息文件时都应该使这个数加一
refresh
辅助域名服务器在试图检查主域名服务器的SOA记录之前应等待的秒数。SOA记录不经常改变,因此可以把这个值设置为一天
retry
辅助服务器在主服务器不能使用时,重试对主服务器的请求应等待的秒数。通常,它应该按分进行设置
expire
这是辅助服务器在不能与主服务器取得联系的情况下丢掉区信息之前应等待的秒数,一般应该设置成30天左右
minimum
当没有指定ttl资源记录时默认的ttl值。如果网络没有太大的变化,那么这个数可以设得很大。可以在资源记录中指定一个ttl值来代替它
为了能看懂本章中使用的配置示例文件,有必要稍微介绍以下资源记录的结构。DNS资源记录的格式是:
[domain] [ttl] [class] type rdate
各个字段之间有空格或指标符分隔。表6讨论了这些字段的含义。
表6 资源记录格式中的字段
字段
说明
domain
资源记录引用的域对象名。它可以是单台主机,也可以是整个域。作为domain输入的字串除非不是以一个点结束,否则就与当前域有关系。如果该domain字段是空的,那么该记录适用于最后一个带名字的域对象
ttl
生存时间记录字段。它以秒为单位定义该资源记录中的信息存放在高速缓存中的时间长度。通常该字段是空字段,这表示使用SOA记录中为整个区域设置的缺省ttl
class
指定网络的地址类。对于TCP/IP网络使用IN。如果没有给出类,就使用前一个资源记录的类
type
标识这是哪一类资源记录
rdata
指定与这个资源记录有关的数据。这个值是必要的。数据字段的格式取决于类型字段的内容
named.ca文件
named.boot 文件中的cache语句指向一个高速缓存初始化文件,具有高速缓存的服务器都有这样一个文件。它包含着域名服务器启动时开始创造一个域数据高速缓存所需的信息。在cache语句中,用一个指点其根域,在named.ca文件中至少包含根服务器的名字和地址。named的高速缓存操作是很重要的。幸运的是,建立高速缓存的named.ca文件通常是最简单的named配置文件。
基本的named.ca文件包含根服务器的NS记录和提供根服务器地址的A记录。下面就是基本的named.ca文件:
; named.ca file
; servers for the root domain
. 99999999 IN NS NS.NIC.DDN.MIL.
99999999 IN NS NS.NASA.GOV.
99999999 IN NS KAVA.NISC.SRI.COM.
99999999 IN NS TERP.UMD.EDU.
99999999 IN NS C.NYSER.NET.
99999999 IN NS NS.INTERNIC.NET.
;
; root servers by address
;
NS.NIC.DDN.MIL. 99999999 IN A 199.112.36.4
NS.NASA.GOV. 99999999 IN A 128.102.16.10
KAVA.NISC.SRI.COM. 99999999 IN A 192.33.33.24
TERP.UMD.EDU. 99999999 IN A 128.8.10.90
C.NYSER.NET. 99999999 IN A 192.33.4.12
NS.INTERNIC.NET. 99999999 IN A 198.41.0.4
该记录只包含各服务器记录和地址记录。首先是一组标识根(.)域的各服务器的NS记录,在NS记录之后,是一组为每个根服务器提供地址的A记录。虽然不需要ttl,但习惯上每个记录的ttl是99999999(可能的最大值)。因为根服务器是永远不会从高速缓存中删除的。
named.local文件
named.local 文件可以将回送地址127.0.0.1转换成本地主机名,它是反向域0.0.127.IN-ADDR.ARPA使用的区文件.由于所有系统都将 127.0.0.1作为回送地址,该文件实际上对于每一个系统都是相同的。下面是从vlager上获取的一个典型的named.local文件:
;
; /var/named/named.local Reverse mapping of 127.0.0
; Origin is 0.0.127.in-addr.arpa.
;
@ IN SOA vlager.vbrew.com. (
joe.vbrew.com.
1 ; serial
360000 ; refresh: 100 hrs
3600 ; retry: one hour
3600000 ; expire: 42 days
360000 ; minimum: 100 hrs
)
IN NS vlager.vbrew.com.
1 IN PTR localhost.
其中的SOA记录的数据字段和包含主机名的NS记录是随系统不同而不同的。本例中SOA记录将vlager.vbrew.com标识为开创该区的服务器,将电子邮件地址joe.vbrew.com标识为解决该区问题的联系地点(在SOA记录中,通常将电子邮件地址中用来分隔接收者名字和主机名的@修改成一个点,其它字段则保持不变)。很多系统甚至不包含NS记录,若要用它,就包含计算机的主机名。修改这三个字段我们就可以在任何主机中使用这个文件。
到目前为止我们讨论的文件named.boot、named.ca和named.local都是配置唯高速缓存服务器和辅助服务器时所需要的文件。大多数服务器将只需要这些文件,而且使用的这些文件在,每一个服务器上几乎都包含相同的信息。
其它的named配置文件比较复杂,但是使用这些文件的服务器数量比较少,只有主服务器需要所有的配置文件,而每个域只有一个主服务器。
反向域文件named.rev
named.rev与named.host文件非常类似,都包含有PTR记录,只是named.rev将地址映射为主机名。下面是named.rev的一个例子。
;
; /var/named/named.rev Reverse mapping of our IP addresses
; Origin is 72.191.in-addr.arpa.
;
@ IN SOA vlager.vbrew.com. (
joe.vbrew.com.
16 ; serial
86400 ; refresh: once per day
3600 ; retry: one hour
3600000 ; expire: 42 days
604800 ; minimum: 1 week
)
IN NS vlager.vbrew.com.
; brewery
1.1 IN PTR vlager.vbrew.com.
2.1 IN PTR vstout.vbrew.com.
3.1 IN PTR vale.vbrew.com.
; winery
1.2 IN PTR vlager-if1.vbrew.com.
2.2 IN PTR vbardolino.vbrew.com.
3.2 IN PTR vchianti.vbrew.com.
4.2 IN PTR vbeaujolais.vbrew.com.
在这个例子中,包含了在named.hosts文件中见到的相同的SOA记录。它只是为域建立控制信息。该SOA记录的名字字段中的@是指向当前域,本例是由named.boot示例文件中的primary定义的:
primary 72.191.in-addr.arpa named.rev
该SOA 记录中的@允许primary语句去定义区文件域,vlager中每个区文件都使用相同一个SOA记录;它总是引用正确的域名,因为所引用的都是 named.boot为特定区文件定义的域。几乎在每个区文件的开头,我们都可以看到相同的SOA格式。请修改主机名vlager.vbrew.com和管理员电子邮件地址joe.vbrew.com,并在我们任何一个区文件中使用该SOA记录。
在SOA记录后面的NS记录可以该域的服务器,一般在其它任何记录有机会去修改域名之前,将立即在SOA之后列出各域名服务器。请注意,一个空的名字字段意味着上一个域名仍然起作用,SOA的域应用仍然有效,因为后面的NS记录中的名字段是空的。
PTR 记录在named.rev文件中占有重要地位,因为它们可以将地址转换为主机名。在我们的例子中,PTR记录为网络191.72中的主机1.1、1.2、 1.3、2.1、2.2、2.3和2.4提供地址到名字的转换,由于它们不是以点结束,所以这些PTR记录中名字字段的值都与当前域有关。例如,值3.1 可以看作是3.1.72.191.in-addr.arpa。PTR记录的数据数据字段中的主机名是全部限定的,以防止它和当前域名相关。利用PTR中的信息,named就将3.1.72.191.in-addr.arpa转换成vale.vbrew.com。
named.hosts文件
在named.boot 文件中,把named.hosts文件作为包含本地域信息的文件列出。可以在named.boot中的primary行上为这个文件起用户想要的名字。 named.hosts文件包含大部分的域信息,它可以将主机名转换成IP地址,因而A记录占有重要的地位,而且它还包含MX、CNAME和其它的记录。该named.hosts文件和named.rev文件一样,只有主服务器才有,其它所有的服务器可从主服务器取得信息。下面给出了一个使用多资源记录类型的named.hosts文件的例子:
;
; /var/named/named.hosts Local hosts at the brewery
; Origin is vbrew.com
;
@ IN SOA vlager.vbrew.com. (
janet.vbrew.com.
16 ; serial
86400 ; refresh: once per day
3600 ; retry: one hour
3600000 ; expire: 42 days
604800 ; minimum: 1 week
)
IN NS vlager.vbrew.com.
;
; local mail is distributed on vlager
IN MX 10 vlager
;
; loopback address
localhost. IN A 127.0.0.1
; brewery Ethernet
vlager IN A 191.72.1.1
vlager-if1 IN CNAME vlager
; vlager is also news server
news IN CNAME vlager
vstout IN A 191.72.1.2
vale IN A 191.72.1.3
; winery Ethernet
vlager-if2 IN A 191.72.2.1
vbardolino IN A 191.72.2.2
vchianti IN A 191.72.2.3
vbeaujolais IN A 191.72.2.4
和named.rev文件一样,该文件以一个SOA记录和定义域及服务器的NS记录开头。但named.hosts文件包括的资源记录品种多于named.rev。我们根据这些记录在示例文件中的顺序来讨论每一种记录。
该文件的第一个记录是域的SOA(授予控制权)记录。该记录的第一行以@字符开始,@字符表示这是当前原点或域。原点由 named.boot文件中相应的primary行上列出的域定义给出。此后是代码IN和SOA,它告诉named这个资源记录使用Internet (TCP/IP)编址并且是授予控制权记录。
这行接下来的两项是这个域的主域名服务器的规范名字,和用点代替@的电子邮件联系人的地址。然后列出SOA记录要求的各种数据段,一行一个。
在SOA记录后,下一行是域名服务器资源记录。它列出vlager.vbrew.com作为这个域的域名服务器。因为在域字段中没有列出任何域,所以假设是最后一个指定的域,也就是在SOA记录中列出的@。而且@字符确实是本地域。这是比较容易理解的。
MX 记录为整个域定义一个邮件服务器,该记录假定vlager是vbrew.com域的邮件服务器,其优先值是10。送给user@vbrew.com的邮件被重定向到vlager,以便进行传送。当然,为了使vlager能够成功地传送邮件,就必须将它配置成邮件服务器。MX记录只是整个事件中的一部分,我们将在第十一章中研究如何使用sendmail配置邮件服务器。
该例中第一个A记录定义本地主机地址,这恰好和named.rev文件中的PTR记录相反,它允许vbrew.com域中的用户输入本地主机名(localhost)并由本地服务器将它转换为地址127.0.0.1。
接下来是定义子网brewery中的主机。第一个A记录为网关vlager定义了IP地址,然后使用CNAME定义了vlager 的别名vlager-if1,接下来又说明vlager还是新闻服务器(news)。之后为这个域的另外两台主机:vstout和vale建立地址记录。
然后四个A记录定义了子网winery中的四台主机的IP地址:vlager-if2、vbardolino、vchianti和vbeaujilias。
错误查找
在配置好named.boot文件和所需的区文件之后,我们就可以启动named了。Named通常是在系统引导时启动的,但是也可以使用下面命令启动:
# /etc/rc.d/init.d/named/restart
或:
# ndc restart
在第一次运行这些命令时,请留意出错信息。DNS是一个很复杂的系统。用户可能会做错很多事,并且会使系统不能正常运行。伴随DNS建立出现的许多问题都会引起相同的结果,但起因却不同。但大多数问题是由于配置文件中的语法错误而导致的。
确保用户的DNS配置文件中正确地指定了主机名。如果它是一个绝对主机名,要确保它以一个原点结尾。对在SOA和CNAME记录中使用的名字要尤其小心。如果在这里弄错了,这些资源记录会把主机名查询重定向到不存在的计算机。要确保在改变配置文件后增加配置文件中的版本号。如果忘了,那么DNS将不能再读取这些文件。确保为A记录输入了正确的IP地址,并检查这个地址是否与您的/etc/hosts文件匹配。另外,确保DNS名字和IP地址与 named.rev中的相应的逆向解析信息匹配。
查找错误的最好工具是nslookup命令。使用该命令彻底检查用户的DNS服务器。对用户的DNS数据库中的每个地址都进行定期逆向解析,以确保所有的地址和名字都正确。
nslookup命令的使用
nslookup是检查我们的域名服务器配置的最好工具,它是由BIND软件包提供的。它允许任何人直接查询域名服务器,对于确定服务器是否正确地运行和是否配置得和合适是很有帮助的。
nslookup命令可以交互式的从命令行进行查询,在命令行中它可以用来查询IP地址,例如:
$ nslookup hostname
这条命令要求定义在resolv.conf中的域名服务器查询给定主机名的IP地址(如果有不止一个服务器,nslookup将按列在 /etc/resolv.conf文件中的顺序选取一个作为查询对象)。当不带任何参数时,nslookup将显示所使用的域名服务器的信息。在 “>”提示符下,我们可以输入所要请求的查询的域名;在提示符下输入exit命令将会终止一次查询会话。默认情况下,nslookup查询A记录。例如:
$ nslookup
Default Name Server: rs10.hrz.th-darmstadt.de
Address: 130.83.56.60
> sunsite.unc.edu
Name Server: rs10.hrz.th-darmstadt.de
Address: 130.83.56.60
Non-authoritative answer:
Name: sunsite.unc.edu
Address: 152.2.22.81
>exit
但我们可以使用set type命令修改去查询另一种资源记录类型,下面的例子将会可检查SOA记录。请注意,如果将查询类型设置成SOA。它将保持SOA不变,不会返回默认的A型查询。如果我们需要查询A记录,则还需要使用一次set type命令。
$ nslookup
Default Name Server: rs10.hrz.th-darmstadt.de
Address: 130.83.56.60
> unc.edu
*** No address (A) records available for unc.edu
Name Server: rs10.hrz.th-darmstadt.de
Address: 130.83.56.60
> set type=SOA
> unc.edu
Name Server: rs10.hrz.th-darmstadt.de
Address: 130.83.56.60
Non-authoritative answer:
unc.edu
origin = ns.unc.edu
mail addr = shava.ns.unc.edu
serial = 930408
refresh = 28800 (8 hours)
retry = 3600 (1 hour)
expire = 1209600 (14 days)
minimum ttl = 86400 (1 day)
Authoritative answers can be found from:
UNC.EDU nameserver = SAMBA.ACS.UNC.EDU
SAMBA.ACS.UNC.EDU internet address = 128.109.157.30
>exit
同样,可以使用set type查询MX记录,或修改成专用查询类型ANY,ANY可以用来取得指定主机的所有可用资源记录。
> set type=MX
> unc.edu
Non-authoritative answer:
unc.edu preference = 10, mail exchanger = lambada.oit.unc.edu
lambada.oit.unc.edu internet address = 152.2.22.80
Authoritative answers can be found from:
UNC.EDU nameserver = SAMBA.ACS.UNC.EDU
SAMBA.ACS.UNC.EDU internet address = 128.109.157.30
>exit
nslookup命令的另一个应用为named.ca文件是获取当前根服务器的列表。我们可以使用set type=NS来查询所有的根域名服务器:
$ nslookup
Default Name Server: rs10.hrz.th-darmstadt.de
Address: 130.83.56.60
> set typ=NS
> .
Name Server: fb0430.mathematik.th-darmstadt.de
Address: 130.83.2.30
Non-authoritative answer:
(root) nameserver = NS.INTERNIC.NET
(root) nameserver = AOS.ARL.ARMY.MIL
(root) nameserver = C.NYSER.NET
(root) nameserver = TERP.UMD.EDU
(root) nameserver = NS.NASA.GOV
(root) nameserver = NIC.NORDU.NET
(root) nameserver = NS.NIC.DDN.MIL
Authoritative answers can be found from:
(root) nameserver = NS.INTERNIC.NET
(root) nameserver = AOS.ARL.ARMY.MIL
(root) nameserver = C.NYSER.NET
(root) nameserver = TERP.UMD.EDU
(root) nameserver = NS.NASA.GOV
(root) nameserver = NIC.NORDU.NET
(root) nameserver = NS.NIC.DDN.MIL
NS.INTERNIC.NET internet address = 198.41.0.4
AOS.ARL.ARMY.MIL internet address = 128.63.4.82
AOS.ARL.ARMY.MIL internet address = 192.5.25.82
AOS.ARL.ARMY.MIL internet address = 26.3.0.29
C.NYSER.NET internet address = 192.33.4.12
TERP.UMD.EDU internet address = 128.8.10.90
NS.NASA.GOV internet address = 128.102.16.10
NS.NASA.GOV internet address = 192.52.195.10
NS.NASA.GOV internet address = 45.13.10.121
NIC.NORDU.NET internet address = 192.36.148.17
NS.NIC.DDN.MIL internet address = 192.112.36.4
>exit
利用nslookup的help命令或?,我们可以得到nslookup的完整命令列表。例如:
>help
Commands: (identifiers are shown in uppercase, [ ] means optional)
NAME - print info about the host/domain NAME using default server
NAME1 NAME2 - as above, but use NAME2 as server
help or ? - print info on common commands; see nslookup(1) for details
set OPTION - set an option
all - print options, current server and host
[no]debug - print debugging information
[no]d2 - print exhaustive debugging information
[no]defname - append domain name to each query
[no]recurse - ask for recursive answer to query
[no]vc - always use a virtual circuit
domain=NAME - set default domain name to NAME
srchlist=N1[/N2/.../N6] - set domain to N1 and search list to N1,N2,etc.
root=NAME - set root server to NAME
retry=X - set number of retries to X
timeout=X - set initial time-out interval to X seconds
querytype=X - set query type, e.g., A, ANY, CNAME, HINFO, MX, PX, NS, PTR, SOA, TXT, WKS, SRV, NAPTR
port=X - set port number to send query on
type=X - synonym for querytype
class=X - set query class to one of IN(Internet), CHAOS, HESIOD or ANY
[no]recurse - ask for recursive answer to query
[no]vc - always use a virtual circuit
domain=NAME - set default domain name to NAME
srchlist=N1[/N2/.../N6] - set domain to N1 and search list to N1,N2,etc.
root=NAME - set root server to NAME
retry=X - set number of retries to X
timeout=X - set initial time-out interval to X seconds
querytype=X - set query type, e.g., A, ANY, CNAME, HINFO, MX, PX, NS, PTR, SOA, TXT, WKS, SRV, NAPTR
port=X - set port number to send query on
type=X - synonym for querytype
class=X - set query class to one of IN(Internet), CHAOS, HESIOD or ANY
server NAME - set default server to NAME, using current default server
lserver NAME - set default server to NAME, using initial server
finger [USER] - finger the optional USER at the current default host
root - set current default server to the root
ls [opt] DOMAIN [> FILE] - list addresses in DOMAIN (optional: output to FILE)
-a - list canonical names and aliases
-h - list HINFO (CPU type and operating system)
-s - list well-known services
-d - list all records
-t TYPE - list records of the given type(e.g.,A,CNAME,MX,etc.)
view FILE - sort an ls output file and view it with more
exit - exit the program, ^D also exits
当我们使用nslookup这一工具时,我们将会发现很多有帮助的功能。












文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面