zoukankan      html  css  js  c++  java
  • 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 ~]# 

    三.

  • 相关阅读:
    LeetCode 32. 最长有效括号(Longest Valid Parentheses)
    LeetCode 141. 环形链表(Linked List Cycle)
    LeetCode 160. 相交链表(Intersection of Two Linked Lists)
    LeetCode 112. 路径总和(Path Sum)
    LeetCode 124. 二叉树中的最大路径和(Binary Tree Maximum Path Sum)
    LightGBM新特性总结
    sql service 事务与锁
    C#泛型实例详解
    C# 中的委托和事件(详解)
    C# DateTime日期格式化
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/14218718.html
Copyright © 2011-2022 走看看