DNS服务配置

平台

虚拟机软件:vmwareworkstation
系统版本:CentOS Linux release 7.3.1611 (Core)
软件版本:bind 9.9.4
服务器A配置:
	IP:192.168.1.20,桥接模式
客户端B配置:
	IP:192.168.1.30,桥接模式

步骤

环境准备:
	服务器:
		安装bind软件、bind-utils软件(配置cdrom源)、关闭防火墙、关闭selinux、配置IP地址:
			# yum install bind.x86_64 -y
			# yum install bind-utils -y
			# systemctl stop firewalld.service
			# setenforce 0
			# ifconfig ens33 192.168.1.20/24
	客户端:
		关闭防火墙、关闭selinux、安装bind、bind-utils(配置cdrom源,为测试从DNS服务器做准备)
		、配置IP地址:
			# systemctl stop firewalld.service
			# setenfore 0
			# yum install bind bind-utils -y
			# ifconfig ens33 192.168.1.30/24
服务配置及测试:
	DNS缓存服务器:
		cache服务器即自身不提供额外的区域解析文件,在接受到client的DNS解析请求后,查询
		缓存,如果命中,则返回结果;如果未命中,则向根域发起迭代查询。
		配置:/etc/named.conf
			options {
			//listen-on port 53 { 127.0.0.1; }; #注释掉后监听本机所有IP地址;
		    //listen-on-v6 port 53 { ::1; };	   #注释掉不监听IPv6地址;
		    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";#统计文件;
		    recursing-file  "/var/named/data/named.recursing";
		    secroots-file   "/var/named/data/named.secroots";
		    allow-query     { any; };			   #any表示任意主机向服务器发起DNS查询;
		    recursion yes;						   #是否接收客户端的递归查询请求;
			dnssec-enable no;					   #未注册的DNS服务器必须关闭此项;
    		dnssec-validation no;				   #未注册的DNS服务器必须关闭此项;	
    		}	;
    	启动和测试:
    		1、检查配置文件语法:
    			# named-checkconf		#未输出错误信息则配置正确;
    		2、启动DNS服务:
    			# systemctl start named
    		3、查看服务状态和端口是否监听:
    			# systemctl status named	#查看服务是否提示错误;
    			# grep named /var/log/messages	#查看日志是否提示错误(另一处日志记录
    							在/var/named/data/run文件中);
    			# ss -tunl 	#查看本机IP的TCP、UDP的53端口,TCP的953端口是否监听
    			  Tip:UDP 53端口接受客户端的DNS请求;
    				   TCP 53端口进行主从DNS服务器之间的数据传送;
    				   TCP 953端口进行DNS服务的远程管理,默认只允许127.0.0.1进行连接;
    			如发现提示错误或端口未正常监听,需排除错误后继续
    		4、测试服务器端域名解析:
    			# dig www.baidu.com @192.168.1.20	
    			  正确返回IP地址,则服务端服务正常
    		5、测试客户端域名解:
				# dig www.baidu.com #不指定DNS服务器时,此时无法解析域名
    			# dig www.baidu.com @192.168.1.20 #指定DNS服务器时,此时解析域名成功
    			  Tip:如果解析不成功,检查网络、配置文件、防火墙、selinux等。
	DNS转发服务器:
		DNS转发服务器也不需要额外的区域解析文件,当收到client解析请求后,缓存有结果
		则返回,无结果则向指定的上层DNS服务器进行转发。
		DNS缓存服务器和转发服务器的建立,一般是出于网络安全的考虑。
		配置一:forward only
			options {
			//listen-on port 53 { 127.0.0.1; }; #注释掉后监听本机所有IP地址;
		    //listen-on-v6 port 53 { ::1; };	   #注释掉不监听IPv6地址;
		    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";#统计文件;
		    recursing-file  "/var/named/data/named.recursing";
		    secroots-file   "/var/named/data/named.secroots";
		    allow-query     { any; };			   #any表示任意主机向服务器发起DNS查询;
		    recursion yes;						   #是否接收客户端的递归查询请求;
			dnssec-enable no;					   #未注册的DNS服务器必须关闭此项;
    		dnssec-validation no;				   #未注册的DNS服务器必须关闭此项;	
    		forwarders { 202.96.134.133;};  	   #指定转发时的上层DNS地址;可以有多个地址;
    							在为得到回答时,会依次向下转发查询请求;
    		forward only;				 		   #仅转发解析请求,自身不处理请求(即不会向根域发起迭代查询);
    		}	;
    	配置二:forward first
    		forward only项改为:
    		  forward first;# 转发得不到结果时,会自己向根域迭代查询并返回结果给client;
    		  其余项同上
 		配置三:forward only或forward first都未配置仅有forwarders配置项时,默认为forward first模式
		启动和测试:
			启动和测试过程同cache服务器;
	主DNS服务器:
		管理一个或多个区域的区域文件解析、从DNS服务器。主DNS可以同时是另一个域的从DNS
		服务器,从DNS服务器同时也可以是另一个域的主DNS服务器
		配置:
			/etc/named.conf文件:
				options {
		        //listen-on port 53 { 127.0.0.1; }; #监听本机所有地址;
		        //listen-on-v6 port 53 { ::1; }; 	#不监听IPv6地址;
		        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";
		        recursing-file  "/var/named/data/named.recursing";
		        secroots-file   "/var/named/data/named.secroots";
		        allow-query     { any; };		#允许所有主机查询
		        recursion yes;					#允许递归;
		        dnssec-enable no;				#关闭安全认证;
		        dnssec-validation no;			#关闭安全认证;
		        allow-transfer ( none; };		#不允许区域文件传送,开启的话则填上slave服务器IP;
		        };
		/etc/named.rfc1912.zones文件中添加区域定义:
			定义正向区域
				zone "shxing.com."      IN      {
			        type master;				#服务器为此区域的主DNS服务器;
			        file "shxing.com.zone"; 	#区域数据文件
			        allow-update { none; };
				};
				# shxing.com.后面的点是必须的,不然语法错误,称为FQDN;
			定义反向区域:
				zone "2.168.192.in-addr.arpa."	IN	{
					type master;
					file "2.168.192.in-addr.arpa.zone";
					allow-update { none; };
				};
		创建/var/named/shxing.com.zone区域数据文件,并创建如下内容:
			$TTL 1D	;定义全局TTL值为1天,局部有定义时以局部值为准
			$ORIGIN	shxing.com.	;定义省略项,缺省为配置文件中定义的域名称
			@	IN	SOA	ns1.shxing.com.	mail1.shxing.com.	(
						2019101201	;文件序列号,从服务器更新数据时对比使用
						2H	;刷新时间,这里是每2小时从服务器更新数据
						30M	;重试时间,刷新失败后的重试时间间隔
						7D	;过期时间,这里定义连续更新失败达一周,从服务器停止提供服务,等待管理员处理
						1D	);通用TTL值,局部有定义时以局部为准
			;区域文件的首部必须为SOA记录,定义了此域的主DNS服务器,邮件通知服务器,区域文件
				序列号等等内容
			@		IN	NS	ns1.shxing.com.				;名称解析服务器记录,可以有多个
			ns1		IN	A		192.168.1.20			;每个NS记录都对应一个A记录
			@		IN	MX	20	mail1.shxing.com.		;邮件服务器记录
			@		IN	MX	30	mail2.shxing.com.		;每个MX记录都应对应一个A记录
			mail1	IN	A		192.168.1.20			;A记录,解析名称到IP
			mail2	IN	A		192.168.1.30
			www	IN	A		192.168.1.20
			ftp		IN	CNAME	www.shxing.com.			;别名记录,当多个主机名对应一个IP地址时,不用
					设置多个A记录,而设置别名记录,这样当IP地址发生变动,改变一条A记录即可
		创建/var/named/2.168.192.in-addr.arpa.zone区域解析文件:
			$TTL			1D
			$ORIGIN	2.168.192.in-addr.arpa.
			@	IN	SOA	ns1.shxing.com.	mail1.shxing.com.	(
							2019101201
							3H
							30M
							7D
							1D	)
			@	IN	NS		ns1.shxing.com.
			20	IN	PTR		ns1.shxing.com.
			20	IN	PTR		www.shxing.com.
			20	IN	PTR		ftp.shxing.com.
			# 反向区域解析文件中,要求由SOA记录、NS记录和PTR记录,无其他类记录
		Tip:正、反向区域解析文件中,本域DNS记录必须有,对应的A记录可以没有或者指向无效的IP。
		测试:略
		子域授权:
			在父域的区域解析文件/var/named/shxing.com.zone中添加子域NS指定和A记录指定
			xn.shxing.com	IN	NS	ns1.xn.shxing.com.
			ns1.xn.shxing.com.	IN	A	192.168.1.30
			子域服务器开启DNS服务并做相关配置.
			Tip:
				1、父域解析子域名称时,父域区域解析文件中有记录则直接返回结果;没有则向子域DNS服务器查询
				2、子域解析父域名称时,子域区域解析文件中有记录是无效的,会向根域发起迭代查询,此时要设置
				forwarders转发到父域服务器,可以是全局转发,也可以是单独域定义转发。即转发可定义在options中也
				可以定义在zone字段中。
	从DNS服务器配置:把192.168.1.30客户端主机设置为从服务器
		主DNS服务器中设置:
			/etc/named.conf文件options选项中添加:
				allow-transfer { 192.168.1.30; };	#允许进行区域文件传送
			正向区域解析文件中添加:
				@	IN	NS	ns2.shxing.com.			#为要设置从DNS服务器的正向区域文件添加从服务器NS记录
				ns2	IN	A		192.168.1.30
			反向区域解析文件中添加:
				@	IN	NS	ns2.shxing.com.			#为要设置从DNS服务器的反向区域文件添加从服务NS记录
				30	IN	PTR ns2.shxing.com.
			# rndc reload							#重读配置文件
		从DNS服务器中设置:
			在/etc/named.rfc1912.zones中定义zone:
				zone "shxing.com."	IN	{
					type slave;						#定义此服务器为该区域的从DNS服务器
					file "slaves/shxing.com.zone";	#从服务器文件一般存放于slaves目录下,注意文件属主属组和权限
					masters	{ 192.168.1.20; };		#设定该区域主DNS的IP
				};
				zone "2.168.192.in-addr.arpa."	IN	{
					type slave;
					file "slaves/2.168.192.in-addr.arpa.zone";
					masters	{ 192.168.2.20; };
				};
			# systemctl start named :启动named服务
			# grep named /var/log/messages:会提示区域文件传输完成
		注意:
			1、主DNS服务器可以是某域的从DNS服务器,从DNS服务器也同时可以是某域的主DNS服务器
			2、正、反向两个区域解析文件是独立的,不必同时设置,也不必在同一服务器上;
			3、主DNS每次修改区域解析文件时,都应该更新区域解析文件的serial号(大于原有序号),否则从DNS不会更新文件
	子域委派:
		只需在父域区域文件中指定子域ns记录和对应的a记录即可,例在父域
		shxing.com中授权子域fuzhu.shxing.com,在shxing.com.zone文件中
		添加:
			fuzhu	IN	NS	ns1.fuzhu.shxing.com.
			ns1.fuzhu	IN	A	192.168.180.1
		子域fuzhu.shxing.comDNS服务器中按主DNS服务器的配置方法配置即可:
			修改named.conf配置文件
			创建正向和反向区域文件
	ACL控制:
		allow-query、allow-transfer等可以借助ACL实现访问控制
		ACL定义在/etc/named.conf中option字段之前,格式例如:
			acl  acl_rec {
								192.168.181.0/24;
								192.168.100.23;
								};
		在allow-query中可以定义acl_rec,表示允许acl_rec控制组进行查询:
			allow-query { acl_rec;};
	view:
		针对不同请求的客户端实现不同的解析,启用view后,所有zone必须定义在其中
		配置文件如下例:
			/etc/named.conf中:
				添加acl控制组:
					acl local_access {
							127.0.0.1;
							};
				注释掉根域定义:所有的域都要在view中定义,除允许递归的客户端所在的
					view,其他view最好不要定义根域。
			/etc/named.rfc1912.conf中:
				1、将文件中所有的本地域定义到view:local中,并仅local_access匹配:
					view “local” {
						match-clients { local_access;};
						。。。
						};
				2、定义view:Telecom和view:Unicom,使不同的客户端得到不同的解析
					结果(反向解析域是不同的客户端得到相同的解析结果):
					view “Telecom” {
						match-clients { 192.168.1.0/24;};
						zone “shxing.com.” IN {
							type master;
							file “Telecom/shxing.com.zone”;
							allow-update { none;};
							};
						zone “1.168.192.in-addr.arpa.” IN {
							type master;
							file “1.168.192.in-addr.arpa.zone”;
							allow-update { none;};
							};
						zone “2.168.192.in-addr.arpa.” IN {
							type master;
							file “2.168.192.in-addr.arpa.zone”;
							allow-update { none;};
							};
						};
					#tip:一个域名对应的多个ip在反解时必须得到相同的结果,所以
						在每个view中必须定义全部的反向域
					view “Unicom” {
						match-clients { 192.168.2.0/24;};
						zone “shxing.com.” IN {
							type master;
							file “Unicom/shxing.com.zone”;
							allow-update { none;};
							};
						zone “1.168.192.in-addr.arpa.” IN {
							type master;
							file “1.168.192.in-addr.arpa.zone”;
							allow-update { none;};
							};
						zone “2.168.192.in-addr.arpa.” IN {
							type master;
							file “2.168.192.in-addr.arpa.zone”;
							allow-update { none;};
							};
						};
注意事项:
	1、/etc/named.conf配置文件的每个语句需要以‘;’结尾;
	2、本次测试用DNS由于未向上级DNS注册,所以在/etc/named.conf配置文件中,一定要
		关闭dnssec安全认证,设置:
			dnssec-enable no;
    		dnssec-validation no;
    	注意:仅注释掉是无效的,默认为开启,必须设置为no。

参考资料:

1、bind9管理员参考手册中文版
2、http://linux.vbird.org/linux_server/0350dns.php#DNS_slave 鸟哥的Linux私房菜

补充
	1、配置文件:
		每一行都要以分号结尾
		dnssec:对发送给客户端的数据来源进行验证(来源数据包必须包含安全标签,即对方开启了dnssec),
		较为复杂,建议关闭		
疑问:
	dnsmasq
工具包:
		bind-utils:
		host:
		nslookup:
		dig:
			+trace:追踪详细查询过程;
				Tip:经测试,trace的过程是由根开始的逐级迭代查询。
填坑:
	1、在测试DNS缓存转发服务器时,无论如何,dig命令解析域名都提示state:SERVFAIL,
		解析不到结果。
		解:在/etc/named.conf文件中,dnssec关于dns安全的两项,由于是未向上级dns注册的
		非法dns服务器,无法通过验证,所以必须关闭选项;关闭选项时,简单地注释掉选项
		不起作用,应当修改这两项的值为no。
		参考:https://blog.youkuaiyun.com/qq_22870837/article/details/88342128
	2、疑问:
		问题:bind安装完成后,不添加区域文件,不做其他修改,不设置forwarders或者forward
		     是否能完成一台cache服务器的功能:当本地缓存有结果时返回结果,当本地缓存无
			 结果时向根域迭代查询返回结果。
		测试结果:
			# dig www.sina.com @127.0.0.1
				couldn't get address for 'c.root-servers.net': not found
				couldn't get address for 'a.root-servers.net': not found
				couldn't get address for 'b.root-servers.net': not found
				couldn't get address for 'k.root-servers.net': not found
				couldn't get address for 'd.root-servers.net': not found
				couldn't get address for 'f.root-servers.net': not found
				couldn't get address for 'h.root-servers.net': not found
				couldn't get address for 'l.root-servers.net': not found
				^C^Ccouldn't get address for 'i.root-servers.net': not found
				couldn't get address for 'g.root-servers.net': not found
				couldn't get address for 'e.root-servers.net': not found
				couldn't get address for 'm.root-servers.net': not found
				couldn't get address for 'j.root-servers.net': not found
				dig: couldn't get address for 'c.root-servers.net': no more
				解析不了本地根域文件/var/named/named.ca中的根域IP?
			# systemctl status named
				managed-keys-zone: Unable to fetch DNSKEY set '.': timed outmanaged-keys-zone: Unable to fetch DNSKEY set '.': timed out
		解:可以的。当不设置forward也不定义域、不配置区域文件时,服务器是作为cache服务器存在的,在另
			一环境测试成功
		排:
			1、Firewalld已关闭、selinux已设置为‘disable’;
			2、路由配置正确,外部IP可以ping通,但域名仍无法ping通;
			3、DNS配置文件语法及设置检查,同成功案例的环境一样设置,且平台相同;
			4、dig命令@路由解析测试成功,@本机仍无解析结果;
			5、日志未有其他错误,仅在named服务启动时提示上述问题;
			6、成功环境平台中使用的NetworkManager管理网络,而上述环境中使用network管理网络,怀疑
				此原因,修改之,仍无效;
			7、仍待排查
			Tip:虽然完全的cache服务器很少,在named.conf文件中加入forwarders选项,改为DNS转发服务
				器后解析正常,但未排查出具体问题。怀疑是本地根域的解析文件格式问题或者named.conf中
				有关key的选项设置错误。

进阶(待搞):

	1、启用dnssec,如何配置
	2、dns key 的作用及启用
	3、上级域服务器中记录了多条字域的NS记录,client进行查询时上级域服务器是按照轮询的方式返回给client吗
		DNS服务器的负载均衡,是通过父域的NS记录分发负载,还是子域中设置负载均衡
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值