DNS标准资源记录

在DNS区文件(zone file)中,使用标准资源记录(standard resource records,有时被称作RR)记录一个域的所有信息。

1 软件环境

Unix或类Unix操作系统,BIND。

2 什么是区文件

区文件是DNS服务器上描述DNS区的文本文件。DNS是一个层次化的系统,而“区”是它的子集——通常是单独一个域。

3 区文件的组成

指令(directives),用来简化文件,本文不涉及;标准资源记录,描述域。

4 标准资源记录

4.1 标准资源记录的格式

[name] [ttl] class type data ([]表示此选项非必需,可忽略。)

4.1.1 name

name字段是本条资源记录描述的对象。可以是相对域名(系统会把他当作当前域名的子域名)、完整域名、或下述特殊符号,等等。

4.1.1.1 (空格),表示本条资源记录描述的对象与最后一个name不为空的资源记录相同。

4.1.1.2 ..(两个英文句号),表示根域。.(一个英文句号)也表示根域,且更为常用。

4.1.1.3 @,代表$ORIGIN指令设置的内容;若未进行设置,则系统从当前域名产生。按我目前的理解,@一般代表当前域名。

4.1.1.4 *,通配符,表示由任意字符组成的名称。单独使用,可表示当前域的任意子域;和一个域名搭配使用(例如*.uucp),则表示任意字符加上.uucp。

4.1.2 ttl

Time-to-live,定义本条资源记录的信息保存在缓存中的时间。

4.1.3 class

定义本条资源记录的地址类别。所有用于因特网的DNS,其地址类别都是IN。

4.1.4 type

type字段指出本条记录提供的数据类型。

4.1.5 data

data字段包含本条记录的数据信息。

4.2 Start of Authority(SOA)记录

SOA是一个区的起始,通常是区文件的第一条记录。其后的所有记录都是SOA所声明的域的组成部分。每一个区只能有一条SOA记录。

4.2.1 格式

[zone] [ttl] IN SOA origin contact serial refresh retry expire negative_cache_ttl

4.2.2 zone

区的名称。通常这里会是一个@符号,代表在named.conf文件中声名的一个区名称(这个声明的file语句指向当前区文件)。

4.2.3 ttl

在SOA中ttl为空。

4.2.4 IN

SOA的地址类别为IN。

4.2.5 SOA

SOA的数据类型是SOA。

4.2.6 origin

这个域的主服务器主机名。通常在这里使用完整域名形式。例如“crab”是“wrotetheboo.com”的主服务器,则这里填写“crab.wrotethebook.com”。

4.2.7 contact

这个域的管理者的电子邮箱地址。邮箱地址中的“@”标记需要用“.”代替。

4.2.8 serial

最长10位数字,代表这个域文件的版本。域名从服务器通过serial字段判断它上面的区文件是否需要更新,因此每次修改区文件后,serial必须增加。

4.2.9 refresh

最长8位数字。每隔refresh秒,域名从服务器检查一次SOA的serial数字,决定是否需要更新区文件。通常设置为43200(一天两次)或21600(一天四次)。

4.2.10 retry

最长8位数字。如果主服务器未响应zone refresh(获取SOA记录,对比serial数字,在必要的情况下下载区文件,这个过程被称为zone refresh),则域名从服务器等待retry秒后重试。通常设置为3600或1800。

4.2.11 expire

最长8位数字。未收到zone refresh的情况下,域名从服务器会保留这个区文件expire秒,然后丢弃。通常设置为604800秒(约一周)。

4.2.12 negative_cache_ttl

域名服务器会缓存标准资源记录,以便快速回应域名请求。域名服务器还能缓存某个资源记录不存在的信息(negative information,负面信息)。negative_cache_ttl设置负面信息应被缓存多久。通常设置为300(5分钟)或900(15分钟)之间。

4.3 Name Server记录

Name Serve(NS)记录是链接域名层次结构的“指针”,它指出一个区所包含的授权服务器。顶级域的NS记录指向次一级域的服务器,次一级域的NS记录指向其子域的服务器……NS记录确保次一级域的服务器可被访问,没有它们,次一级域的服务器就是未知的。

4.3.1 格式

[domain] [ttl] IN NS server

4.3.2 domain

域名。

4.3.3 ttl

NS记录的ttl通常为空。

4.3.4 NS

NS记录的数据类型为NS。

4.3.5 IN

NS记录的地址类别为IN。

4.3.6 server

为4.3.2的域名提供授权域名服务的主机的名称。

4.4 Address(A)记录

A记录把主机名转换成IP地址,通常记录当前区主机的IP。胶水记录(glue record)是一种特殊的A记录(它记录其他区主机的IP),NS记录指出子域的一个服务器,而胶水记录给出此服务器的IP地址(这样才能通信),这种A记录结合相应的NS记录,把域“粘”在一起,因此被称为“胶水记录”。

4.4.1 A记录格式

[host] [ttl] IN A address

4.4.2 host

主机名。通常使用相对域名(相对于当前域)。

4.4.3 ttl

A记录的ttl通常为空。

4.4.4 IN

A记录的地址类别为IN。

4.4.5 A

A记录的数据类型为A。

4.4.6 address

4.4.2的主机的IP地址(点分十进制记法表示,例如172.16.12.2)。

4.5 Mail Exchanger(MX)记录

MX记录用来把邮件重定向到邮件服务器。如果系统要发送邮件给一台主机,它会请求这主机的MX记录,而DNS会返回这台主机的所有MX记录。接下来,系统会根据preference数值设定的优先级一一尝试连接,直到可以投递邮件。若DNS没有返回MX记录,邮件会直接投递到邮箱地址中的主机。MX记录只定义了如何重定向邮件,邮件的处理及实际投递工作由系统和邮件服务器完成。

4.5.1 格式

[name] [ttl] IN MX preference host

4.5.2 name

需要重定向的主机或域,可以理解为邮箱地址@符号后面的内容,发往name的邮件会被重定向给4.5.7的host。

4.5.3 ttl

通常为空。

4.5.4 IN

MX记录的地址类别为IN。

4.5.5 MX

MX记录的数据类别为MX。

4.5.6 preference

一个主机或域可以有多条MX记录,preference字段指出这些记录的优先级。数字越小优先级越高,0具有最高优先级。通常preference数字以5或10递增,这样方便今后添加新的MX记录。

4.5.7 host

可以处理邮件的主机或域。

4.6 Canonical Name(CNAME)记录

CNAME记录为一个主机定义别名。

4.6.1 格式

nickname [ttl] IN CNAME host

4.6.2 nickname

4.6.6的主机的别名。

4.6.3 ttl

通常为空。

4.6.4 IN

CNAME记录的地址类别是IN。

4.6.5 CNAME

CNAME记录的数据类型是CNAME。

4.6.6 host

需要别名的主机名(必须是这个主机的正式名称,不能是别名)。

4.7 Responsible Person(RP)记录

RP记录保存一个主机或域联系人的详细信息。

4.7.1 格式

[name] [ttl] IN RP mail_address text_pointer

4.7.2 name

本条RP定义的联系人所对应的域目标(domain object,我理解为区文件中定义的主机或域)。

4.7.3 ttl

ttl通常为空。

4.7.4 IN

RP记录的地址类别为IN。

4.7.5 RP

RP记录的数据类别为RP。

4.7.6 mail_address

联系人邮箱。“@”符号通常用“.”代替。

4.7.7 text_pointer

包含联系人附加信息的TXT记录的域名。

4.7.8 例子

下面是一个RP记录和TXT记录一起使用的例子。
crab.wrotethebook.com. IN RP craig.wrotethebook.com crabRP
crabRP.wrotethebook.com. IN TXT "Craig Hunt (301)555-1234 X237"

4.8 Text(TXT)记录

TXT记录保存一些字符串数据,这些文本数据可以是任意格式。

4.8.1 格式

[name] [ttl] IN TXT string

4.8.2 name

本条TXT记录所对应的域目标(domain object)。

4.8.3 ttl

通常为空。

4.8.4 IN

TXT记录的数据类别为IN。

4.8.5 TXT

TXT记录的数据类型是TXT。

4.8.6 string

以引号(")括起来的文本数据。

4.9 Server Selection(SRV)记录

SRV记录提供了一个定位网络服务器的标准方式,以及一种建立通用服务名称的标准格式,同时添加了服务器选择和负载均衡的特性。

4.9.1 格式

name [ttl] IN SRV preference weight port server

4.9.2 name

SRV记录有一个独特的_service._protocol.name格式。“.”用来分隔前述格式字段的各个部分;加“_”是为了不与其他真实的域名相混淆;“service”是服务器所能提供的服务(记录在/etc/services文件);“protocol”是与服务相关联的协议名称;“name”是主机或域名。例如要寻找“wrotethebook.com”域中提供ftp服务的服务器,可写为“_ftp._tcp.wrotethebook.com”。

4.9.3 ttl

ttl通常为空。

4.9.4 IN

SRV记录的地址类别是IN。

4.9.5 SRV

SRV记录的数据类型是SRV。

4.9.6 preference

如果有多条SRV记录,这个字段指出服务器的优先级。数字越小,优先级越高。只有当高优先级服务器无法访问时,才会使用低优先级服务器。

4.9.7 weight

定义如何在多台服务器间分配负载。1为基数。如果A服务器weight是1,B服务器weight是2,则B会收到比A多两倍的访问量。weight只能用来在preference数字相同的服务器之间均衡负载。

4.9.8 port

某服务所使用的端口号,通常在/etc/services中有定义。如果服务没有使用标准端口号,这里也可以提供此非标准端口号。

4.9.9 server

运行服务的主机名,可以是别名。

5 参考文档

5.1 TCP/IP Network Administration, 3rd Edition - Appendix C, Section C.3。

5.2 Wikipedia - Zone File

6 后记

真的深入了解,才发现DNS是一个非常复杂的系统,并不像我最初所想的那么简单。本文内容主要来自参考文档5.1,加上一些我自己的理解。错漏之处难免,仅供参考。

点击量:164

1 评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

3 + 19 =