一、 DNS相关概念
1、DNS 服务器
运行DNS 服务器程序的计算机,储存DNS 数据库信息。DNS 服务器会尝试解析客户机的查询请求。在解答查询时,如果DNS 服务器能提供所请求的信息,就直接回应解析结果,如果该DNS 服务器没有相应的域名信息,则为客户机提供另一个能帮助解析查询的服务器地址,如果以上两种方法均失败,则回应客户机没有所请求的信息或请求的信息不存在。
2、DNS 缓存
DNS 服务器在解析客户机请求时,如果本地没有该DNS 信息,则可以会询问其他DNS 服务器,当
其他域名服务器返回查询结果时,该DNS 服务器会将结果记录在本地的缓存中,成为DNS 缓存。当下一次客户机提交相同请求时,DNS 服务器能够直接使用缓存中的DNS 信息进行解析。
3、DNS查询方式:递归查询和迭代查询
看一个DNS查询过程:通过8个步骤的解析过程就使得客户端可以顺利访问www.163.com 这个域名,但实际应用中,通常这个过程是非常迅速的

<1> 客户机提交域名解析请求,并将该请求发送给本地的域名服务器。
<2> 当本地的域名服务器收到请求后,就先查询本地的缓存。如果有查询的DNS 信息记录,则直接返回查询的结果。如果没有该记录,本地域名服务器就把请求发给根域名服务器。
<3> 根域名服务器再返回给本地域名服务器一个所查询域的顶级域名服务器的地址。
<4> 本地服务器再向返回的域名服务器发送请求。
<5> 接收到该查询请求的域名服务器查询其缓存和记录,如果有相关信息则返回客户机查询结果,否则通知客户机下级的域名服务器的地址。
<6> 本地域名服务器将查询请求发送给返回的DNS 服务器。
<7> 域名服务器返回本地服务器查询结果(如果该域名服务器不包含查询的DNS 信息,查询过程将重复<6>、<7>步骤,直到返回解析信息或解析失败的回应)。
<8> 本地域名服务器将返回的结果保存到缓存,并且将结果返回给客户机。
3)两种查询方式
(1)递归查询
递归查询是一种DNS 服务器的查询模式,在该模式下DNS服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
(2)迭代查询
DNS 服务器另外一种查询方式为迭代查询,当客户机发送查询请求时,DNS服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果为止。
总结:一般情况下,从客户端到本地DNS服务器是属于递归查询。而DNS服务器之间就是的交互查询就是迭代查询。
4、正向解析与反向解析
(1)正向解析
正向解析是指域名到IP 地址的解析过程。
(2)反向解析
反向解析是从IP 地址到域名的解析过程。反向解析的作用为服务器的身份验证。
5、DNS资源记录
(1)SOA 资源记录
每个区在区的开始处都包含了一个起始授权记录(Start of Authority Record),简称SOA 记录。SOA 定义了域的全局参数,进行整个域的管理设置。一个区域文件只允许存在唯一的SOA 记录。
(2)NS 资源记录
NS(Name Server)记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析。每个区在区根处至少包含一个NS 记录。
(3)A 资源记录
地址(A)资源记录把FQDN 映射到IP 地址。因为有此记录,所以DNS服务器能解析FQDN域名对应的IP 地址。
(4)PTR 资源记录
相对于A 资源记录,指针(PTR)记录把IP地址映射到FQDN。用于反向查询,通过IP地址,找到域名。
(5)CNAME 资源记录
别名记录(CNAME)资源记录创建特定FQDN 的别名。用户可以使用CNAME 记录来隐藏用户网络的实现细节,使连接的客户机无法知道真正的域名。
例:ping百度时,解析到了百度的别名服务器,百度有个cname=[www.a.shifen.com.的别名]

二、使用宝塔搭建 DNS 服务器
1、安装

2、配置


3、测试
nslookup test3.sqlark.com 192.168.161.239

nslookup test4.sqlark.com 192.168.161.239


三、BIND 搭建 DNS 服务器
1、关闭防火墙和selinux
bash
systemctl disable firewalld
systemctl stop firewalld
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
2、安装bind
bash
yum install bind bind-utils bind-chroot -y
bind: DNS 服务的主程序包。
bind-utils: 客户端工具
bind-chroot:bind-chroot使bind可以在一个chroot 的模式下运行.也就是说,bind运行时的/(根)目录,并不是系统真正的/(根)目录,只是系统中的一个子目录而已。这样做的目的是为了提高安全性.因为在这个chroot的模式下,bind可以访问的范围仅限于这个子目录的范围里,无法进一步提升,进入到系统的其他目录中.这个是rhel6才有的,rhel5以下是没有的。在rhel6中开启named服务后,会自动挂载,调用chroot功能切换根,可通过mount查看文件挂载:
3、启动服务
bash
systemctl restart named
systemctl status named
systemctl enable named
4、检查服务
perl
ls /var/named/chroot
ps -ef|grep named
netstat -tnlp|grep 53
5、配置bind
配置文件位置:/etc/named.conf

1)授权DNS 服务器管理wuqingyan.top区域,并把该区域的区域文件命名为wuqingyan.top.zone,修改配置文件:


named-checkconf //检查配置文件的语法和完整性
2)添加wuqingyan.top.zone正向解析域配置
css
cp -p /var/named/named.empty /var/named/wuqingyan.top.zone
vim /var/named/wuqingyan.top.zone
$TTL 1D\
wuqingyan.top. IN SOA wuqingyan.top. root.wuqingyan.top. (\
0 ; serial\
1D ; refresh\
1H ; retry\
1W ; expire\
3H ) ; minimum\
wuqingyan.top. IN NS dns.wuqingyan.top.\
dns.wuqingyan.top. IN A 192.168.0.152\
www.wuqingyan.top. IN A 192.168.0.153\
www.wuqingyan.top. IN A 192.168.0.154\
@ IN MX 10 mail.wuqingyan.top.\
mail.wuqingyan.top. IN A 192.168.20.152\
www1.wuqingyan.top. CNAME www.wuqingyan.top.
一个域名对应多个A记录,代表可以轮询

另外一种写法:

3)、添加192.168.0.zone反向域解析配置
ini
cp -p /var/named/named.empty /var/named/192.168.0.zone
vim 192.168.0.zone
$TTL 3H\
@ IN SOA 0.168.192.in-addr.arpa. wuqingyan (\
0 ; serial\
1D ; refresh\
1H ; retry\
1W ; expire\
3H ) ; minimum\
@ IN NS dns.wuqingyan.top.\
152 IN PTR dns.wuqingyan.top.\
153 IN PTR www.wuqigyan.top.\
154 IN PTR www.wuqingyan.top.

3)检查配置文件
named-checkzone检查区域解析库文件的语法和完整性
用法:named-checkzone zonename filename
bash
named-checkzone wuqingyan.top /var/named/wuqingyan.top.zone
named-checkzone wuqingyan.top /var/named/192.168.168.zone

4)修改权限
bash
chown root:named /var/named/wuqingyan.top.zone
chown root:named /var/192.168.168.zone
chmod 640 /var/named/wuqingyan.top.zone
chmod 640 /var/named/192.168.168.zone
5)重启named服务
bash
# systemctl restart named # systemctl status named
6、配置客户端
在客户端配置好DNS服务器地址。
ini
# vim /etc/resolv.conf
nameserver 192.168.0.152
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=192.168.0.152
# systemctl restart network
7、测试
arduino
# ping www.wuqingyan.top

arduino
# dig wuiqngyan.top @192.168.0.152
