一:DNS以及高速缓存DNS概念和作用
<1>DNS
DNS:域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
根域名.
一共有十三个,在美国
<2>高速缓存DNS
概述:为了增加访问效率,计算机有域名缓存机制,当访问过某个网站并得到其IP后,会将其域名和IP缓存下来,下一次访问的时候,就不需要再请求域名服务器获取IP,直接使用缓存中的IP,提高了响应的速度。当然缓存是有有效时间的,当过了有效时间后,再次请求网站,还是需要先请求域名解析。
缓存DNS服务器并不在本地数据库保存任何资源记录,它仅仅缓存本地局域网内客户端的查询结果,从而起到加速查询请求和节省网络带宽的作用,高速缓存dns是个非权威dns。
二:DNS查询的流程以及资源记录
(1)首先,客户端查询本地的DNS服务器。默认情况下,即/etc/resolv.conf文件中所列的第一个名称服务器。
(2)接着本地名称服务器会查询本地数据库和缓存,如果本地数据库中有该资源记录(该服务器对该域进行过本地解析),则返回查询结果。
(3)如果没有,则查询缓存,看看缓存中是否有以前对该资源记录的查询结果,如有,则返回查询结果;如果仍然没有,则会向其他DNS服务器进行递归解析
(4)进入递归解析,本地DNS服务器向根域DNS服务器(Root Nameserver,权威DNS)提出查询请求,
根域DNS服务器会返回顶级域(TLD)DNS服务器地址(例如.com的DNS服务器地址);
本地DNS服务器再次向TLD Nameserver发出查询请求,TLD Nameserver会返回下一级域的DNS服务器地址;依此类推,直到查询到权威的名称服务器(Authoritative Nameserver);
(5)本地DNS服务器从Authoritative Nameserver获得查询结果,将查询结果返回给客户端,并在本地DNS服务器中缓存该查询结果,如果客户端再次提出同样的查询请求,本地DNS服务器直接从缓存中取得对于结果返回给客户端。
DNS资源记录:
DNS区域采用资源记录的形式存储信息,每条资源记录均具有一个类型,表明其保留的数据类型
A | 名称到IPv4的地址 |
---|---|
AAAA | 名称到IPv6的地址 |
CNAME | 名称到“规范名称”(包含A/AAAA 记录的另一个名称) |
PTR | IPv4/IPv6地址到名称 |
MX | 用于名称的邮件交换器(向何处发送其电子邮件) |
NS | 域名的名称服务器 |
SOA | “授权起始”,DNS区域的信息(管理信息) |
三.配置DNS高速缓存服务器的原因和操作
<1>:配置DNS高速缓存服务器的原因
当我们在访问网页时,需要通过DNS服务器去解析网站地址,解析时间很短,但是当DNS访问量非常大时候(一个企业的人都去访问这个服务器),会导致访问网页响应时间变长,影响服务质量。
如图所示:
为了实验环境纯净,建议做这个实验前先将要搭建高速缓存DNS的虚拟机reset,我们将搭建DNS的这台虚拟机命名为dns.westos.com
搭建一个yum源,后面会用到
此时的虚拟机是无法ping通114.114.114.114(114地址是电信搭建的国内免费公共DNS服务器)
我们需要去配置网络,使114.114.114.114能够ping通
重启网络服务
能够ping通114.114.114.114和百度(www.baidu.com)
注意:此块需要了解的知识如下:
DNS排错:
它显示来自DNS查看的详细信息,其中包括为什么查询失败:
NOOERROR | 查询成功 |
---|---|
NXDOMAIN | DNS服务器提示不存在这样的名称 |
SERVFAIL | DNS服务器停机或DNSSEC响应验证失败 |
REFUSED | DNS服务器拒绝回答(也许是出于访问控制原因) |
dig(域名查询工具)输出的部分内容
QUESTION | 提出实际的DNS查询 |
---|---|
ANSWER | 响应(如果有) |
AUTHORITY | 负责域/区域的名称服务器 |
ADDITIONAL | 提供的其他信息,通常是关于名称服务 |
底部的注释 | 指出发送查询的递归名称服务器以及获得响应所花费的时间 |
标题 | 指出关于查询和答案的信息,其中包括响应状态和设置的任何特殊标记 |
<2>:配置DNS高速缓存服务器的操作
由上面的两次dig我们都可以知道,去访问外网DNS的时间都在100兆秒左右,这还只是一台主机,若是多台主机同时去访问(一个企业的人都去访问),肯定会卡的你“痛不欲生”,为了解决这个问题,我们通常会搭建一个本地的(企业的)DNS服务器,这个服务器将客户机要查询到的结果缓存下来,等到第二次另一台主机要查询这个结果,本地的服务器直接将缓存的结果发送给它,这样就大大节省了时间。
为了实现这个目的,我们进行以下操作:
第一步:安装DNS服务
yum search dns 搜寻DNS软件包
yum install bind.x86_64 -y 安装软件包
systemctl start named 开启服务
此时会 自动生成/etc/rndc.key(如果开启不了服务,就是加密字符不够,将虚拟机调整到文本模式(init 3),在真机用ssh连接这个虚拟机,在登陆界面随便敲写字符,此时会在/dev/random里面生成加密字符,恢复图形界面(init 5),再去开启服务)
第二步:设置防火墙
firewall-cmd --list-all 查看是否允许dns服务
firewall-cmd --permanent --add-service=dns 允许dns服务
firewall-cmd --reload 重新加载
此时可以看到允许DNS服务
第三步:查看端口以及编辑配置文件
netstat -antlupe | grep named 查看端口,DNS的端口号为53
vim /etc/named.conf 编辑配置文件
listen-on控制named侦听的IPv4地址
listen-on-v6控制named侦听的IPv6地址
allow-query控制哪些客户端可以向DNS服务器询问信息
forwarders包含DNS查询将转发到的名称服务器的列表(而不是直接联系外部名称的服务器,在设有防火墙的情况中很有用)
第四步重启服务,检查端口号
sysemctl restart named
netstat -antlupe | grep named
测试:
<1>在服务器测试:
将/etc/resolv.conf里面的nameserver改为172.25.254.115
第二次去dig www.taobao.com,发现时间大大缩小
<2>在另一台主机(客户机)上测试:
先将nameserver设置为172.25.254.115