在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。
6 后记
真的深入了解,才发现DNS是一个非常复杂的系统,并不像我最初所想的那么简单。本文内容主要来自参考文档5.1,加上一些我自己的理解。错漏之处难免,仅供参考。
Visits: 686
Feel quite a lot