以下内容纯属个人解读,如有错误敬请各位看官大神指教:-)
Linux的活还是鸟哥的说得最清楚,所以这里针对DNS服务器的/etc/named.conf某个zone的区域配置文件的个解析,都是主要参考《鸟哥的私房菜》来进行的实战记录而已。
我所需要解析的多个域名都是 *.test.com,即** test.com**就是根域名,因此需要在DNS Server中的 /etc/named.conf 文件中加入一个针对根域名 test.com 的 zone 记录,如下所示:
zone "test.com" in {
type master;
file "test.com.zone";
}
其中的 "test.com.zone" 就是区域配置文件的文件名,默认位于在 /etc/named.conf 文件的 directory 属性定义的工作目录中,例如下图中的/var/lib/named
options {
# The directory statement defines the name server's working directory
directory "/var/lib/named";
......
根据鸟哥的指导,zone配置文件中的每一个Resource Record的通用格式为
[domain] [ttl] IN [[RR type] [RR data]]
[待查内容] [暂存时间(秒)] IN [[资源类型] [资源内容]]
常见的RR记录形如:
[domain] IN [[RR type] [RR data]]
主机名称. IN A IPv4 的 IP 位址
主机名称. IN AAAA IPv6 的 IP 位址
域名. IN NS 管理这个域名的DNS服务器的名字.
域名. IN SOA 管理这个域名的七個重要参数
域名. IN MX 顺序数字,接收邮件的服务器的主机名字
主机别名. IN CNAME 实际代表這個主机別名的主机名字.
在项目中最终使用的 /var/lib/named/test.com.zon 文件内容如下:
$TTL 1D
@ IN SOA dns1.test.com. root.test.com. (
1053891168
201600
3600
604800
86400 )
IN NS dns1.test.com.
dns1.test.com. IN A 8.40.102.71
obs.test.com. IN CNAME globalDNS.test.com.
globalDNS.test.com. IN CNAME defRegionDNS.test.com.
defRegionDNS.test.com. IN CNAME clusterGroup.test.com.
clusterGroup1.test.com. IN CNAME cluster1.test.com.
cluster1.test.com. IN A 8.40.24.35
IN A 8.40.24.37
cluster2.test.com. IN A 8.40.24.39
IN A 8.40.24.41
clusterGroup2.test.com. IN CNAME cluster3.test.com.
cluster3.test.com. IN A 8.40.24.41
IN A 8.40.24.43
cluster4.test.com. IN A 8.40.24.45
IN A 8.40.24.47
-
其中所有以"句点."结尾的主机名,(例如"dns1.test.com."、"obs.test.com."、"cluster1.test.com." 等)都是所谓的"完整主机名,fully qualified domain name (FQDN)"——这也是推荐使用的主机名方式。如果没有在主机名后加上句点,则在进行解析时会自动在主机名后加上根域名。例如上述的 "cluster1.test.com." 如果改成 "cluster1.test.com",那么能够解析成功的域名将是 "cluster1.test.com.test.com" 而不是预期的 "cluster1.test.com"
@ IN SOA dns1.test.com. root.test.com.
``` 这一行中SOA 的意思是 Start Of Authority, 表示对解析根域名的DNS Server(s) 的管理信息; ```@```表示根域名 "test.com"(即在named.conf中配置的zone节点的名字); ```dns1.test.com. ```表示**主DNS Server**的主机名; ```root.test.com.```表示管理员邮箱地址(root@test.com).
这里需要注意的是,DNS Server很多情况下是一个主备关系的服务器集群,这里谁是主DNS Server就是由SOA来指定的了。所有的备DNS都会定时从主DNS上获取解析信息并缓存,什么时候来取,缓存有效期多久等内容就是SOA这一句的后面七个参数来决定的了(详见[鸟哥的描述](http://linux.vbird.org/linux_server/0350dns.php#DNS_master_rr))
3. 既然可能存在多个DNS Server,那么每一个DNS Server的主机名和IP分别是多少呢?这个就是由 **NS** 和 **A** 记录共同来完成的了,例如此处的
IN NS dns1.test.com.
dns1.test.com. IN A 8.40.102.71
就表示dns1.test.com 这个DNS Server的IPv4地址是8.40.102.71。NS 即 Name Server的缩写,主机名字只是一个符号,并不一定要和DNS Server所在OS的hostname保持一致,只要在DNS Server集群中保持一致就可以了。
4. A 记录就是 IPv4 Address 的缩写, AAAA 记录就是 IPv6 Address的缩写。这条记录就是最底层直接的由主机名到IP地址的映射。对于同一个主机名对应多个IP地址的情况,如果是连续的多个A记录,如果“主机名称”字段为空,则这多个A记录都是对应的同一个主机名。
5. CNAME 记录就是主机别名的记录,例如这几条记录:
obs.test.com. IN CNAME globalDNS.test.com.
globalDNS.test.com. IN CNAME defRegionDNS.test.com.
defRegionDNS.test.com. IN CNAME clusterGroup.test.com.
clusterGroup1.test.com. IN CNAME cluster1.test.com.
默认域名obs.test.com、全局DNS域名globalDNS.test.com、默认区域DNS域名defRegionDNS.test.com、集群1域名cluster1.test.com 其实最终都是映射到集群1的IP地址上,因此只要最后cluster1.test.com有正确的A记录,就可以了。使用别名CNAME,在需要cluster1的IP地址的时候,只需要修改一处即可
在项目中最终使用的负向解析区域配置文件/var/lib/named/24.40.8.zone 文件内容如下:
$TTL 1D
@ IN SOA dns1.test.com. root.test.com. (
1053891168
201600
3600
604800
86400 )
IN NS dns1.test.com.
dns1.test.com. IN A 8.40.102.71
35 IN PTR cluster1.test.com.
IN PTR clusterGroup1.test.com.
IN PTR defRegionDNS.test.com.
IN PTR globalDNS.test.com.
IN PTR obs.test.com.
37 IN PTR cluster1.test.com.
IN PTR clusterGroup1.test.com.
IN PTR defRegionDNS.test.com.
IN PTR globalDNS.test.com.
IN PTR obs.test.com.
39 IN PTR cluster2.test.com.
41 IN PTR cluster2.test.com.
43 IN PTR clusterGroup2.test.com.
IN PTR cluster3.test.com.
45 IN PTR clusterGroup2.test.com.
IN PTR cluster3.test.com.
47 IN PTR cluster4.test.com.
49 IN PTR cluster4.test.com.
网友评论