最新动态
Linux之DNS篇
2024-10-31 20:26
  1. DNS是Domain Name System的缩写,中文名为“域名系统”。在互联网中起着非常重要的作用。
  2. 它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。自从有了DNS我们去访问网站时就不会去记哪些晦涩的IP,就像现在我们访问百度一般都是输入www.baidu.com或者直接搜索百度,应该没有人会通过百度的IP地址去访问吧
  3. DNS使用的UDP的53端口号,当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
  4. DNS是工作在应用层的一个协议,用来管理域名和IP地址的映射关系的。

域名解析概述

域名解析就像我们初次去拜访一个人一样,我们要知道人家的门派号,然后根据地址去寻找。在Internet上只知道某台机器的域名还是不够的,还要有办法去找那台机器。寻找这台机器的任务由网上一种被称为域名服务器的设备来完成的,而完成这一任务的过程就称为域名解析。

Linux之DNS篇

域名解析过程

当一台机器a向其域名服务器A发出域名解析请求时,如果A可以解析,则将解析结果发给a,否则,,A将向其上级域名服务器B发出解析请求,如果B能解析,则将解析结果发给a,如果B无法解析,则将请求发个再上一级域名服务器C,如此下去,直至解析到为止。

DNS的工作过程

  1. 为了解析一个域名(www.baidu.com),应用程序会调用域名解析库函数,并将域名作为参数传入其中。

此解析库函数会提取本机所设置的上连DNS服务器地址,并向此地址发送一个域名解析请求。
上连DNS服务器接到域名解析请求后,在本机查询此域名,找到后将其对应的IP地址返回给解析库函数。
解析库函数接收到上连DNS服务器返回的信息后,将此信息返回给应用程序。

这里我们以scs.bupt.deu.cn域名为例子

  1. 为了解析,浏览器会调用域名解析库函数,并将域名作为参数传入其中。
  2. 此解析库函数会提取本机所设置的上连DNS服务器地址,并向此地址发送一域名解析请求。
  3. 上连DNS服务器接到域名解析请求后,在本机查找此域名,但是若没找到对应信息。
  4. 这时上连的DNS服务器就会求助于根DNS服务器(root-server.net)
  5. 然后请求就会逐级转发,顺序是cn的DNS服务器——edu.cn的DNS服务器——bupt.edu.cn的DNS服务器。(就是逐渐缩小范围)
  6. 由于bupt.edu.cn一定是管理scs.bupt.edu.cn的资源记录的DNS服务器,于是,bupt.edu.cn的DNS服务器会将所查询域名对应的IP地址返回给上一级。
  7. 这个IP地址会按照逆序依次回传,顺序是edu.cn的DNS服务器——cn的DNS服务器——根DNS服务器。
  8. 最后根DNS服务器将这个信息返回给上连DNS服务器。
  9. 上连DNS服务器收到结果后,首先会将这个结果缓存到本机,同时,将其回传给用户浏览器。

这里有点很重要那就是上连的DNS服务器在收到结果后,不仅会把结果返回给调用者,还会自己缓存起来。

迭代查询的前四步与递归查询一样。(自我感觉:迭代查询就类似反向代理,都是用户访问资源,通过代理服务器转发到其他服务器)
上连DNS服务器解析不到就会将请求转发到根服务器,但是根服务器会将请求再返回给上连服务器,并告诉上连服务器可以去找cn服务器,然后cn服务器就会去找他的好盆友edu.cn,edu再会去找bupt.edu.cn的服务器,而bupt.edu.cn知道scs.bupt.edu.cn的资源,所以拿到资源之后就交给上连DNS服务器。上连服务器拿到之后首先进行缓存,然后再个到用户的浏览器。

说到nslookup可能有些小伙伴不太熟悉这是干嘛的,nslookup是name server lookup的缩写,nslookup是用来查询DNS的。如你想知道百度的IP地址就可以使用nslookup。

// 如果你的linux系统里面没有nslookup命令则需要安装bind-utils软件包,这个软件包含有我们管理DNS的一些列命令,如host、dig、nslookup等

nslookup的两种模式

第一种交互模式

  • 在交互模式下,用户只需要执行一次nslookup,就可以向域名服务器进行请求查询

第二种非交互模式

  • 在非交互模式下,用户发起的查询请求是一次性的,下次查询需要再执行nslookup。
交互模式
非交互模式

域名解析的缓存

通过上面的例子我们知道的nslookup,也提到了上连服务器的缓存。这里我们就来说一下
细心的朋友可能发现nslookup的输出内容中有一行Non-authoritative answer的字样,这个就是和缓存相关的。

这里我们就来说一下关于DNS服务器的缓存

  • 每个DNS服务器都有一个高速缓存区,这里面存放着这台DNS服务器最近“路过”的域名–IP地址的映射关系,以及获得这些映射关系的查询出处。若下次再有人访问同一个域名,这台上连DNS服务器就不需要再发起递归或迭代查询了。
  • 现在又有一个问题那就是因为机器可能会出现故障,网站也会进行迁移,所以域名对应的IP地址会因此发生变化,这时就需要给DNS服务器的缓存设置一个期限,比如一天或几个小时。一旦超过期限DNS就不会信任这个域名,就会进行递归或迭代区查询。
  • 但是这样还是会有问题。假如我们12点整在DNS上缓存了www.baidu.com的域名解析,但是在12:03因为网站迁移修改了其对应的IP地址,这时正好有用户要访问,就会拿到已过期的IP地址
  • 之所以会出现Non-authoritative answer字样是因为DNS是从自己的缓存中提取的解析数据返回给用户的,给出这个字样是基于上面两个原因,Non-authoritative answer意思是非权威的。
授权与非授权

在DNS的世界里没有谁知道所有的答案,比如:用户要访问scs.butp.edu.cn这个IP地址,这里我们暂时将edu.cn称为A主机;bupt.edu.cn称为B主机。当用户访问时edu.cn的DNS服务器将butp.edu.cn的域名解析授权给B主机。只有B才会返回有关scs.butp.edu.cn域名解析,才是授权的;否则就是非授权。

一般情况下,一台DNS服务器从自身缓存中提取结果并返回给询问者,这个结果就是非授权的。

// nslookup包含上下两个部分

  • 上半部分: DNS服务器的信息
  • 下半部分: 域名解析信息

DNS世界里面的五元组分别是{DomainName、TimeToLive、Class、Type、Value}

  • DomainName(域名):指我们要查询的那个域名
  • TimeToLive(生存期限):表示此域名在各DNS服务器缓存中应保存的时长。
  • Class(类别):通常为IN,即Internet。另外还有CH(chaos)和HS(hesiod)两类,但目前几乎已经被淘汰了
  • Type(类型):指出这条记录的类型,包括8种,即SOA、A、MX、NS、CNAME、PTR、HINFO和TXT。
  • Value(值):针对不同类型,会有不同的值

DNS的八种类型

DNS的八种类型即Type的8个可选类型

  • SOA:start of Authority,授权起始。
  • A:IP地址
  • MX:邮件交换
  • MS:域名服务器
  • CNAME:别名,也叫规范名
  • HINFO:主机描述信息,包括CPU和OS等信息
  • PTR:指针,用于反向解析
  • TXT:其他一些文本信息
类型SOA

SOA,即Start Of Authority,表示授权起始。

  • Mail:管理员邮箱地址。
  • Serial:版本序号,格式一般为年月日次。
  • Refresh Slave:表示Slave的DNS服务器多久向Master的DNS服务器要一次更新数据。
  • Retry:在发起Refresh时,如果Slave连接不到Master,那么间隔多久进行一次连接尝试。
  • Expire:在发起Refresh时,如果Slave始终无法连接到Master,那么多久后放弃尝试。
  • 即TTL,表示外部DNS服务器如果要缓存本DNS服务器的授权数据,那么保存时限是多久。
类型A

// A,表示从域名解析到IP地址。此处用来展示其对应的IP地址信息,俗称“A记录”。

类型MX

// MX,是Mail eXchanger的缩写,即邮件交换。此类型和邮箱服务器设置有关,用来表示当前域名对应的邮箱服务器。当域名没有配置对应邮箱服务器,则MX为空

类型NS

// NS,即Name Server,表示给定域名下所包含的DNS服务器信息。

类型CNAME

// CNAME,即Canonical Name,也叫别名。如www.baidu.com就是www.a.shifen.com的别名

类型PTR

// PTR,即指针,用来表示反解信息,即从IP地址查询其对应域名的映射关系。

类型HINFO

// HINFO,会包含CPU和OS等信息。

类型TXT

// TXT,即文本信息,表示有关此域名的一些信息。

查看当前DNS的配置

进入调试模式,查看更多交互信息

// set d2是高级调试模式,会输出更多的信息

指定查询中默认的域名后缀

设置默认的域后缀,可以为我们的查询带来便捷

在交互模式下设置type

通过set querytype=[value],我们可以更改信息查询的类型。
默认情况下,nslookup是查询域名所对应的A记录,而当你想查询其对应的MX记录等信息时,就需要更改查询的类型了。
目前常用的type值如下

  • A:查看主机的IPv4地址
  • AAAA:查看主机的IPv6地址
  • ANY:查看关于主机域的所有信息
  • CNAME:查找与别名对应的正式名字
  • HINFO:查找主机的CPU与操作系统类型
  • MINFO:查找邮箱信息
  • MX:查找邮件交换信息
  • NS:查找主机域的域名服务器
  • PTR:查找与给定IP地址匹配的主机名
  • RP:查找域负责人记录
  • SOA:查找域内的SOA地址
  • UINFO:查找用户信息
    // 例如,针对MX类型的查询结果

给dig加个.

dig之批量查询

// dig可以从文件里面读取

化繁为简之-q
    以上就是本篇文章【Linux之DNS篇】的全部内容了,欢迎阅览 ! 文章地址:http://dfvalve.xrbh.cn/quote/1643.html 
     行业      资讯      企业新闻      行情      企业黄页      同类资讯      网站地图      返回首页 迅博思语资讯移动站 http://keant.xrbh.cn/ , 查看更多