DNS Server根据提供服务内容,可以分为Authoritative授权服务器和Recursive递归服务器两种。前者在本地保存了授权域名的Zone文件能够提供针对授权域的权威应答,服务器角色可以是Master或Slave Server;后者仅对客户端请求做递归查询并提供缓存服务,通常也称为CacheOnly Server。
我们在 homelab.pub中构建的DNS Server将会同时配置为授权服务器和递归服务器,满足企业内部私有域名解析和外部域名缓存需求。但这种配置在生产环境中可能会因为缓存服务器向运营商DNS Server频繁发出DNS请求而触发服务侧的安全机制导致被暂时性列入RBL,影响内部用户正常访问,因此建议为本地DNS Server配置多个参考DNS Server,条件允许的话建议配置谷歌或DNSPOD等机构的DNS Server,可以避免此类问题且可以在一定程度上免受DNS污染影响。
本文将介绍DNS服务关键术语,区域Zone和资源记录ResourceRecords(下文简称RR)。
0x1 Zone和RR
Zone和Domain虽然都有“区域”的意思,但在IT语境中却是两个不同的术语。Domain是DNS层次化结构中的一个分支,而Zone是DNS结构中的一段连续的名称空间,即Zone是可以包含多个连续的Domain的,而不连续的Domain是无法构成Zone的。在Zone配置文件中通过资源记录RR描述这段连续的名称空间中授权和地址解析情况。Zone配置文件格式通过RFC1035定义,因此大多数DNS Server无论其架构和平台都能够相互兼容。
Zone配置文件示例参考:
$ORIGIN homelab.pub. ;声明域名空间,必须以点号结尾
$TTL 86400 ;RR生存周期,即可被缓存时间,全局
@ IN SOA master.homelab.pub. xiaomage.homelab.pub. ( ;SOA记录
2018061801 ;序列号
21600 ;更新时间间隔,也可采用6H表示
3600 ;更新失败重试时间间隔,也可采用1H表示
604800 ;失效时间,也可采用1W表示
86400 ;TTL生存周期,也可采用1D表示
)
;
IN NS master.homelab.pub. ;NS记录
IN NS slave.homelab.pub. ;NS记录
master IN A 192.168.2.250 ;A记录
slave IN A 192.168.2.251 ;A记录
Zone配置文件中的每条记录(如SOA/NS/A/MX等)就称为RR资源记录。
0x2 RR资源记录类型
根据IETF相关文档定义,RR可以有多种,本文仅介绍我们日常工作经常用到的几种类型。
1、SOA记录,Start of Authority Record
用途:用于委派授权,即表明当前DNS Server作为指定域的授权服务器。SOA是Zone文件的第一条RR,包含多个参数,默认时间单位为秒,也支持H/D/W等便捷表示法;
示例:
$ORIGIN homelab.pub. ;声明域名空间,必须以点号结尾
$TTL 86400 ;RR生存周期,即可被缓存时间,全局
@ IN SOA master.homelab.pub. xiaomage.homelab.pub. (
2018061801
21600
3600
604800
86400
)
SOA记录内容说明:
@ 在Zone文件中“@”符号表示引用#ORIGIN命令,即homelab.pub
IN 表示Internet
SOA 记录类型
master.homelab.pub. 授权DNS服务器主机名
xiaomage.homelab.com. 管理员Email地址,因在Zone文件中“@”符号有其他用途,这里有件地址中用“.”代替
2018061801 数字格式序列号,用于配置版本控制,slave根据序列号判断master是否有更新
21600 salve向master请求更新的时间间隔(也可以采用6H表示)
3600 salve向master请求更新失败后重试时间间隔,如果在过期时间之内master始终没有响应slave的更新请求,则slave在过期时间后不能再为homelab.pub域提供权威解析(也可以采用1H表示)
604800 过期时间(也可以采用1W表示)
86400 TTL生存周期,即RR可以呗其他服务器缓存的时间周期(也可以用1D表示)
2、NS记录,Name Server Record
用途:声明当前域使用的DNS服务器的FQDN;
示例:
@ IN NS master.homelab.pub.
IN NS slave.homepab.pub.
说明:如果一条RR的第一个字段为空则使用上一条RR的第一个字段补齐;
3、A记录,IPv4 Address Record
用途:将域名映射到IPv4地址
示例:
www IN A 192.168.2.205
IN A 192.168.2.206
说明:在正向解析域(即从域名解析IP地址),FQDN域名要以“.”点号表示名称结束,否则DNS Server会自动将$ORIGIN的值追加到域名后作为FQDN。示例中“www”没有使用“.”号结束,系统会自动将其补充为“www.homelab.pub.”,如果写为“www.”就错了。
4、MX记录,Mail Exchange Record
用途:声明当前域使用的邮件服务器的FQDN
示例:
@ IN MX 10 mail1.homelab.pub.
IN MX 20 mail2.homelab.pub.
说明:同一域名可以设置多条同类型的RR以实现负载均摊,MX型RR中增加了优先级列来区分负载均摊的参考权重,权重值越大优先级越低。
5、CNAME记录,Canonical Name Record
用途:别名记录,将域名映射到另一个域名,但不能映射到另一个别名(防止环路冲突),其他指向FQDN的记录(NS、MX、PTR)不能指向CNAME记录;
示例:
portal IN CNAME www
说明:这条RR中portal和www都没有以“.”点号结尾,因此系统会自动将其补充为“portal.homelab.pub. IN CNAME www.homelab.pub.”。
6、PTR记录,Pointer Resource Record
用途:反向解析记录,用于反向解析域(即从IP地址解析域名),将IP地址映射到域名。
示例:
250 IN PTR master.homelab.pub.
说明:反向解析域Zone文件中IP地址部分仅需填写最后一组数字,以上示例表示“192.168.2.250是域名master.homelab.pub的IP地址”。
7、TXT记录,Text Record
用途:文本型记录,多用于垃圾邮件防范的SPF和DKIM,这两种RR不能视为anti-spam的能力,但可以作为整体方案的组成部分;
示例:
homelab.pub. IN TXT "v=spf1 mx ptr -all"
mail1.homelab.pub. IN TXT "v=spf1 mx ptr -all"
mail2.homelab.pub. IN TXT "v=spf1 mx ptr -all"
homelab.pub. IN TXT "v=spf1 ip4:192.168.2.200/24 ip4:192.168.2.201/24 -all"
说明1:SPF Sender Policy Framework发送方策略框架,用以声明当前域有哪些合法邮件服务器。SPF记录可以配置到整个域和域内的每台MX RR,其中“v=spf1”表示版本1,目前只有版本1,“mx”表示本域对外发送邮件,“ptr”表示本域邮件服务器具有ptr记录,“ip4:192.168.2.200/24”表示本域邮件服务器IPv4地址,有多个邮件服务器则都要写全,“-all”表示拒绝其他地址。具体采用哪种写法要根据DNS Server支持情况来确认,国内的DNS服务商多采用最后一种方式。TXT记录在企业内部的DNS Server上几乎用不到,后续如果谈到MailServer再详细解释。
说明2:DKIM DomainKeys Identified Mail 域名密钥识别邮件(标准),用以验证发送方服务器合法性。大体流程是MailServer创建了非对称密钥对,并将共钥信息添加到了DNS服务器的TXT记录中,发件方服务器在发送邮件时会在邮件头中加入基于私钥的签名信息,收件服务器在接收到邮件请求后会向DNS服务器请求发件服务器域名TXT记录中的公钥信息用以验证签名是否有效,若有效则进入邮件接收流程,否则则进入垃圾邮件处理流程。
一句话简单理解SPF和DKIM:SPF声明了当前域合法的MailServer的IP地址,而收件方MailServer则可以通过DKIM对这些地址进行验证。
8、SRV记录,Service Location Record
用途:服务定位记录,用以标识指定服务器提供了哪些服务,常用于Windows活动目录中。
示例:
_http._tcp.homelab.pub. IN SRV 0 5 8081 www.homelab.pub.
说明:SRV记录字段构成:srvce.prot.name. IN SRV pri weight port target
srvce:服务类型,以下横行开头,如:_http表示WEB服务,_ftp表示FTP服务,_ldap表示LDAP服务等;
prot:协议类型,以下横行开头,如:_tcp表示TCP协议,_udp表示UDP协议;
name:本域域名;
SRV:记录类型;
pri:优先级,同MX记录中优先级功能相同,数值越小优先级越高;
weight:权重,用于在具有相同优先级的多条SRV记录之间实现负载均摊,数值越大被负载的几率越高;
port:服务端口,此处可以填写自定义端口,比如运行于8081端口的WEB服务;
target目标服务器,提供该服务的服务器FQDN。