DNS

Posted shenxm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DNS相关的知识,希望对你有一定的参考价值。

DNS服务介绍

	1》DNS(Domain Name System),其主要作用就是将主机名解析成ip地址的过程,完成了从域名(FQDN)到主机识别ip地址之间的转换。
	2》DNS是一个分布式、分层次的主机名管理架构,通过配置DNS服务器地址,主机不需要知道对应的ip地址就能通过主机名的形式访问互联网。
	3》DNS利用类似倒状树的目录结构将主机名的管理分配在不同层级的DNS服务器当中,经过分层管理,每一级DNS服务器负责部分域名信息,这就减轻了DNS服务器的负载,同时也方便记录的更新同步。
	4》DNS是一个网络服务,因此就有对应的端口,其端口号为53号。DNS查询的时候,是以udp这个较快速的数据传输协议来查询的,但万一没有方法查询到完整的信息时,就会再次以tcp这个协定来重新查询,DNS服务在启动的时候会同时开启tcp的53号端口和udp的53号端口。
	5》DNS在进行区域传输的时候使用TCP协议,其他时候则使用UDP协议。
	6》FQDN(Full Qualified Domain Name):完整主机名,是有主机名和域名构成。例如www.baidu.com当中,www就是web网站服务器的主机名,baidu.com就是域名,主机名和域名之间用实心点号来表示。
	7》DNS是基于c/s架构(多数基于套接字架构的C/S架构),对于每一级域名长度的限制是63个字符,域名总长度则不超过253个字符。
	8》DNS系统记录的信息非常多,不过重点就两个:一个是记录服务器所在的NS(name server)标志,另一个是记录主机名对应的A(address)标志。

DNS的域名结构系统

	1》DNS的域名是倒状的树状结构,在最顶层的是一个根服务器,它主要负责顶级域名的管理,所谓的顶级域名如下所示:
		.com:用于公司、行号、企业、.gov:用于政府机构、.edu:用于教育机构、.mil:用于军事机构、.net:用于网络和通信机构
		.org:用于组织和机构、.cn:中国
		顶级域则负责其所对应的二级域名,接下来二级域名负责对应的主机名名称解析或者三级域名解析,以此类推。
	2》一级域名共分为三类,组织域、国家域和反响域,最多可以有127级域名。
	3》每一级的域名服务器只负责对应下级的域的管理,其中根节点是分布在世界各地的13台服务器组成,其中10台位于美国地区,另外3台设置于英国、瑞典和日本,在这13台根服务器当中有1台为根服务器放置在美国,其余12台均为辅根服务器,所有的根服务器均有美国政府授权的互联网域名与号码分配机构ICANN组织统一管理,负责全球互联网域名根服务器、域名体系和ip地址等的管理。
	4》基于udp的dns报文的最大限制为512byte,在这个报文中包含13台DNS服务器信息,占用了511byte,没有地方再放置第14台记录了,所以只有13台根,根本原因是因为协议限制。

DNS域名解析工作原理

	1》客户机提交域名解析请求,并将该请求发送给本地的域名服务器。
	2》当本地的域名服务器收到请求后,就先查询本地的缓存。如果有查询的DNS信息记录,则直接返回查询的结果。如果没有该记录,本地域名服务器就把请求发给根域名服务器。
	3》根域名服务器接收到请求后,再返回给本地域名服务器一个所查询域的顶级域名服务器的地址。
	4》本地服务器接收到顶级域名服务器地址后,再向返回的域名服务器发送请求。
	5》 接收到该查询请求的域名服务器查询其缓存和记录,如果有相关信息则返回客户机查询结果,否则通知给客户机下级的域名服务器的地址。
	6》本地域名服务器将查询请求发送给返回的DNS服务器。
	7》域名服务器返回本地服务器查询结果(如果该域名服务器不包含查询的DNS信息,查询过程将重复<6>、<7>步骤,直到返回解析信息或解析失败的回应)。
	8》 本地域名服务器将返回的结果保存到缓存,并且将结果返回给客户机。
	9》正向解析与反向解析
		1。正向解析
			正向解析是指域名到IP地址的解析过程。
		2。反向解析
			反向解析是从IP地址到域名的解析过程。反向解析的作用为服务器的身份验证
		3。正反向解析是两个不同名称空间,是两颗不同的解析树。
	10》DNS解析过程中的两种查询方式:
		1。递归查询:
			一般是客户机和服务器之间的查询,即只发送一起请求,其他的工作交由上层服务器去解决,然后最后一层一层的反馈到客户端。
		2。迭代查询:
			一般是DNS服务器与DNS服务器之间的方式,即最起初的DNS服务器负责发起请求,而其他涉及到的DNS服务器只负责响应即可,然后一直查找到目标DNS服务器,并将结果返回给客户端。
		3。DNS查询过程:
			DNS在查询的时候是以udp这个快速的数据传输协议来查询的,但是一旦没有办法查询到完整的信息时,就会再次以tcp协议来进行重新查询。
			因此DNS服务在启动的时候会同时开启udp和tcp的53号端口。
	11》一次完整的查询请求经过的流程:
		Client -->hosts文件 -->DNS Service Local Cache--> DNS Server (recursion,递归) --> Server Cache -->iteration( 迭代) -->  根-->  顶级域名DNS--> 二级域名DNS…
	12》解析答案:
		肯定答案:
		否定答案:请求的条目不存在等原因导致无法返回结果
		权威答案:
		非权威答案:

DNS服务器

	1》DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。
	2》DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。 
	3》域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。
	4》域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。
	5》DNS 服务器的类型:
		1。主DNS 服务器:
			管理和维护所负责解析的域内解析库的服务器。
		2。从DNS 服务器:
			从主DNS服务器或其他的从DNS服务器哪里“复制”(区域传输)解析库副本。
		3。缓存DNS 服务器:
			提高DNS的访问速度,实现快速解析,在安装完成DNS软件后,就已经实现了简单的缓存服务器,通常是在/etc/named.conf当中的forward only哪设定。
		4。转发器:
			通过区域传送,将所需要的域名解析传送给其他DNS服务器进行解析
		
	6》“通知”机制:
		主服务器解析库发生变化时,会主动通知从服务器
	7》子域授权:
		每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权。
	8》类似根域授权tld: 
		.com. IN  NS ns1.com.
		.com. IN NS ns2.com.
		ns1.com.  IN  A  2.2.2.1
		ns2.com. IN  A  2.2.2.2
	9》DNS服务器地址文件
		/etc/resolv.conf
		此文件内容就是dns服务器地址文件,只有在客户端中的此文件中添加DNS服务器地址,DNS服务器才能对启客户端起作用。
	10》DNS服务器地址配置
		有一个默认的DNS服务器地址配置文件的设置,存放在 /etc/resolv.conf
		vim /etc/resolv.conf
			nameserver 114.114.114.114
			nameserver 8.8.8.8

DNS服务程序

	DNS服务程序包有:bind和unbound
	以bind为例进行学习
	
	1》程序包:yum list all bind*
		bind:	服务器
		bind-libs:	与bind相关的库文件
		bind-utils: 	客户端相关命令文件
		bind-chroot:	bind主目录禁锢程序,centos6之后的系统已默认禁锢在/var/named/目录下
	
	2》配置文件
		rpm -ql bind :
			提供dns server程序、以及几个常用的测试程序。
			/etc/NetworkManager/dispatcher.d/13-named
			/etc/logrotate.d/named
			/etc/named
			/etc/named.conf
			/etc/named.iscdlv.key
			/etc/named.rfc1912.zones
			/etc/named.root.key
			/etc/portreserve/named
			/etc/rc.d/init.d/named
			/etc/rndc.conf
			/etc/rndc.key
			/etc/sysconfig/named
			/usr/lib64/bind
			/usr/sbin/arpaname
			/usr/sbin/ddns-confgen
			/usr/sbin/dnssec-dsfromkey
			/usr/sbin/dnssec-keyfromlabel
			/usr/sbin/dnssec-keygen
			/usr/sbin/dnssec-revoke
			/usr/sbin/dnssec-settime
			/usr/sbin/dnssec-signzone
			/usr/sbin/genrandom
			/usr/sbin/isc-hmac-fixup
			/usr/sbin/lwresd
			/usr/sbin/named
			/usr/sbin/named-checkconf
			/usr/sbin/named-checkzone
			/usr/sbin/named-compilezone
			/usr/sbin/named-journalprint
			/usr/sbin/nsec3hash
			/usr/sbin/rndc
			/usr/sbin/rndc-confgen
			/var/log/named.log
			/var/named
			/var/named/data
			/var/named/dynamic
			/var/named/named.ca:存放根服务器地址
			/var/named/named.empty
			/var/named/named.localhost
			/var/named/named.loopback
			/var/named/slaves
			/var/run/named
		rpm -ql bind-libs :
			被bind(服务器包)和bind-utils包中的程序共同用到的库文件。
			/usr/lib64/libbind9.so.80
			/usr/lib64/libbind9.so.80.0.4
			/usr/lib64/libdns.so.81
			/usr/lib64/libdns.so.81.4.1
			/usr/lib64/libisc.so.83
			/usr/lib64/libisc.so.83.0.3
			/usr/lib64/libisccc.so.80
			/usr/lib64/libisccc.so.80.0.0
			/usr/lib64/libisccfg.so.82
			/usr/lib64/libisccfg.so.82.0.1
			/usr/lib64/liblwres.so.80
			/usr/lib64/liblwres.so.80.0.2
		rpm -ql bind-utils :
			bind客户端程序集,例如dig,host,nslookup等
			/usr/bin/dig
			/usr/bin/host
			/usr/bin/nslookup
			/usr/bin/nsupdate
		rpm -ql bind-chroot :
			让named运行于jail(容器沙箱)模式下。
			/var/named/chroot
			/var/named/chroot/dev
			/var/named/chroot/dev/null
			/var/named/chroot/dev/random
			/var/named/chroot/dev/zero
			/var/named/chroot/etc
			/var/named/chroot/etc/localtime
			/var/named/chroot/etc/named
			/var/named/chroot/etc/named.conf
			/var/named/chroot/etc/pki
			/var/named/chroot/etc/pki/dnssec-keys
			/var/named/chroot/lib64
			/var/named/chroot/usr
			/var/named/chroot/usr/lib64
			/var/named/chroot/usr/lib64/bind
			/var/named/chroot/var
			/var/named/chroot/var/log
			/var/named/chroot/var/named
			/var/named/chroot/var/run
			/var/named/chroot/var/run/named
			/var/named/chroot/var/tmp
		rpm -q --script bind
	
	3》架设好dns服务器,需要进行两方面的配置
		bind本身的配置文件的配置:
			主要规范主机的设定、zone file的所在、权限的设定等。
		正反解数据库(zone file):
			记录主机名与ip对应。
	
	4》配置相关配置文件
		1。服务脚本:/etc/rc.d/init.d/named,/usr/lib/systemd/system/named.service
		2。主配置文件:/etc/named.conf, /etc/named.rfc1912.zones,/etc/rndc.key
		3。解析库文件目录:/var/named/
			注意:
				1>一台物理服务器可同时为多个区域提供解析
				2>必须要有根区域文件;named.ca
				3>应该有两个(如果包括ipv6 的,应该更多)实现localhost和本地回环地址的解析库
		4。/var/run/named:named这支程序执行时默认放置pid-file在此目录中
		5。主配置文件/etc/named.conf里的内容
			帮助:man named.conf
			1>全局配置:options {};
				options {
					listen-on port 53 { any; }; #监听的端口,即哪些主机可以进行访问解析,any表示所有。
				//	listen-on-v6 port 53 { ::1; };
					directory 	"/var/named"; #对应数据库文件的目录位置
					dump-file 	"/var/named/data/cache_dump.db";
				        statistics-file "/var/named/data/named_stats.txt";
				        memstatistics-file "/var/named/data/named_mem_stats.txt";
					allow-query     { any; }; #运行哪些主机请求查询,any表示所有。
					recursion yes; #将自己视为客户端的一种查询方式,实现的是递归查询
					forward  only ;  #只转发请求,不做解析,此时DNS服务器是一个缓冲服务器
					forwarders {
					} ;  #针对forward only 设置的转交给那个上层DNS进行解析,这里可以列出多个,每行一个并以分号结尾
					dnssec-enable yes; #缓存名称服务器的配置,监听外部地址即可,建议关闭dnssec设为no
					dnssec-validation yes;
					/* Path to ISC DLV key */
					bindkeys-file "/etc/named.iscdlv.key";
					managed-keys-directory "/var/named/dynamic";
				};
			2>日志子系统配置:logging {};
				logging {
				        channel default_debug {
				                file "data/named.run";
				                severity dynamic;
				        };
				};
			3>区域定义:
				本机能够为哪些zone进行解析,就要定义哪些zone,也就是定义由本机负责解析的区域,或转发的区域。
				zone "ZONE_NAME" IN {
					type {master|slave|hint|forward} ;
					file "ZONE_NAME.zone";
				};
				zone "IP网段的反向.in-addr.arpa"  IN {
					type {master|slave|hint|forward} ;
					file "IP网段.zone";
				};
					type:表示该zone类型,master是针对主DNS;slave是针对从DNS;hint是针对根;forward是针对转发域;除了根以为默认伟master
					file:表示该zone的文件名称
					ZONE_NAME:表示要解析的域名,正解时就为域名本身;反解时有固定的格式,格式为IP网段的反向.in-addr.arpa,如0.0.127.in-addr.arpa
			4>注意:
				1..任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上。
				2..大括号前后要有空格,每个地址之后必须以;结束,否则会语法错误。
				3..测试时建议关闭dnssec,需要时开启
				4..关闭仅允许本地查询:// allow-query  { localhost ; };
				
			5>主配置文件检查和生效命令
				主配置文件语法检查:
					named-checkconf
				主配置文件修改后的生效
					rndc status|reload ;service named reload
					service named restart ;systemctl restart named
		6。域名的解析库文件/var/named/ZNOE_NAME.zone,反向解析库文件/var/named/ip.zone。
			1。。一台DNS服务器可同时为多个区域提供解析
			2。。必须要有根区域解析库文件:centos上是named.ca文件
			3。。还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库。
				正向示例:/var/named/named.localhost
				反向示例:/var/named/named.loopback
			有关域名解析库文件的资源记录格式说明在前面有解释
			1>正向解析例子
				cat adc.com.zone 
				$TTL 1D
				@	        IN    SOA    dns1    admin.adc.com. (
									                           2017091901	; serial
														         1D	; refresh
									                                  1H	; retry
																1W	; expire
																3H )	; minimum
						           NS	     dns1
				dns1    2D	        A	  192.168.213.130
				websrv               A      192.168.213.130
				www                 CNAME       websrv
				
			2>反向解析例子
				cat 192.168.213.zone 
				$TTL 1D
				@               IN   SOA    dns1.adc.com.   admin.adc.com. ( 1 10m 2m 1h 3h )
						            NS    dns1
				107    		PTR   dns1.adc.com.
				106    		PTR   websrv.adc.com.
				
				注意:
					这里的左侧只用添加ip地址的最后一段,因为前面我们已经定义好了它的域213.168.192.in-addr.arpa,因此107就已经能够代表107.213.168.192,也就是代表了192.168.213.107了。
					不需要MX, 以PTR 记录为主。
			3>解析库文件语法检查:
				named-checkzone "adc.com" /var/named/adc.com.zone
	5》其他相关配文件
		/etc/hosts:最早的hostname 对应ip的档案。
		/etc/resolv.conf:这个很重要,就是isp的dns服务器ip记录处,记录的dns的ip最好不要超过2个。
		/etc/nsswitch.conf:这个是决定先要使用/etc/hosts还是使用/etc/resolv.conf的决定。

以上是关于DNS的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数