DNS服务和BIND

名字解析介绍和DNS

当前TCP/IP网络中的设备之间进行通信,是利用和依赖于IP地址实现的,但数字形式的IP地址是很难记忆的,当网络设备众多,想要记住每个设备的IP地址,可以说是“不可能完成的任务”。那么如何解决这一难题呢?我们可以把每个网络设备起一个友好的名称:如:www.magedu.org,这种由文字组成的名称,显而易见更容易记忆,但是计算机不会理解这种名称的,我们可以利用一种名字解析服务将名称转化成IP地址,从而我们就可以实现主机和IP的解耦,即:当主机变化时,只需要修改名称服务即可,用户仍可以通过原有的名称进行访问而不受影响

   DNS:domain  name system域名系统,应用层协议,时互联网的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,基于C/S架构,服务端:53/udp,53/tcp

   BIND:bekerly internet name domain,由ISC提供地DNS软件实现DNS域名结构

    根域:全球根服务器节点只有13个,10个美国,1个荷兰,一个瑞典,一个日本   

    一级域名:Top  level domain:tld

    三类:组织域,国家域(.cn,.hk,.tw,.ca),反向域

    com,edu,mil,gov,net,org,int,arpa

    二级域名:magedu.com

    三级域名:study.magedu.com

    最多可达到127级域名

    ICANN互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名以及国家和地区顶级域名系统地管理,以及根服务器系统地管理

    DNS查询类型

      递归查询:一般客户机和本地地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外地DNS服务器发出查询请求,得到最终地肯定或否定地结果后转交给客户机,此查询地源和目标保持不变,为了查询结果只需要发送一次查询

      迭代查询:一般情况下,本地的DNS服务器向其它DNS服务器的查询属于迭代查询,若对方不能返回权威的结果,则它会向下一个DNS服务器(参阅前一个DNS服务器返回的结果)再次发起进行查询,直到返回查询的结果为止,此查询的源不变,但查询的目标的不断变化,为查询结果一般需要发起多次查询

    名称服务器

      name server,域内负责解析本域内的名称的DNS服务器

      IPv4的根名称服务器:全球共13个负责解析根域的DNS服务器

      IPv6的根名称服务器:全球25个,中国1主3从

    解析类型:

     FQDN----》IP 正向解析

     IP-----》FQDN 反向解析

    注意:正反解析式两个不同的名称空间

   完整的查询请求经过的流程

     client -------> hosts文件-------->client  DNS  service   local cache ----> DNS  server(recursion递归) ------> DNS  server  cache ------>   DNS iteration(迭代) ---> 根----->顶级域名DNS  ------->  二级域名DNS

    

  DNS服务器的类型

    主DNS服务器

    从DNS服务器

    缓存DNS服务器(转发器)

  主DNS服务器

    管理和维护负责解析的域内解析库的服务器

  从DNS服务器

    从主服务器或从服务器”复制“(区域传输)解析库脚本

      序列号:接续库版本号,主服务器解析库变化时,其序列递增

      刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔

      重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔

      过期时长:从服务器联系不到主服务器时,多久后停止服务

      通知机制:主服务器解析库变化时,会主动通知从服务器

  区域传输

      完全传输:传送整个解析库

      增量传输:传递解析库变化时的那部分内容

    解析形式:正向:FQDN  ---->  IP 

         反向:IP---->  FQDN

  解析答案

     肯定答案:存在对应的查询结果

     定答案:请求的条目不存在等原因导致无法返回结果

     权威答案:直接由存有此查询结果的DNS服务器(权威服务器)返回的答案

     非权威答案:由其他非权威服务器返回的查询答案

  各种资源记录

    区域解析库:由众多资源记录(Resource record)组成

    记录类型:A,AAAA,PTR,SOA,NS,CNAME,MX

      SOA:start of authority,起始授权记录:一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录

      A:internet address,作用,FQDN------>IP

      AAAA:FQDN----->IPv6

      PTR:pointer,IP----->FQDN

      NS:name server,专用于表明当前区域的DNS服务器

      CNAME:canonical name,别名记录

      MX:mail exchanger,邮件交换器

      TXT:对域名进行标识喝说明的一种方式,一般做验证记录时会使用此项,如:SPF(反垃圾邮件)记录,https验证等

   资源记录定义的

     name TTL IN rr_type value

     注意:

      1.TTL可从全局继承

      2.使用“@”符号可用于引用当前区域的域名

      3.同一个名字可以通过多条记录定义不同的值,此时DNS服务器会以轮询方式响应

      4.同一个值也可能有多个不同的定义名字,通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机

   SOA记录

     name:当前区域的名字,例如:”xiaohong.org“

     value:有多部份组成

   注意:1.当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字

      2.当前区域管理员的邮箱地址,但地址中不能使用@符号,一般用”.“代替
      3.主从服务区域传输相关定义以及否定的答案的统一的TTL

   NS记录
     name:当前区域的名字

     value:当前区域的某DNS服务器的名字,例如:ns.xiaohong.org

     注意:

       1.相邻的两个资源记录的name相同时,后续的可省略

       2.对NS记录而言,任何一个NS记录后面的服务器名字,都应该在后续有一个A记录

       3.一个区域可以有多个NS记录

   MX记录

    name:当前区域的名字

    value:当前区域的某邮件服务器(smtp)服务器的主机名

    注意:一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级,数字越小优先级越高

   A记录

     name:某主机的FQDN,例如:www.xiaohong.org

     value:主机名对应主机的IP地址

    避免用户写错名称时给错误答案,可通过域名进行解析至某特定地址

   AAAA记录

     name:FQDN

     value:IPv6

   PTR记录

      name:IP,有特定的格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1:而特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.

      value:FQDN

     注意:网络地址及后缀可省略,主机地址依然需要反着写

   CNAME别名记录

      name:别名的FQDN

      value:真正名字的FQDN

   子域授权

     每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权,类似根域授权tld

     glue record:粘合记录,父域授权子域的记录

   BIND包相关文件

     BIND主程序:/usr/sbin/named

     服务脚本喝unit名称:/etc/rc.d/init.d/named,/usr/lib/systemd/system/named.server

     主配置文件:/etc/named.conf,/etc/named.rfc1912.zones,/etc/rndc.key

     管理工具:/usr/sbin/rndc:remote name domain controller,默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程,提供辅助性的管理功能;953/TCP

     解析库文件:/var/named/ZONE_NAME.ZONE

     注意:一台物理服务器可同时为多个区域提供解析

        必须要有根区域文件,named.ca

        应该有两个(如果包括IPV6的,应该更多)实现localhost和本地回环地址的解析库

    主配置文件:

      全局配置:options{};

      日志子系统配置:logging{};

      区域定义:本机能够为哪些zone进行解析,就要定义哪些zone

      zone“zone_name” IN {};

     注意:任务服务器程序如果期望能够通过网络被其他主机访问,至少应该监听在一个能与外部主机通信的IP地址上

        缓存名称服务器的配置,监听外部地址即可

        dnssec:建议关闭dnssec,设为no

    主配置文件语法检查:named-checkconf

    解析库文件语法检查:named-checkzone  “xiaohong.org” /var/named/xiaohong.org.zone

    配置生效:

      rndc reload

      systemctl reload named

      service named reload

    测试和管理工具

      dig命令:只用于测试dns系统,不会拆线呢hosts文件进行解析

      nslookup:可以支持交互和非交互式两种方式执行

      rndc:利用rndc工具可以实现管理DNS功能

      rndc:监听端口:953/tcp

      选项:reload  刷新主配置文件和区域解析库文件

         status  查看状态

   启用DNS客户端缓存功能

     在高并发的服务器场景中,对DNS服务器查询性能有较高的要求,如果在客户端启用DNS缓存功能,可以大幅减轻DNS服务器的压力,同时也能提高DNS客户端名称解析速度

     减少DNS服务器服务器压力,提高DNS查询速度

      软件:nscd

   实现反向解析区域:

    反向区域:即将IP方向解析为FQDN 

    区域名称:网络地址反写.in-addr.arpa

    注意:不需要MX,以PTR记录为主

  实现从服务器

    只有一台主DNS服务器,存在单节点失败的问题,可以建立主DNS服务器的备份服务器,即从服务器来实现DNS服务器的容错机制,从服务器可以自动和主服务器进行单向的数据同步,从而和主DNS服务器一样,也可以对外提供查询服务,但从服务器不提供数据更新服务

    DNS从服务器

      1.应该为一台独立的名称服务器

      2.主服务器的区域解析库文件中必须有一条NS记录指向从服务器

      3.从服务器只需要定义区域,而无需提供解析文件,解析库文件应该放置于/var/named/slaves/目录中

      4.主服务器得允许从服务器作区域传送

      5.主从服务器得版本应该保持一致,可通过NTP进行

      6.bind程序得版本应该保持一致,否则,应该从高,主低

  

  子域委派授权

    将子域委派给其他主机管理,实现分布式DNS数据库

  

  实现DNS转发

    利用DNS转发,可以将用户的DNS请求,转发至指定的DNS服务,而非默认的DNS的根DNS服务器,并将指定的服务器查询的返回结果进行缓存,提高效率

   注意:1.被转发的服务器需要能够为请求者做递归,否则转发请求不予进行

      2.在/etc/named.conf的全局配置块中,关闭dnssec功能

    

  实现智能DNS

    GSLB:global server load balance:全局服务负载均衡

    gslb:是对服务器的链路进行总和判断来决定由那个地点的服务器提供服务,实现异地服务器群服务质量的保证

    gslb:主要目的是在整个网络范围内将用户的请求定向到最近的节点(或者区域)

    gslb分为基于DNS实现,基于重定向实现,基于路由协议实现,其中最通用的是基于DNS解析方式

    

  CDN(content delivery network)内部分发网络

  CDN工作原理

    1.用户向浏览器输入www.a.con这个域名,浏览器第一次发现本地没有DNS缓存,则向网站的DNS服务器请求

    2.网站的DNS域名解析器设置了CNAME,指向了www.a.tacdn.com请求指向了CDN网络中的智能DNS负载均衡系统

    3.智能DNS负载均衡系统解析域名,把对用户响应速度最快的IP节点返回给用户

    4.用户向该IP节点(CDN服务器)发出请求

    5.由于是第一次访问,CDN服务器会通过cache内部专用DNS解析得到此域名的原web站点IP,向原站点服务器发起请求,并在CDN服务器上缓存内容

    6.请求结果发送给用户

   CDN服务商:

    阿里,腾讯,蓝汛,网宿,帝联

    智能DNS:dnspod,dns.la

   

  bind有四个内置的ACL

    none:没有一个主机

    any:任意主机

    localhost:本机

    localnet:本机的IP同掩码运算后得到的网络地址

  访问控制的指令:

    allow-query{};:允许查询的主机,白名单

    allow-transfer{};:允许区域传送的主机:白名单

    allow-recursion{};:允许递归的主机建议全局使用

    allow-update{};:允许更新区域数据库中的内容

    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

     

posted @   家购诗  阅读(52)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示