DNS服务

DNS:Domain Name Service 应用层协议 C/S,53/udp, 53/tcp BIND:Bekerley Internat Name Domain ISC (www.isc.org) 本地名称解析配置文件:hosts /etc/hosts %WINDIR%/system32/drivers/etc/hosts 93.46.8.89 www.google.com 根域: . 一级域名:Top Level Domain: tld com, edu, mil, gov, net, org, int,arpa 三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域 二级域名,三级域名,最多127级域名 ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理、以及根服务器系统的管理 DNS类型: 递归查询 迭代查询 名称服务器:域内负责解析本域内的名称的主机 根服务器:13组服务器 解析类型: 正向解析:FQDN --> IP 反向解析:IP --> FQDN 注意:正反向解析是两个不同的名称空间,是两棵不同的解析树 一次完整的查询请求经过的流程: Client -->hosts文件 -->DNS Service Local Cache --> DNS Server(recursion) --> Server Cache --> iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS… 解析答案: 肯定答案: 否定答案:请求的条目不存在等原因导致无法返回结果 权威答案: 非权威答案:

区域zone的资源记录(RR)

记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX, SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录 A:internet Address,作用,FQDN --> IP AAAA: FQDN --> IPv6 PTR: PoinTeR,IP --> FQDN NS: Name Server,专用于标明当前区域的DNS服务器 CNAME:Canonical Name,别名记录 MX: Mail eXchanger,邮件交换器 #资源记录定义的格式: 语法:name [TTL] IN rr_type value 注意: (1) TTL可从全局继承 (2) @可用于引用当前区域的名字 (3) 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应 (4) 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机

FQDN--->IP /var/named/ZONE_NAME.zone 文件格式

$TTL 1D
@	IN SOA dns1.feng.com. admin.feng.com. (
					0	; Serial	#序列号,主从服务器同步更新的条件,最多4294967296(2^32)
					1D	; Refresh 	#刷新时间,slave 会去向 master 要求数据更新的判断的时间定义
					1H	; Retry		#重试时间
					1W	; Expire	#过期时间
					3H )	; minimum	
		NS	dns1.feng.com.		#省略写法,dns1.feng.com.	1D	IN	NS	dns1.feng.com.
dns1	A 	192.168.1.8      	#省略写法,dns1.feng.com.	1D	IN	A	192.168.1.8 
master	A	192.168.1.200		#省略写法,master.feng.com.	1D	IN	A	192.168.1.100
$GENERATE 1-254 HOST$ 	A 	192.168.1.$ #对应192.168.1.{1..254}的主机对应记录
*.feng.com	A	192.168.1.200 	#泛域名解析
websrv	A 	192.168.1.10
websrv	A 	192.168.1.11
websrv	A 	192.168.1.12
www	CNAME 	websrv #别名解析,实现负载均衡。

SOA数据的说明:

Serial < 2^32 = 4294967296 Refresh >= Retry *2 Refresh + Retry < Expire Expire >= Rrtry * 10 Expire >= 7D

一般来说,如果 DNS RR 资料变更情况频繁的,那么上述的相关数值可以订定的小一些,如果 DNS RR 是很稳定的, 为了节省带宽,则可以将 Refresh 设定的较大一些 .

IP --->FQDN /var/named/ZONE_NAME.zone文件格式

$TTL 1D
@ 	IN	SOA	dns1.feng.com.	admin.feng.com.	( 1 1D 1H 1W 3H )
		NS	dns1.feng.com.
dns1.feng.com.	A	192.168.1.9
8	PTR	websrv.feng.com.	#省略写法, 8.1.168.192.in-addr.arpa. IN PTR websrv.feng.com.
6	PTR	appsrv.feng.com.
100	PTR	mailsrv.feng.com.

子域

子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权,资源记录如下:

.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

bind服务器(base源)

后附bind编译安装配置 yum install -y bind 文件: 主配置文件:/etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key 解析库文件:/var/named/ ZONE_NAME.ZONE 解析库文件必须存在named.ca文件,默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程

测试命令dig

dig [-t type] name [@SERVER][query options] dig只用于测试dns系统,不会查询hosts文件进行解析 查询选项: +[no]trace:跟踪解析过程 : dig +trace feng.com +[no]recurse:进行递归解析 测试反向解析: dig -x IP = dig –t ptr reverseip.in-addr.arpa 模拟区域传送:

dig -t axfr ZONE_NAME @SERVER
dig -t axfr feng.com @10.10.10.11
dig –t axfr 100.1.10.in-addr.arpa @172.16.1.1
dig -t NS . @114.114.114.114
dig -t NS . @a.root-servers.net

host测试命令

host [-t type] name [SERVER]

host –t NS feng.com 172.16.0.1
host –t soa feng.com
host –t mx feng.com
host –t axfr feng.com
host 1.2.3.4

nslookup命令及DNS动态更新

nslookup命令: nslookup [-option][name | -] [server] 交互式模式: nslookup> server IP: 指明使用哪个DNS server进行查询 set q=RR_TYPE: 指明查询的资源记录类型 NAME: 要查询的名称

指定的zone语句块中或者全局的options配置文件中:

Allow-update {any;};

远程主机端:

]#chmod 770 /var/named
]#setsebool -P named_write_master_zones on
]#nsupdate
>server 192.168.1.9
>zone feng.com
>update add ftp.feng.com 88888 IN A 8.8.8.8
>send
>update delete www.feng.com A  
>send
测试:dig ftp.feng.com @192.168.1.9
在DNS服务器端会生成一个日志文件feng.com.zone.jnl
]#ll /var/named/feng.com.zone.jnl
]#cat /var/named/feng.com.zone
将feng.com.zone的文件格式规划好了

客户端的设定

架设好DNS服务器后,都需要进行测试,所以这里需要有客户端进行配置好。

/etc/hosts #这个是最早的 hostname 对应 IP 的档案;
/etc/resolv.conf #这个重要!就是 ISP 的 DNS 服务器 IP 记录处;
/etc/nsswitch.conf #这个档案则是在『决定』先要使用 /etc/hosts 还是 /etc/resolv.conf 的设定!
]#vim /etc/resolv.conf
nameserver DNS_IP   #供实验的DNSip地址,一定是第一个
nameserver 8.8.8.8
nameserver 223.5.5.5
nameserver 223.6.6.6

rndc命令

rndc ---> rndc(953/tcp)

]#rndc status
version: 9.9.4-RedHat-9.9.4-61.el7 id:8f9657aa
CPUs found: 1
worker threads: 1
UDP listeners per interface: 1
number of zones: 103
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

reload: 重载主配置文件和区域解析库文件 reload zonename: 重载区域解析库文件 retransfer zonename: 手动启动区域传送,而不管序列号是否增加 notify zonename: 重新对区域传送发通知 reconfig: 重载主配置文件 querylog: 开启或关闭查询日志文件/var/log/message trace: 递增debug一个级别 trace LEVEL: 指定使用的级别 notrace:将调试级别设置为 0 flush:清空DNS服务器的所有缓存记录

实验1.实现www.feng.com正向反向DNS配置

1.在服务器上进行配置/etc/named.conf

]# vim /etc/named.conf
options {
    listen-on port 53 { localhost; };   	#允许localhost连接named进程
    listen-on-v6 port 53 { ::1; };
    directory   "/var/named";				#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     { localhost;any; };		#允许any所有的client进行DNS解析服务
    allow-transfor { none;};	#禁止任何人转发
···
include "/etc/named.rfc1912.zones";  #当然,zone文件也可以放在.conf文件里面。
include "/etc/named.root.key";

2.配置/etc/named.rfc1912.zones文件

]# vim /etc/named.rfc1912.zones  #加入两条正向反向解析的域名
zone "feng.com" IN {
    type master;
    file "feng.com.zone";
};
zone "1.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.1.zone";
};

3.解析域zone文件的配置

]# touch /var/named/{feng.com.zone,192.168.1.zone} #建立两套解析域资源
]# chgrp named /var/named/{feng.com.zone,192.168.1.zone} #改变文件的属组
]# chmod 640 /var/named/{feng.com.zone,192.168.1.zone} #改变文件的权限
]# vim /var/named/192.168.1.zone
$TTL 1D
@   IN  SOA dns1.feng.com.    admin.feng.com.   ( 1 1D 1H 1W 3H )
        NS  dns1.feng.com.
dns1.feng.com.    A   192.168.1.9
8   PTR websrv.feng.com.
6   PTR appsrv.feng.com.
100 PTR mailsrv.feng.com.
]# vim /var/named/feng.com.zone
$TTL 1D
@   IN  SOA dns1.feng.com.    admin.feng.com.   ( 1 1D 1H 1W 3H )
            NS  dns1.feng.com.
dns1    A   192.168.1.9
websrv	A 	192.168.1.10
websrv	A 	192.168.1.11
www		CNAME 	websrv
]#systemctl start named  #至此,DNS正向反向解析库配置完成,客户端使用dig即可完成DNS解析。

实验2.实现DNS的主从服务器配置

要点: 1、应该为一台独立的名称服务器 2、主服务器的区域解析库文件中必须有一条NS记录指向从服务器 3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中 4、主服务器得允许从服务器作区域传送 5、主从服务器时间应该同步,可通过ntp进行; 6、bind程序的版本应该保持一致;否则,应该从高,主低 定义从服务器的方法:

#主服务器的主配置文件options中(影响全局,若只影响局部,可以在/etc/named.rfc1912.zones添加):
]#vim /etc/named.conf
	listen-on port 53 { localhost; };
	allow-query     { localhost;any; };	
	allow-transfer { 192.168.1.8; }; 	#只允许slave_ip传输
]#vim /etc/named.rfc1912.zones
zone "feng.com" IN {
  	type master;
    file "feng.com.zone";
};
]#vim /var/named/feng.com.zone
$TTL 1D
@   IN  SOA dns1.feng.com.    admin.feng.com.   ( 1 1D 1H 1W 3H )
            NS  dns1.feng.com.
            NS	dns2.feng.com.
dns1    A   192.168.1.9
dns2	A	192.168.1.8
websrv	A 	192.168.1.10
websrv	A 	192.168.1.11
www		CNAME 	websrv
]#chmod 640 /var/named/feng.com.zone
]#chgrp named /var/named/feng.com.zone
]#systemctl start named #配置完毕,启动服务
#从服务器:
]#vim /etc/named.conf
options {
	listen-on port 53 { localhost; };
	allow-query     { localhost;any; };	
	allow-transfer { none;};
···
};
]#vim /etc/named.rfc1912.zones
zone "ZONE_NAME" IN {
	type slave;
	masters { 192.168.1.9; };
	file "slaves/feng.com.zone";
};

]#systemctl start named 
]#ll /var/named/slaves/      #重启服务后立即生成配置的文件

实验3.实现DNS的转发

forwarding 功能的DNS服务器查询方式

中间DNS服务器192.168.1.8(全局/局部)

options {
···
	listen-on port 53 { localhost; };
	allow-query     { localhost;any; };	
	forward first|only; 	#first首先转发forward IP;only只转发forward IP;
	forwarders { 192.168.1.9;};
···
	dnssec-enable no;
	dnssec-validation no;  	#关闭dnssec功能
中间DNS服务器(局部域名转发)
zone "feng.com" IN {
	type forward;
	forward first|only;
	forwarders { 192.168.1.9;};
};
192.168.1.9的DNS正向服务器解析配置参照实验1配置即可。

实验4.子域的配置

有三个方法:

1.当成父域的一条记录

2.子域,本机的独立域名

3.委派给另一台主机维护子域(主要应用)

父域:192.168.1.9 www.feng.com 子域:192.168.1.8 www.bj.feng.com

]# vim /etc/named.conf
	listen-on port 53 { localhost; };
	allow-query     { localhost;any; };	
	dnssec-enable no;
	dnssec-validation no;  	#关闭dnssec功能
···
]#vim /etc/named.rfc1912.zones
zone "feng.com" IN {
  	type master;
    file "feng.com.zone";
};
]#vim /var/named/feng.com.zone 
$TTL 86400
@               IN SOA  dns1.feng.com. admin.feng.com. (1 1D 2H 1W 3H)
                        NS      dns1.feng.com.
bj                      NS      dns2.feng.com.  ##增加这条ns	
sh                      NS      dns3.feng.com.  					
dns1                    A       192.168.1.9
dns2                    A       192.168.1.8    ##增加这条A记录
dns3                    A       192.168.1.7   
]#systemctl start named #配置完毕,启动服务

在子域192.168.1.8配置bj.feng.com域名即可

在子域192.168.1.7配置sh.feng.com域名即可,参照实验1即可

实验5.实现智能DNS

DNS服务器:192.168.1.9/24 ; 172.20.1.24/16

需求:

192.168.1.0/24 本地的网段访问www.feng.com的时候,DNS解析为192.168.1.10

非192.168.1.0/24 外部的网段访问www.feng.com的时候,DNS解析为192.168.1.11

注意:view语句块必须包含所有的zone,所有需要把.(root)域转移到/etc/named.rfc1912.zones。进行模块化的管理。

]#vim /etc/named.conf
acl bjnet { 192.168.1.0/24;};
acl othernet {!192.168.1.0/24;any;};
/*
zone "." IN {
    type hint;
    file "named.ca";
};
*/
view "bjnet" {
    match-clients {"bjnet";};
    include "/etc/named.rfc1912.zones.bj";
};
view "othernet" {
    match-clients {"othernet";};
    include "/etc/named.rfc1912.zones";
};
// include "/etc/named.rfc1912.zones";  
]#cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bj
]#vim /etc/named.rfc1912.zones.bj
zone "." IN {
    type hint;
    file "named.ca";
};
zone "feng.com" IN {
    type master;
    file "feng.com.zone.bj";
};
]#vim /etc/named.rfc1912.zones
zone "." IN {
    type hint;
    file "named.ca";
};

zone "feng.com" IN {
    tpye master;
    file "feng.com.zone";
};
]#vim /var/named/feng.com.zone
$TTL 1D
@   IN  SOA dns1.feng.com.    admin.feng.com.   ( 1 1D 1H 1W 3H )
            NS  dns1.feng.com.
dns1    A   192.168.1.9
websrv	A 	192.168.1.10
www		CNAME 	websrv
]#vim /var/named/feng.com.zone.bj
$TTL 1D
@   IN  SOA dns1.feng.com.    admin.feng.com.   ( 1 1D 1H 1W 3H )
            NS  dns1.feng.com.
dns1    A   192.168.1.9
websrv	A 	192.168.1.11
www		CNAME 	websrv
]#systemctl start named #配置好,启动服务

实验6.搭建互联网模型的dns

场景:.(root)服务器,com.服务器,feng.com服务器,www.feng.com主机,电信转发服务器,clinets

主机:centos7.4

.(root):192.168.1.1

com.:192.168.1.2

feng.com.:192.168.1.3 从:192.168.1.33 高可用

www.feng.com.: 192.168.1.4 负载均衡备用主机:192.168.1.44

DNStrans:192.168.1.5

clients:192.168.1.6

1.根服务器的配置192.168.1.1

]# vim /etc/named.conf
	listen-on port 53 { localhost; };
	allow-query     { localhost;any; };	
	dnssec-enable no;
	dnssec-validation no;  	#关闭dnssec功能,需要委派
···
/*
zone "." IN {
  	tpye hint;
  	file "named.ca";
};
*/
]#vim /etc/named.rfc1912.zones
zone "." IN {
  	type master;
    file "root.zone";
};
]#vim /var/named/root.zone
$TTL 86400
@  	IN  SOA 	dns1. admin. (1 1D 2H 1W 3H)
		NS   dns1
com		NS	 dns2		#委派子域com.
dns1	 A	192.168.1.1
dns2	 A	192.168.1.2
]#systemctl start named #配置完毕,启动服务

2.搭建区域dns服务器192.168.1.5

]# vim /etc/named.conf
	listen-on port 53 { localhost; };
	allow-query     { localhost;any; };	
	dnssec-enable no;
	dnssec-validation no;  	#关闭dnssec功能,需要转发
···
]#vim /var/named/named.ca
; <<>> DiG 9.9.4-RedHat-9.9.4-38.el7_3.2 <<>> +bufsize=1200 +norec @a.root-servers.net
; (2 servers found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17380
;; flags: qr aa; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 27

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1472
;; QUESTION SECTION:
;.				IN	NS

;; ANSWER SECTION:
.						518400	IN	NS	a.root-servers.net.
a.root-servers.net.  	  3600000 IN  A  192.168.1.1  #把CDN服务器指向已经搭好的根服务器IP
]#systemctl start named

3.搭建com.服务器:192.168.1.2

]# vim /etc/named.conf
	listen-on port 53 { localhost; };
	allow-query     { localhost;any; };	
	dnssec-enable no;
	dnssec-validation no;  	#关闭dnssec功能,需要委派
]#vim /etc/named.rfc1912.zones
zone "com" IN {
    type master;
    file "com.zone"
};
]#vim /var/named/com.zone
$TTL 86400
@  	IN  SOA 	dns1.com. admin.com. (1 1D 2H 1W 3H)
		NS   dns1
feng	NS	 dns2		#委派子域feng.com.
feng	NS	 dns3
dns1	A	192.168.1.2
dns2	A	192.168.1.3
dns3	A	192.168.1.33

4.搭建feng.com.服务器:主:192.168.1.3 从:192.168.1.33

前面的操作类似实验1,不赘述
]#vim /var/named/feng.com.zone
$TTL 1D
@   IN  SOA dns1.feng.com.    admin.feng.com.   ( 1 1D 1H 1W 3H )
            NS  dns1.feng.com.
            NS	dns2.feng.com.
dns1    A   192.168.1.3
dns2	A	192.168.1.33
websrv	A 	192.168.1.4
websrv	A 	192.168.1.44
www		CNAME 	websrv

5.搭建www.feng.com主机:192.168.1.4 备:192.168.1.44

]#yum install httpd -y
]#setenforce 0
]#echo welcome to my website! >> /var/www/html/index.hmtml
]#systemctl start httpd
]#systemctl stop firewalld 

6.clients访问

dig或者host命令是bind包

]#rpm -qf /usr/bin/dig
bind-utils-9.9.4-61.el7.x86_64
]#rpm -q bind &> /dev/null || yum install -y bind
]#dig www.feng.com @192.168.1.5
]#host www.feng.com 192.168.1.5
]#curl www.feng.com

编译安装bind

1.编译安装bind及启动rndc服务DNS服务

开启dns服务,启用rndc服务

]#useradd -r -d /var/named -u 25 -s /sbin/nologin -m named
]#./configrue --prefix=/app/bind
]#make -j 4 && make install 
]#yum groupinstall "devlopment tools"
]#yum install openssl-devel -y
]#vim /etc/profile.d/bind.sh
PATH=/app/bind/bin:/app/bind/sbin:$PATH
]#vim /app/bind/etc/named.conf
options {
    directory "/var/named";
};
zone "feng.com" {
    type master;
    file "feng.com.zone";
};
zone "." {
    type hint;
    file "named.ca";
};
]#chgrp named /app/bind/etc/named.conf
]#chmod 640 /app/bind/etc/named.conf
]#mkdir /var/named/
]#dig -t ns . @a.root-servers.net > /var/named/named.ca
]#vim /var/named/feng.com.zone
$TTL 1D
@   IN  SOA dns1.feng.com.    admin.feng.com.   ( 1 1D 1H 1W 3H )
            NS  dns1
dns1    A   192.168.1.9
websrv	A 	192.168.1.10
websrv	A 	192.168.1.11
www		CNAME 	websrv
]#named -u named -g -d 3 
]#named -u named -d 3  #dns基本配置完成,后台启用服务
]#rndc-confgen > /app/bind/etc/rndc.conf
]#grep '^#' /app/bind/etc/rndc.conf  >> /app/bind/etc/named.conf
]#vim /app/bind/etc/named.conf     #去掉rndc配置的相关的#号
key "rndc-key" {
        algorithm hmac-sha256;
        secret "sTvCPeQfkCmaObjPsnXXpqqryxkse4EmWUQylO4Wl5M=";
};
controls {
        inet 127.0.0.1 port 953
                allow { 127.0.0.1; } keys { "rndc-key"; };
};
]#killall -HUP named      #重新加载配置文件,dns服务重启成功

2.querperf测试

]#cd /root/bind-9.13.0/contrib/queryperf
]#./configure 
]#make
]#cp queryperf /app/bind/bin/ 
]#vim /root/dnstest.txt 
www.feng.com A
feng.com NS
feng.com SOA
feng.com MX 
]#cat >> /root/dnstest.txt < /root/dnstest.txt  #生成大文件
]#sed -i '100000,$d' /root/dnstest.txt  #取前100000行
]#queryperf -d /root/dnstest.txt
Statistics:

  Parse input file:     once
  Ended due to:         reaching end of file

  Queries sent:         4055040 queries
  Queries completed:    4055040 queries
  Queries lost:         0 queries
  Queries delayed(?):   0 queries

  RTT max:         	1.629313 sec
  RTT min:              0.000057 sec
  RTT average:          0.004647 sec
  RTT std deviation:    0.008495 sec
  RTT out of range:     0 queries

  Percentage completed: 100.00%
  Percentage lost:        0.00%

  Started at:           Sat Jun  2 23:03:40 2018
  Finished at:          Sat Jun  2 23:19:26 2018
  Ran for:              945.913922 seconds

  Queries per second:   4286.901700 qps