欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深入理解DNS系列——概念篇

程序员文章站 2024-03-15 20:08:12
...

DNS(一)

Conception

DNS(Domain Name System)是一个分布式分级管理的数据库。他存储的是hostname与IP的对应关系、邮件路由信息以及其他互联网应用数据等等。

Domain Name

说到DNS就离不开域名(Domain Name),因为DNS主要解析以及存储的对象是域名相关的数据。域名是一种树状结构,形如:www.baidu.com的多级文本构成,其中不同层级用"."来进行区分。同时域名的层级是从右往左递增的。例如上面的www.baidu.com从右往左开始:

  • 根域名是".",我们所看到的域名尾部并没有显示".",但所有的域名的根域名都是".",他是域名树的根。

  • *域名是:com

    • *域名又分三类:国家和地区域名;通用*域名;新*域名;

    • 国家和地区域名:用于国家、地区等区域性类型。例如cn表示中国,us表示美国等等。

    • 通用*域名:com就是常见的通用域名,其一般表示工商企业类型,而net表示网络提供商,例如csdn.net,非营利组织的一般都是org类型。

    • 新*域名,就比较杂例如新出来的top,xyz,info等比较具有个性的域名。

  • 二级域名是:baidu,一般是由公司、组织或者个人的名称组成。

  • 子域名:www,子域名一般用于网站名称,例如www一般比用于表示网站的主页,而例如 blog.csdn.net中的blog就能一目了然的表示csdn这个网站下的blog业务模块。

  • 结构树:
    深入理解DNS系列——概念篇

DNS Resolve

这里主要讲解一下ACL、VIEW、ZONE以及RR的相关概念以及NAMED内的配置。

  • ACL

    • Access Control Lists访问权限控制,其作用类似白名单。这是防止DoS攻击的有效方法,只允许acl配置中的ip或者ip网段访问dns服务器,做到访问控制。格式:
      acl myacl {!10.0.0.1;10.0.0.0/24};
      其中myacl用于acl的命名,花括号内表示允许访问的ip或者ip段,而用“!”来表示过滤相应的IP或者IP段,匹配原则为first-match,这里表示出了10.0.0.1以外的任意10.0.0.0/24网段内的ip都可以访

    • acl还可以与options里的{allow-notify, allow-query, allow-query-on, allow-recursion, blackhole, allow-transfer,
      match-clients}等搭配使用,起到更好的访问控制作用。

  • VIEW

    • 视图是所有dns操作的关键,字面意思就是所见区域,相当于dns的命名空间(namespace),只有在给定的视图区域才能有相关的dns操作,例如权威区以及资源等都依赖于视图,同时视图食欲优先级,在named的配置里,排在最上面的视图表示优先级最高,而其匹配为first-match。格式为:
      view myview {options:xxx;};
  • ZONE

    • 权威区,任何资源以及重定向等配置都是在权威区内进行的,而区又是在视图内限定的。这样就组成了一个视图-权威区-资源|重定向等的层级关系。格式为:
      zone myzone {type master;options:xxx;};

      其中options表示权威区内的各项配置,其中type最为重要,其决定了区的作用,named里给出的类型有:

      • master 权威区,每个dns必须有一个master权威区,用于权威应答,有dns域名解析请求过来都会经过权威区,由权威区进行应答。

      • slave 是权威区的一个复制,他可以做一些例如TSIG鉴权等相关的工作以减少master的负载。

      • stub 类似于slave类型的区,只不过他只拷贝master的NS记录,他并非标准的DNS配置,仅用于bind配置。

      • mirror也类似与slave区,只不过目前还处于试验阶段,并不建议用于并发比较大的情况。主要用于DNSSEC开启情况下的应答。

      • static-stub 类似与stub类型,一般存放一些static类型的配置,一般用于递归应答,如果是非递归类型的请求进入该区则会返回REFUSED。

      • forward 转发区,用于转发域名解析请求。其中会配置forwarders列表才会进行转发,有first/only两种转发模式。

      • hint 用于初始化根域名服务器列表。如果未定义,则会查找默认的根域名服务器列表。

      • redirect 重定向区,每个视图下只允许有一个重定向区。其主要作用是当正常的解析返回NXDOMAIN的时候提供应答。

      • delegation-only 代理区,设置强制代理*域名例如com,cn等,任何权威区的应答都会返回NXDOMAIN。并且对于转发解析请求无效。

  • RESOURCE RECORDS

    • 资源是由:owner name(资源的名字)、type(资源类型)、TTL(缓存过期时间)、class(dns协议族,例如IN)、RDATA(资源记录值,不同的资源type资源记录值格式不同)组成。

    常用的资源类型type:

      * A ipv4资源类型,资源格式:  
      owner ttl class A 192.168.0.1
    
      * AAAA ipv6资源类型,资源格式:  
      owner ttl class AAAA 2001::1
    
      * CNAME 域名指向其他的域名,相当于转发。资源格式:  
      owner ttl class CNAME cname.zone.com
    
      * MX 邮件域名类型,资源格式:  
      owner ttl class MX 10 mail1.zone.com,其中10表示优先级。
    
      * HINFO 表示主机信息,主要用于显示主机的软件硬件以及环境信息。值为文本类型格式:  
      owner ttl class HINFO "cpu_type os_type"
    
      * NS 用于指向那个DNS服务器进行解析,也就是解析源头。格式:  
      owner ttl IN NS name_server_domain_name
    
      * NAPTR 权威指针,统一资源标识符URI的一种定义格式。
    
      * PTR 用于域名反解析,格式:  
      owner ttl class PTR target_domain_name,  
      例如:1.0.0.10.in-addr.arpa 3600 IN PTR r1.zone.com
    
      * SRV 记录DNS服务器提供那些服务信息,格式:  
      service.protocol.name ttl class SRV 0 0 389 dc1.example.microsoft.com
      
      * TXT 文本资源记录,其值为文本。格式:  
      owner ttl class TXT txt_string
    

    常用的资源分类(class)

      * IN 表示Internet互联网,一般都是IN类型的。
    
      * CH Chaosnet,是一个LAN口协议,在19世纪70年代创建,目前用途较少。但是在bind的内置区内在使用。
    
      * HS 也是很少用的class,它是用于共享系统数据信息,例如users、groups、printer等等。  
    

    TTL:表示该资源在缓存中保留的时间,单位是秒。

    未完待续。。。