DNS正向解析实现

             DNS正向解析实现

                               作者:尹正杰 

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

 

 

一.资源记录

  区域解析库是由众多资源记录(Resource Record,简称:"RR")组成。资源记录由 A,AAAA,,PTR,,SOA,NS,CNAME,MX,TXT,SPT等记录类型组成。

  接下来我们一起来介绍一下常用的记录类型含义:
    SOA:
      全称为: "Start Of Authority",即起始授权记录。
      一个区域解析库有且仅能有一条SOA记录,必须位于解析库的第一条记录。
    A:
      Internet Address,作用是将FQDN解析为IPv4地址。
    AAAA:
      作用是将FQDN解析为IPv6地址。
    PIR:
      PoinTeR,反向解析记录,将IP地址解析为FQDN。
    NS:
      全称为:Name Server,专用于标明当前区域的DNS服务器。
    CNAME:
      Canonical Name,别名记录。
    MX:
      Mail eXchanger,邮件服务器。
    TXT:
      对域名进行标识和说明的一种方式,一般做验证记录时会使用此项,如SPF(反垃圾邮件)记录,https验证等。

1>.资源记录定义的格式

  无论你想定义的资源记录定义类型是哪个,他都遵循以下定义的格式
    语法:
      name [TTL] IN rr_type value     解析说明:
      name:
        定义资源记录的名称。
      TTL:
        资源记录的生命周期,即记录缓存的时长,可以不写,但需要在全局定义,比如: "$TTL 1D"(也可以写成"$TTL 86400",不写单位的话默认单位就是秒),表示生命周期是1天。
      IN:
        代表Internet记录的意思,早起DNS还有别的功能,目前来讲DNS主要是做Inernet互联网解析记录的,因此当我们添加记录时直接照抄IN即可。
      rr_type:
        代表记录的类型,上面有提到过,比如A,AAAA,PIR等等记录类型。  
      value:
        前面的name相当于key,而这个value就是用来记录值的。
        举个例子,对于A记录来讲,这个name就是FQDN的全称,而value就是IPv4的地址。同理,对于AAAA记录来讲,这个name就是FQDN的全称,而valpue就是IPv6的地址。
  温馨提示:
    (1)TTL可从全局继承;
    (2)"@"符号可用于引用当前区域的名字;
    (3)同一个名字可以通过多条记录定义多个不同的值,此时DNS服务器会以轮询方式响应;
    (4)同一个值也可能有多个不同的定义名字,通过多个不同的名字指向同一个值进行定义,此仅表示通过多个不同名字可以找到同一个主机。

2>.

 

3>

 

 

二.配置"yinzhengjie.com"域名的区域解析记录

1>.修改主配置

[root@dns53.yinzhengjie.com ~]# vim /etc/named.rfc1912.zones
[root@dns53.yinzhengjie.com ~]# 
[root@dns53.yinzhengjie.com ~]# egrep -v "^//|^$" /etc/named.rfc1912.zones  # 修改bind程序的自配置文件,添加我们要维护的域名信息。
...
zone "yinzhengjie.com" IN {
    type master;
    file "yinzhengjie.com.zone";
    allow-update { none; };
};
[root@dns53.yinzhengjie.com ~]# 
[root@dns53.yinzhengjie.com ~]# 

2>.配置区域解析数据库文件

[root@dns53.yinzhengjie.com ~]# vim /var/named/yinzhengjie.com.zone  # 温馨提示,当前的用户是root,而运行bind服务的用户名是named哟~
[root@dns53.yinzhengjie.com ~]# 
[root@dns53.yinzhengjie.com ~]# cat /var/named/yinzhengjie.com.zone
$TTL 1D
@    IN SOA    @ rname.invalid. (
                    0    ; serial
                    1D    ; refresh
                    1H    ; retry
                    1W    ; expire
                    3H )    ; minimum
                NS    @
                A    127.0.0.1
        AAAA    ::1
docker201 300 IN A 172.200.1.201
dns53.yinzhengjie.com. IN A 172.200.1.53
[root@dns53.yinzhengjie.com ~]# 
[root@dns53.yinzhengjie.com ~]# chown root:named /var/named/yinzhengjie.com.zone  # 此步骤千万别忘记,否则named用户将无权限访问root创建的文件哟~
[root@dns53.yinzhengjie.com ~]# 
[root@dns53.yinzhengjie.com ~]# named-checkzone yinzhengjie.com /var/named/yinzhengjie.com.zone  # 验证区域文件的语法是否正确!
zone yinzhengjie.com/IN: loaded serial 0
OK
[root@dns53.yinzhengjie.com ~]# 
[root@dns53.yinzhengjie.com ~]# rndc reload  # 重新加载配置文件!无需重启named服务
server reload successful
[root@dns53.yinzhengjie.com ~]# 



温馨提示:
  (1)上面的记录请主管朱最后两条记录,其他的照抄DNS已有的本地解析文件的模板即可;
  (2)我们可以指定TTL的值,若不指定单位,默认为秒,上面为为docker201这个主机指定的TTL为300秒,但我并未dns53主机指定TTL,因此它使用配置文件首行定义的变量"$TTL",即默认的TTL为1天;
  (3)通常情况下,我们无需再第一列写上完整的FQDN,如果要写,请一定要将根域(就是最后一个点号)写上,否则bind程序会误以为你写的是主机名,后自动在给你补一个当前域名(本案是"yinzhengjie.com):
      a)以上面的案例为例,当我写的第一列是"docker201"是,则bind程序会隐式为我们补上域名,即:"docker.yinzhengjie.com.";
      b)如果第一列写的是"docker201.yinzhengjie.com",注意哈,此时我没有写最后一个点号(也就是我们所说的根域),因此bind程序依旧会为我们补上域名,即:"docker201.yinzhengjie.com.yinzhecngjie.com.",很显然不是我们想要的结果;
      c)如果第一列写的是"docker201.yinzhengjie.com.",注意哈,此时我写了最后一个点号(也就是此处我写了根域),此时bind程序发现竟然是以"yinchengjie.com."结尾的,因此就不会在去补充一次啦。

3>.验证解析结果

[root@docker201.yinzhengjie.com ~]# dig  dns53.yinzhengjie.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.3 <<>> dns53.yinzhengjie.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44863
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dns53.yinzhengjie.com.        IN    A

;; ANSWER SECTION:
dns53.yinzhengjie.com.    86400    IN    A    172.200.1.53

;; AUTHORITY SECTION:
yinzhengjie.com.    86400    IN    NS    yinzhengjie.com.

;; ADDITIONAL SECTION:
yinzhengjie.com.    86400    IN    A    127.0.0.1
yinzhengjie.com.    86400    IN    AAAA    ::1

;; Query time: 0 msec
;; SERVER: 172.200.1.53#53(172.200.1.53)
;; WHEN: 四 12月 31 23:49:45 CST 2020
;; MSG SIZE  rcvd: 124

[root@docker201.yinzhengjie.com ~]# 

 

三.

 

posted @ 2020-12-31 21:41  尹正杰  阅读(427)  评论(0编辑  收藏  举报