DNS服务介绍

瘦欲@ 提交于 2019-12-02 14:32:25

DNS服务包

bind:目前使用最多的DNS管理软件包
rpm -ql bind
使用yum安装即可
配置文件介绍:
	/etc/named.conf		:主配置文件
	/etc/named.rfc1912.zones	:创建域建议写在此文件中
	
	/usr/sbin/named		:服务端主程序
	/usr/sbin/rndc		:管理DNS的准用工具,当然也可以使用系统的systemctl管理
	
	/var/log/named.log	:日志文件
	/var/named			:目录下存放DNS文件
	/var/named/named.ca	:根服务器信息的文件,安装DNS服务器都会有
	/var/named/slaves	:从DNS服务器在主服务器拉取过来的默认数据目录

DNS:Domain Name Service应用层协议

端口:53/udp,53/tcp
本地名称解析配置文件
/etc/hosts		:优先级最高,此文件定义后不再查找其他DNS服务器
IP HOSTNAME
192.168.40.5 | www.test.com

FQDN:DNS全称域名

www   . test  . com  .		
主机名 . 二级于 . 顶级域	最后的点为根域,平常书写时忽略了 
根域:.
一级域名:
	com:商业公司
	edu:教育行业
	mil:军事
	gov:政府
	org:开源
	int:国际组织
	arpa: 反向域
	分为三类:组织域、国家域(.cn,.hk,.tw...)、反向域
二级域名:为各公司可自定义
三级域名:可自定义
最多127级域名
ICNAA:互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名以及国家和地区顶级域名系统的管理,以及根服务器系统的管理
NDS服务器地址:
	114.114.114.114:电信对外提供的
	223.5.5.5:阿里对外提供的
	223.6.6.6:也是阿里的
	119.29.29.29:腾讯的
	8.8.8.8:美国谷歌的
	1.1.1.1:澳大利亚的
IPv4DNS服务器总共有13台根服务器,美国有十台,亚洲有一台在日本
IPv6DNS服务器总共有25台根服务器,中国有一台

whois工具

可查看域的信息,其中包括什么时候申请的,什么时候到期等信息
直接安装whois就行

DNS查询类型:

递归查询:本机客户端向离自己最近的DNS服务器发出请求解析,而最近的DNS服务器负责将结果返回给本机,这种查询叫递归
迭代查询:本机客户端向离自己最近的DNS服务器发出请求解析,DNS服务器向根域、顶级域一级一级查询时叫做迭代查询

解析类型:
FQDN --> IP		:正向解析
IP --> FQDN		:反向解析
注意:正反向解析是两个不同的名称空间,是两颗不同的解析树

DNS服务器类型

主DNS服务器
从DNS服务器
缓存DNS服务器(转发器)

主DNS服务器:管理和维护所负责解析的域内解析库的服务器
从DNS服务器:从主服务器或从服务器"复制"解析库副本
	序列号:解析库版本号,主服务器解析库变化时,其序列号递增
	刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
	重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
	过期时长:从服务器联系不到主服务器,多久后停止服务
	通知机制:主服务器解析库发生变化时,会主动通知从服务器

区域传送:
	完全传送 axfr:传送整个解析库
	增量传送 ixfr:仅传递解析库变化的那部分内容

区域类型:
	master	:主区域
	slave	:从区域
	hint	:提示区域
	forword	:准发区域

资源记录

区域解析库:有众多RR组成
	资源记录:Resource Record,RR
	记录类型:SOA,A,AAAA,PTR,NS,CNAME,MX

	SOA:start of authority,起始授权记录;一个区域解析库有且只能有一个SOA记录,必须位于解析库的第一条记录
		例:@       IN      SOA     dns1    admin.cheng.com. (
			@	:表示本域域名,
			dns1	:表示本域中的DNS服务器
			admin.cheng.com.	:邮件地址,正常邮件地址是admin@cheng.com.,但是DNS中@是特殊字符有特殊含义,所以用.代替@
					0		:DNS数据库的版本序列号,如果有主从服务器,这个数字需要人为修改,此序列号最常10位
					10H		:刷新间隔,从服务器到主服务拉取数据的间隔
					1H		:当拉取失败,重试拉取时间间隔
					2D		:当重试拉取时间超过此处定义的时间,从服务器上面的数据将失效,不再提供查询服务
					3H )	:当客户访问一个本机没有的域名时,将缓存,缓存时间为此处定义的时间,此时间之内客户在查询直接通过缓存返回没有此域名

	A:Internet address,正向解析,FQDN --> IPv4

	AAAA:FQDN --> IPv6

	PTR:pointeR,IP --> FQDN,反向解析

	NS:name server,专用于标明当前区域的DNS服务器
		例:@    IN      NS      dns1.cheng.com.
			有几条NS记录就有几个DNS服务器

	CNAME:别名记录
		www		CNAME	webser			:为www取别名
		webser	A		192.168.40.5	:别名对应的IP

	MX:邮件交换器
		cehng.com. IN   MX  10  mail		:需要先声明MX记录,10表示优先级,数字越小优先级越高
		@		   IN	MX	10	mail		:也可以这样写
		mail    IN      A       192.168.40.5	:然后定义A记录指定对应IP

	TXT:对域名进行标识说明的一种方式,一般做验证记录是会使用此项

泛域名解析:	
	@:在很多情况下访问网站的人一般不敲www,直接敲域名例如baidu.com,@本身就表示本域,所以为@添加一条A记录使得不敲www的用户也可以访问网站
		例:@	A	192.168.40.5		:在浏览器中哪怕不敲www也会进入此IP的网页

	*:如果有人敲错了FQDN,例如wwwwww.baidu.com,很显然没有这么多w的FQDN,但是依然会进入网站,因为*表示通配符,此处定义的*后面会自动补齐域名
		所以无论敲什么,只要后面是本机的域名都可以进入网站、
		例如:sdadasasfas.baidu.com:只要后面是baidu.com的域名,前面用*匹配是什么都行
		注意:*代替不了@
	
	$GENERATE 1-200 www$	A	192.168.40.$	:$表示引用前面定义的1-200,这样就不用手写www1..www200了。
		测试:dig www34.cheng.com
		显示效果:A记录为192.168.40.34这个IP,www后面跟的什么数字IP就是什么数字,因为都用$引用的

资源记录定义的格式:
	语法:zone_name [TTL] IN RR_type  value
	注意:
		TTL可从全局继承
		@可用于引用当前区域的名字
		同一个名字可以通过多条记录定义多个不同的值,此时DNS服务器会以轮询的方式响应
		同一个值也可能有多个不同的定义名字,通过多个不同的名字执行同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机

/etc/named.conf文件介绍:

定义每一条后面都需要加 ; 号,要不报错
options {		:其中有很多内容,挑主要的来说
	listen-on port 53 { localhost; };	:默认是127.0.0.1的地址,表示只给本地换回地址提供DNS服务,更改为localhost或#注释此行表示本机所有IP都能使用DNS服务
    listen-on-v6 port 53 { ::1; };		:IPv6,意思和上面相同
    directory       "/var/named";		:默认数据目录,此文件下面内容都会继承此处定义的目录,就不同写绝对路径了,相对此处定义的目录路径
	allow-query     { any; };			:为哪些主机提供准发服务,默认是localhost,更改为any表示为所有主机提供转发

}
logging {
	此处定义的内容是记录日志的级别
}
zone "." IN {			:. 表示根域信息
    type hint;			:hint根域
    file "named.ca";	:根域对应的文件,相对上面定义的路径
};

include "/etc/named.rfc1912.zones";	:建议自定义的DNS服务写在此文件中,里面有示例,可对照书写

转发服务器

注意:被转发的服务器需要能够为请求者做递归,否则转发请求不予进行
全局转发:对非本机所负责解析区域的请求,全转发给指定的服务器
	/etc/named.conf
	options {
		forward first|only;		选择其中之一
		forwarders { IP; };		指定转发服务器IP
	}
	first:当有请求解析时,查看本地缓存是否有请求者需要的内容,如果没有转发给指定服务器,如果指定服务器也没有请求者需要的内容,有本机负责迭代向根查询,最后返回请
		  求者需要的内容,如果指定服务器有请求者需要的内容,直接返回
	only:当有请求解析时,查看本地缓存是否有请求者需要的内容,如果没有转发给指定服务器,如果指定服务器也没有请求者需要的内容,有指定服务器迭代向根查询请求者需要的
		  内容,然后通过本机过桥返回,本机也将由缓存

特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高
	编辑区域文件/etc/named.rfc1912
		zone "zone_name" IN {
			type forward;			类型forward
			forward first|only;		选择其中之一
			forwarders { IP; };		指定转发服务器IP
		};
注意:需要关闭dnssec功能
	 dnssec-enable no;
     dnssec-validation no;

bind中的acl

bind中有四个内置的acl
	none:没有一个主机
	any:任意主机
	localhost:本机IP
	localnet:网段
注意:只能先定义后使用,因此一般定义在配置文件中,处于options前面

访问控制的指令:
	allow-query {};	:允许查询的主机,白名单
	allow-transfer {};	:允许传送的主机,白名单
	allow-recursion {};	:允许递归的主机,建议全局适用
	allow-update {};	:允许更新区域数据库中的内容
基础的安全相关的配置:
	acl:把一个或多个IP归并为一个集合,并通过一个统一的名称调用
	格式:
		acl acl_name {
			ip;
			192.168.40.5;
			net/prefix
			192.168.40.0/24;
		};

bind中的view:

CDN:内容分发网络,和DNS类似的技术
	服务商:蓝汛,网宿,帝联等
只能DNS
	dnspod
	dns.la
view:视图,实现只能DNS
	一个bind服务器可定义多个view,每个view中可定义一个zone
	每个view用来匹配一组客户端
	多个view内可能需要同一个区域进行解析,但是用不同的解析库文件
注意:
	一旦启用了view,所有的zone都只能定义在view中
	仅在允许递归请求的客户端所在view中定义根区域
	客户端请求到达时,是自上而下检查每个view所服务的客户端列表
格式:
	view view_name {
		match-clients { acl_name;};
		zone "cheng.com" {
			type master;
			file "cheng.com.zone.bj"
		};
		include "/etc/named.rfc1912.zones"
	};

rndc命令:

rndc --> rndc (953/tcp)
rndc command
	reload	:重新加载配置文件和区域解析库文件
	flush	:清空DNS服务器的所有缓存记录
	querylog:开启或关闭查询日志文件/var/log/messages
	reconfig:重新加载主配置文件
	trace [N]:不指定数字是递增一个debug日志记录级别,也可指定递增几个级别
	notrace	:将调试级别重置为0
	reload zonename	:重新加载解析库文件
	notify zonename	:重新对区域传送发送通知

编译功能不常用,需要准备各种文件等,这里没记,如果需要,再去看视频

上面所有的内容下边都有实验,主要看实验

实验1:
创建一个正向解析主DNS服务。注意细节,冒号不能少
首先修改主配置文件:
	vim /etc/named.conf		:这里只粘贴了修改过的内容
	options {
		listen-on port 53 { localhost; };	:本机所有IP都可使用DNS
		allow-query     { any; };			:为所有IP提供DNS转发
		 allow-transfer  { 192.168.40.7; };	:仅允许此处定义的IP从本机拉取区域文件,拒绝其他服务器
				这样才相对安全,如果不定义此项,任何一台服务器都可以做从服务器,都可以拉取区域文件,那么信息就全部泄露了
				如果有从服务器也必须在从服务器上的配置文件修改,内容不一样allow-transfer { none;};,意思是允许拉取区域文件的主机为空
	}
编辑区域文件/etc/named.rfc1912.zones添加如下内容
	vim /etc/named.rfc1912.zones	
	zone "cheng.com" IN {
    type master;
    file "cheng.com.zone";		:数据文件名称
    allow-update { none; };	
	};
创建数据文件/var/named/cheng.com.zone,此名字必须和区域文件中定义的名字相同
	vim /var/named/cheng.com.zone
	$TTL 86400
	@       IN      SOA     dns1    admin.cheng.com. (
									0		:DNS数据库的版本序列号,如果有主从服务器,这个数字需要人为修改
									10H		:刷新间隔,从服务器到主服务拉取数据的间隔
									1H		:当拉取失败,重试拉取时间间隔
									2D		:当重试拉取时间超过此处定义的时间,从服务器上面的数据将失效,不再提供查询服务
									3H )	:当客户访问一个本机没有的域名时,将缓存,缓存时间为此处定义的时间,此时间之内客户在查询直接通过缓存返回没有此域名
			IN      NS      dns1.cheng.com.
	dns1    IN      A       192.168.40.5
	www     IN      CNAME   webser
	webser  IN      A       192.168.40.5
	webser  IN      A       192.168.40.100
	webser  IN      A       192.168.40.200
	@       IN      A       192.168.40.5
	*       IN      A       192.168.40.5
	cehng.com. IN   MX  10  mail
	mail    IN      A       192.168.40.5
修改属性:
	手动编写的文件时root用户root组的,这样named用户没法修改访问
	chgrp named cheng.com.zone
	修改权限,手动写的其他用户是由读权限的,不安全,要修改
	chmod o-r cheng.com.zone
重启服务:建议使用rndc
	rndc reload
	systemctl restart named
检查:
	named-checkconf /etc/named.rfc1912.zones	:检查配置文件语法,格式
	named-checkzone cheng.com /var/named/cheng.com.zone		:检查cheng.com这个域的数据文件是否有错误
测试:将另一台主机的DNS地址设为上面定义的本机IP,然后ping www.baidu.com,查看是否能解析,能解析就说明配置没问题,通不通是网络的事,DNS只负责解析
	接着使用dig命令测试
		dig www.cheng.com
		dig -t NS cheng.com
		dig -t MX cheng.com

实验2:
创建一个反向解析主DNS服务。注意细节,冒号不能少
首先修改主配置文件:
	vim /etc/named.conf		:这里只粘贴了修改过的内容
	options {
		listen-on port 53 { localhost; };	:本机所有IP都可使用DNS
		allow-query     { any; };			:为所有IP提供DNS转发
		allow-transfer  { 192.168.40.7; };	:仅允许此处定义的IP从本机传输数据,变相的拒绝了其他服务器当从服务器
	}
编辑区域文件/etc/named.rfc1912.zones
	zone "40.168.192.in-addr.arpa" IN {		:注意此处是in-addr.arpa,不是ip-addr.arpa,在做实验时一直犯这个错误
    type master;
    file "192.168.40.zone";
    allow-update { none; };
	
	};
创建数据文件/var/named/192.168.40.zone
	$TTL 86400
	@       IN      SOA     dnsser  admin.cheng.com. ( 0 10H 30M 1D 3H )
			IN      NS      dnsser
	dnsser  IN      A       192.168.40.5
	5       IN      PTR     dnsser.cheng.com.
	5       IN      PTR     www.cheng.com.
	10      IN      PTR     study.cheng.com.
修改属性:
	手动编写的文件时root用户root组的,这样named用户没法修改访问
	chgrp named 192.168.40.zone
	修改权限,手动写的其他用户是由读权限的,不安全,要修改
	chmod o-r 192.168.40.zone
重启服务:建议使用rndc
	rndc reload
	systemctl restart named
检查:
	named-checkconf /etc/named.rfc1912.zones	:检查配置文件语法,格式
	named-checkzone 40.168.192.in-addr.arpa /var/named/192.168.40.zone

实验3:
创建一个从DNS服务器
首先修改主配置文件:
	vim /etc/named.conf		:这里只粘贴了修改过的内容
	options {
		listen-on port 53 { localhost; };	:本机所有IP都可使用DNS
		allow-query     { any; };			:为所有IP提供DNS转发
		allow-transfer	{ none; };			:不允许其他服务器经过从服务器拉取区域文件,none表示空
	}
编辑区域文件/etc/named.rfc1912.zones
	zone "cheng.com" IN {			:从DNS服务器应该和主服务器服务一个域名,要相同
    type slave;						:类型为slave表示本机是从服务器
    masters { 192.168.40.5; };		:指定主服务器为哪台,同步数据时找哪个主机
    file "slaves/cheng.com.zone";	:数据文件存放在/var/named/slaves目录下名字可自定义,从服务器存放数据文件的目录有一个要求:对named用户有读写权限。
	};
接着在主DNS服务器中数据文件内添加从服务器的NS记录和对应的A记录
	@		IN	NS	dns2	
	dns2	IN	A	192.168.40.7	:定义此条记录是为了主服务更改时,推送更改时知道谁是从服务器,没有此条只能从服务器主动拉取文件,主服务器就不能推送文件了
然后需要在客户端网卡配置文件中添加DNS记录
	[root@centos6 network-scripts]# cat ifcfg-eth0
	IPADDR=192.168.40.6
	PREFIX=24
	GATEWAY=192.168.40.1
	DNS1=192.168.40.5
	DNS2=192.168.40.7	:添加从服务器地址
测试:将主DNS服务器的网卡全部断开,使用dig命令测试是否会切换到从服务器

UDP53端口是用来提供查询数据的,UDP端口必须开放
TCP53端口是用来从服务器拉取主服务器区域文件的,主从复制

实验4:
子域的创建,本实验是不同主机上做子域
重复的步骤不写了,只写添加的
在主NDS服务器主域文件中添加NS记录。主域IP=192.168.40.5
vim /var/named/cheng.com.zone
	shanxi  IN      NS      dns3.cheng.com.		:前面的shanxi就是shanxi.cheng.com.,子域的名称
	dns3    IN      A       192.168.40.17		:定义哪台主机是子域,写上子域主机的IP
重启服务:
	rndc reload
	systemctl restart named
	
在子域DNS服务器上
首先修改主配置文件:
	vim /etc/named.conf		:这里只粘贴了修改过的内容
	options {
		listen-on port 53 { localhost; };	:本机所有IP都可使用DNS
		allow-query     { any; };			:为所有IP提供DNS转发
	};
编辑区域文件/etc/named.rfc1912.zones
	zone "shanxi.cheng.com" IN {
    type master;
    file "shanxi.cheng.com.zone";
	};
编辑数据库文件
	vim shanxi.cheng.com.zone 
	$TTL 86400
	@       IN      SOA     dns1    admin ( 0 1D 2H 2D 3H )
			IN      NS      dns1
	dns1    IN      A       192.168.40.17
	www     IN      A       192.168.40.17
注意文件属性,不对就修改
在其他服务器上做测试
	dig www.shanxi.cheng.com @192.168.40.5	:通过主域解析子域的地址,有就说明成功


实验5:
建立一个转发服务器
规划:40.5服务器cheng.com主服务器也为转发服务器
	  40.7服务器ning.com主服务器为被转发服务器
	  40.6位客户端,通过cheng.com访问ning.com
编辑40.5配置文件:
	vim /etc/named.conf
	options {
		listen-on port 53 { localhost; };
		allow-query     { any; };
		forward only;
		forwarders      { 192.168.40.7;};
		
		dnssec-enable no;
		dnssec-validation no;
	};
	区域数据库文件
		$TTL 86400
		@       IN      SOA     dns1    admin.cheng.com. (
										8
										10H
										1H
										2D
										3H )
				IN      NS      dns1.cheng.com.
		dns1    IN      A       192.168.40.5
编辑40.7配置文件
	vim /etc/named.conf
		options {
			listen-on port 53 { localhost; };
			allow-query     { any; };
		};
	vim /etc/named.rfc1912	
		zone "ning.com" {
		type master;
		file "ning.com.zone";
		};
	区域数据文件:
		$TTL 86400
		@       IN      SOA     dns1    admin   ( 0 1D 1H 2D 3H )
				IN      NS      dns1
		dns1    IN      A       192.168.40.7
		www     IN      A       192.168.40.7
	修改文件属性
在40.6上测试,要确保40.6上的/etc/resolve文件中没有40.7的地址,要不没什么意义
	dig www.ning.com	:返回信息是40.7的地址就对了

实验6:
实现acl+view智能DNS转发
这里拿,北京,上海,山西的名称做实验,生产中可在网上买到北京地区使用的哪些网段
编辑配置文件
vim /etc/named.conf		:添加ACL和view
	acl beijingnet {
			192.168.40.0/24;
	};
	acl shanghainet {
			192.168.0.0/24;
	};
	acl shanxinet {
			any;
	};
## zone "." IN {		:将这段内容添加到区域文件中,使用view就必须将所有域包含在不view中
##    type hint;
##    file "named.ca";
##	};
## include "/etc/named.rfc1912.zones";将原有的这行删掉,必须写在view中
view view_beijing {
		match-clients { beijingnet;};
		include "/etc/named.rfc1912.zones";		:这个为北京准备,准备区域文件	
};
view view_shanghai{
		match-clients { shanghainet;};
		include "/etc/named.rfc1912.zones.sh";	:.sh为上海,下面准备这些区域文件
};
view view_shanxi {
		match-clients { shanxinet;};
		include "/etc/named.rfc1912.zones.sx";	:.sx为山西,准备区域文件
};

编辑区域文件,使用不同的数据库文件,然后数据库文件中定义具体使用的DNS服务器地址,从而实现分发机制
添加如下内容:
如果闲麻烦,可使用cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.sh
然后在里面修改区域数据库名字就可以了
vim /etc/named.rfc1912.zones
	zone "." IN {		:将主配置文件中的东西拿过来
    type hint;
    file "named.ca";
	};
	zone "cheng.com" IN {		:自己的域写上
    type master;
    file "cheng.com.zone.bj";	:.bj,使用.bj的区域数据库文件
	};
vim /etc/named.rfc1912.zones.sh
	zone "." IN {		:将主配置文件中的东西拿过来
    type hint;
    file "named.ca";
	};
	zone "cheng.com" IN {		:自己的域写上
    type master;
    file "cheng.com.zone.bj";	:.sh,使用.sh的区域数据库文件
	};
vim /etc/named.rfc1912.zones.sx
	zone "." IN {		:将主配置文件中的东西拿过来
    type hint;
    file "named.ca";
	};
	zone "cheng.com" IN {		:自己的域写上
    type master;
    file "cheng.com.zone.bj";	:.sx,使用.sx的区域数据库文件
	};

编辑区域数据库文件,这里实验使用的1.1.1.1到3.3.3.3的地址,只是为了好区分
注意文件的权限
如果闲麻烦,也是cp -p命令复制:
cp -p /var/named/cheng.com.zone.bj /var/named/cheng.com.zone.sh
然后进入到文件中修改IP 即可
vim /var/named/cheng.com.zone.bj
	$TTL 86400
	@       IN      SOA     dns1    admin ( 5 10H 1H 2D 3H )
			IN      NS      dns1
	dns1    IN      A       192.168.40.5
	@       IN      A       1.1.1.1
	*       IN      A       1.1.1.1
vim /var/named/cheng.com.zone.sh
	$TTL 86400
	@       IN      SOA     dns1    admin ( 5 10H 1H 2D 3H )
			IN      NS      dns1
	dns1    IN      A       192.168.40.5
	@       IN      A       2.2.2.2
	*       IN      A       2.2.2.2
vim /var/named/cheng.com.zone.sx
	$TTL 86400
	@       IN      SOA     dns1    admin ( 5 10H 1H 2D 3H )
			IN      NS      dns1
	dns1    IN      A       192.168.40.5
	@       IN      A       3.3.3.3
	*       IN      A       3.3.3.3
	
检查:
	named-checkconf、
	named-checkzone cheng.com /var/named/cheng.com.zone.bj	:三个文件挨着查

重启服务:
	rndc reload
	systemctl restart named

测试:dig
使用三个网段分别测试
例如我DNS服务器有三个网段地址
	192.168.40.5
	192.168.0.130
	192.168.199.132
在另两台主机分别有次三个网段
测试:
	dig www.cheng.com @192.168.40.5		:指定DNS服务器的IP,表示通过本机同网段的网卡取请求解析,以下同样
	dig www.cheng.com @192.168.0.130
	dig www.cheng.com @192.168.199.132
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!