zoukankan      html  css  js  c++  java
  • 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的决定。
    
  • 相关阅读:
    uni-app 轮播图
    uni-app 头部及底部导航
    Eapp 创建项目及简单应用
    nodeJS学习笔记 express获得GET和POST请求参数
    Promise 之基础详细介绍
    动态代理个人理解
    springboot实现日志记录
    调节 alert confirm prompt 的位置
    打印日志文件
    Java正则速成秘籍(三)之见招拆招篇
  • 原文地址:https://www.cnblogs.com/shenxm/p/8457435.html
Copyright © 2011-2022 走看看