• 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 ~]# 

    三.

  • 相关阅读:
    VirtualBox设置共享文件夹失败的解决方法
    内存泄漏
    javascript语言精粹学习记录一
    javascript之继承
    HadoopFSDataset
    linux eclipse启动问题及解决方法
    css规范总结
    pycharm
    第十章 call和ret指令
    第五章 [bx]和loop指令
  • 原文地址:https://www.cnblogs.com/yinzhengjie/p/14218718.html
Copyright © 2020-2023  润新知