dns是什么意思(了解DNS的基础知识)
DNS(域名系统),也称为域名系统,是互联网的一项服务。本质上是一个分布式数据库,域名和IP相互映射。有了它,我们可以更方便地通过域名访问互联网。
DNS具有以下特征:
分布式的
支持TCP和UDP,常用端口为53。
每个级别域名的长度限制为63。
总域名长度限制为253
那么,什么情况下使用TCP和UDP呢?
最早的时候,DNS中UDP消息的更大大小是512字节,所以当一个响应大小超过512(返回的信息太多)时,DNS服务就会使用TCP协议进行传输。后来,DNS协议扩展了自己的UDP协议。当DNS客户端发送查询请求时,它可以指定它可以接收超过512字节的UDP数据包。在这种情况下,DNS仍将使用UDP协议。
分层数据库结构
DNS的结构和Linux文件系统很像,像一棵倒排的树。以站长之家的域名为例:
顶部。是根域名,后面是顶级域名com,后面是站长首页域名chinaz等等。使用域名的时候,从下往上走。S.tool.chinaz是一个完整的域名,www.chinaz也是。
设计如此复杂的树结构的原因是为了防止名称冲突。这样的树形结构当然可以存储在一台机器上,但是在现实世界中,完整的域名有很多,每天都有大量的域名添加和删除,所以单机的存储性能是不小的挑战。另外,集中管理还有一个缺点,就是管理不够灵活。想象一下,每次添加或删除域名都要向中央数据库申请,这有多麻烦。所以现实中的DNS就是分布式存储。
根域名服务器只管理顶级域,把每个顶级域的管理委托给每个顶级域,所以当你想申请com下的二级域名的时候,找com域名注册中心就可以了。比如上图中你申请了chinaz的二级域名,从chinaz往下更远的域名就归你管理了。当您管理chinaz的子域时,您可以建立自己的名称服务器,并将chinaz的管理委托给您自己的名称服务器。com注册中心。自建和非自建名称服务器的结构图如下:
一般来说,有条件就不要自建DNS,因为维护一个高可用的DNS并不容易。据我所知,有两种情况你需要建立自己的域名服务器:
设置内部DNS。公司内部机器很多,通过IP互相访问太乱了。此时,您可以设置一个内部名称服务器,允许内部服务器通过域名相互通信。
对公司域名厂商提供的nameserver性能不满意。虽然顶级域名注册商都有自己的名称服务器,但是注册商提供的名称服务器并不专业,在性能和稳定性上无法满足企业的需求。这时候企业就需要组建自己的高性能名称服务器,比如增加智能解析功能,让不同地域的用户访问最近的IP,从而提高服务质量。
总结一下DNS的分布式管理,当一个域被委托给一个名称服务器时,这个域下的管理权就交给了这个名称服务器。这种设计一方面解决了存储压力,另一方面提高了域名管理的灵活性(这种结构很类似于Linux文件系统,可以将任意子目录挂载到另一个磁盘,其下的子目录可以连续挂载)。
一级域名
com这样的顶级域名,ICANN严格控制,是不允许随便创建的。顶级域名分为两类:
generictop级别域
国家顶级域名
常见的顶级域名如。com,。组织,。edu等。、以及国家顶级域名,如。cn在中国和。我们在美国。一般公司申请公共域名时,如果是跨国产品,应选择通用顶级域名;如果没有跨国业务,看自己的喜好(可以比较一下各个顶级域名的服务和稳定性再做选择)。以下是一些热门顶级域名。参见 *** 了解完整的顶级域名。
我
Me顶级域名其实是黑山的国家域名,但是申请个人发展,所以很多个人博主都用它作为自己的博客域名(这个博客也是这么来的~)
超正析象管
很多开源项目经常使用io作为顶级域名,也就是国家域名。因为io和计算机中输入/输出的缩写一样,也和计算机的第二机制10很像,给人一种极客的感觉。与相比。com域名,下面有很多资源和更多选择。io。
DNS解析过程
说完了DNS的基本概念,再来说说DNS的解析过程。当我们通过浏览器或应用程序访问互联网时,我们会首先执行DNS解析过程。标准的glibc提供了libresolv.so.2动态库,我们的应用程序使用它进行域名解析(也称为解析)。它还提供了一个配置文件/etc/nsswitch.conf来控制解析行为。配置文件中最关键的一行是:
hosts:filesdn *** yhostname它决定了解析的顺序。默认情况下,首先搜索主机文件,如果不匹配,则执行DNS解析。默认解析过程如下:
上图主要描述了客户端的解析过程。我们可以看到最重要的是第四步是请求本地DNS服务器进行解析。它会根据本地DNS服务器配置向递归解析服务器发送解析请求(什么是递归解析服务器后面会介绍),本地DNS服务器配置在/etc/resolv.conf,我们来看看服务器的解析过程:
让我们分析一下解析过程:
客户端向本地DNS服务器(递归解析服务器)发送请求以解析tool.chinaz域名。
本地dns服务器检查缓存,是否缓存了tool.chinaz域名,如果是,直接返回给客户端;
如果不执行下一步
本地dns服务器向根域名服务器发送请求,以查询com顶级域的域名服务器地址。
获取com域名的IP,然后向com名称服务器发送请求,获取chinaz域名的名称服务器地址。
继续请求chinaz的名称服务器获取工具域名的地址,最终获取tool.chinaz的IP。本地dns服务器缓存该结果,以便下一个查询快速返回。
本地dns服务器将结果返回给客户端。
递归解析服务器vs权威域名服务器
我们在解析过程中发现了两种类型的DNS服务器。客户端直接访问递归解析服务器,这也是整个解析过程中最忙的。它的查询步骤是递归的,从根域名服务器到目标域名。
递归解析服务器通过请求一级权威域名服务器获得下一个目标的地址,直到找到目标域名的权威域名服务器。
简单来说:递归解析服务器负责解析域名,权威域名服务器负责存储域名记录。
递归服务器一般由ISP提供。此外,还有一些知名的公共递归服务器,如谷歌的8.8.8.8、联通的114、BAT等,都推出了公共递归服务器。然而,更好的性能应该是由您的ISP提供的,但可能会有DNS劫持。
躲藏
由于整个解析过程非常复杂,DNS通过缓存技术实现了服务的健壮性。当递归域名服务器在tool.chianaz解析域名,再次收到tool.chinaz查询时,不会再次经历递归解析过程,而是直接返回上次解析结果的缓存。并且是分层缓存的,也就是说,当收到下一个来自www.chinaz的查询时,因为这个递归解析服务器已经知道了chinaz的权威名称服务器,所以只需要再向chinaz名称服务器发送一个查询www的请求。
根域名服务器递归解析服务器如何知道根域名服务器的地址?根域名服务器的地址是固定的。目前,全球共有13个根域名解析服务器,这13条记录在递归解析服务器中持续存在:
为什么根域名服务器只有13个?负载均衡不是应该尽量多吗?之前已经说过DNS协议使用UDP查询。由于能够保证性能的UDP查询的更大长度是512字节,根服务器的数量只能限制在13个,每个服务器应该使用字母表中的单个字母名称,这样根域名服务器的所有数据就可以包含在一个512字节的UDP包中。
智能分析
智能解析是指当一个域名对应多个IP时,当你查询这个域名的IP时,会返回离你最近的IP。
因为国内不同运营商之间的带宽很低,电信用户访问联通的IP是一场灾难,智能DNS解析可以解决这个问题。
智能解析依赖于EDNS协议,这是google起草的一个扩展DNS协议。修改比较简单,就是在DNS包中增加了源客户端IP,这样nameserver就可以根据客户端IP返回离客户端更近的服务器IP。
中国对EDNS的最新支持是DNSPod,这是一家在中国很受欢迎的域名解析制造商。很多公司会用DNSPod来加速域名,而且已经被鹅厂收购了。
域名注册商
一般我们要注册域名的时候,都需要找域名注册商。例如,如果我想注册hello,那么我需要找到一个com域名注册商来注册hello域名。的域名注册商不止一个。而这些域名注册商也从ICANN那里拿到了注册权。查看如何申请成为. com域名注册商。
那么,域名注册商和权威域名解析服务器是什么关系呢?
域名注册商将建立自己的权威域名解析服务器。比如你在下申请二级域名。在狗爸爸上的com,不需要搭建名称服务器,直接在godaddy控制中心管理你的域名就可以了。原因是默认情况下,您的新域名的权威域名服务器是由域名注册商提供的。当然你也可以改,比如从godaddy申请的海外域名,把权威域名服务器改成DNSPod。一方面可以加快国内的解析速度,另一方面可以享受DNSPod提供的智能解析功能。
使用bind构建域名解析服务器
因为网上有那么多介绍bind构造的文章,这里就不赘述了。喜欢做的朋友可以在网上搜一下构建教程,一步一步的构建一个本地名称服务器,玩得开心。下面主要介绍一下bind的配置文件。
bind的配置文件分为两部分:bind配置文件和zone配置文件。
绑定配置文件尤优资源 ***
绑定配置文件位于/etc/named.conf,主要负责绑定功能的配置,如区域路径、日志、安全、主从配置等。
最重要的是添加zone的配置,指定zone的配置文件。递归打开递归解析功能。如果为否,则该绑定服务只能用作权威解析服务。当你的bind服务对外开放时,会有安全风险。如果你防御不当,你的域名服务器就会被黑客当成肉鸡。
区域配置文件
区域的配置文件在绑定配置文件中指定。下图显示了一个简单的区域配置:
区域的配置是名称服务器的核心配置。它指定了DNS资源记录,如SOA、A、CNAME、AAAA等。网上各种记录的概念太多了,这里就不赘述了。主要谈谈SOA和CNAME的作用。
SOA记录
SOA记录指示该域名的权威解析服务器地址。上面已经提到了权威解析服务器和递归解析服务器之间的区别。当所有递归解析服务器都有缓存而没有你的域名解析时,他们会返回源请求这个域名的SOA记录,也叫权威解析记录。
CNAME
CNAME的概念就像一个别名,它的处理逻辑也是如此。当服务器执行resloving时,它发现这个名字是一个CNAME,它将改为查询这个CNAME的A记录。一般来说,所有可以用CNAME的地方,都可以用A记录来代替,那为什么要发明CNAME这种东西呢?让多个域名指向同一个IP是一种快捷的方式,这样当更底层的CNAME对应的IP发生变化时,上层的CNAME不需要做任何改变。就像我们代码中的硬代码一样,我们总是把这些硬代码去掉,用一个变量来表示,这样当这个变量发生变化时,我们只需要修改一个地方。
配置完成后,可以使用named-checkconf和named-checkzone来检查我们的配置文件是否有问题,然后就可以启动bind服务了:
$>servicenamedstartRedirectingto&nb友优资源网sp;/bin/systemctlrestartnamed.service让我们使用netstat -ntlp来检查服务是否已启动:
端口5已经启动,我们来测试一下效果。dig用于解析www.hello域名,127.0.0.1用作递归解析服务器。
我们看到,dig的结果是我们的配置文件中配置的1.2.3.4。DNS已经完成了使命,根据域名获得了IP,但是我们这里用来演示的IP明显是假IP:)
使用DNS实现负载均衡
给一个域名添加多条A记录,解析时会通过轮询返回随机的一条,流量会被平均分类到多条A记录中。
wwwINA1.2.3.4wwwINA1.2.3.5在复制代码上面的配置时,我们向www域添加了两条A记录。这种做法叫做多宿主机,其作用是:当我们请求域名服务器解析www.hello的域名时,返回的IP会在两个IP之间轮换(默认行为,有些智能DNS会根据IP判断返回一个靠近客户端的IP,距离远近请搜索DNS智能解析)。
实际上,每次DNS解析一个请求,nameserver都会返回所有的IP。按照上面的配置,它会将1.2.3.4和1.2.3.5返回给客户端。那么它是如何在悠游资源网中实现RR的呢?名字只是服务器每次返回的IP序列不一样,客户端会使用响应中的之一个IP来发送请求。
DNS负载平衡与LVS专业负载平衡
与专业的负载均衡工具LVS相比,DNS层的负载均衡具有以下特点:
实现非常简单。
默认只能由RR调度。
DNS后端服务没有运行状况检查。
DNS恢复需要很长时间(DNS服务之间有缓存)
可以加载的RSS数量有限(受DNS响应数据包大小的限制)
在实际场景中,还需要根据需求选择相应的负载均衡策略。
子域授权
在我们从hello申请了二级域名后。com域名,有一天我们公司扩张,需要拆分A、B两个事业部,公司给他们分配了三级域名a.hello和b.hello。域名结构如下:
经过一段时间的发展,A部门和B部门内部业务过多,需要频繁为新产品申请域名。这时候他们要建立自己的namserver,需要把相应的域名管理权交给上一级的自己。他们的预期结构如下:
注意之一阶段和第二阶段的区别:之一阶段,A部门要申请a.hello下的子域名,需要向上级申请,整个a.hello域的管理在总公司;第二阶段,A部门先搭建自己的名称服务器,然后总行将a.hello域名的管理权交给自建的名称服务器。这种管理权的转移称为子域授权。
子域授权分为两个操作:
部门建立自己的名称服务器,并在区域配置文件中指定a.hello的权威解析服务器作为自己的名称服务器地址。
在总公司的名称服务器上增加一条NS记录,将a.hello域授权给a部门的名称服务器
我们谈到的用bind构建域名解析服务器的之一步,只要在区域配置文件中指定了SOA记录:
@INSOAns.a.helloadmin.a.hello.(……)复制代码其次,在hello域的名称服务器上添加一条NS记录:
a.helloINNSns.a.hellons.a.helloINAxx.xx.xx.xx(自建nameserver的IP)复制代码这样解析xx.a.hello域名时,hello域名服务器发现配置中有NS记录,会继续递归向下解析。
DNS调试工具
OPS常用的DNS调试工具有:host、nslookup、dig
这三个命令都属于bind-utils包,也就是bind工具集,复杂度和功能依次递增。man手册和网上有太多关于它们使用的教程。下面是对dig命令输出的简要分析:
Dig参数多,功能多。详细的我们自己用吧。
其他的
DNS放大攻击
DNS放大攻击是DoS攻击的一种,利用大量流量占用目标机器的带宽,使目标机器拒绝连接正常用户的请求并挂断。
思考
正常的流量攻击,黑客机建立大量对目标机的请求-响应,但问题是需要大量的黑客机。因为服务器的带宽一般比家庭 *** 的带宽大很多,如果把我们自己的家庭电脑作为黑客机器,在目标电脑的带宽还没满之前,我们的带宽就已经超载了。
原则
递归DNS解析的过程比较特殊。我们可以用几个字节的查询请求换取几百甚至几千个字节的解析响应(流量放大),大部分服务器不会去防御DNS服务器。那么黑客只要能伪装DNS查询包的源IP,就能实现DoS攻击,让DNS服务器向目标机器发送大量响应。
但是常用的DNS服务器是过滤攻击请求的,所以发现DNS服务器漏洞也是一个问题。我们有兴趣自行谷歌详细的扩增攻击方法。这里只是简单介绍一下:)
本文地址:百科生活频道 https://www.neebe.cn/live/949137.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!