第六章 DNS服务(1)
6.1 DNS简介
6.1.1 DNS的功能
DNS 是域名系统(Domain Name System) 的缩写,它的功能是将域名解析成ip。我们日常上网浏览网页时,在浏览器(如:IE)的地址栏中常输入的是网站的网址,其实网址这个概念在专业的角度称为域名,即:网址=域名。
而域名主要是给我们人去使用的。我们知道,在网络上,计算机与计算机之间的寻址方式是靠的ip地址。IP地址是四段数字组成的,而我们人去记忆不同网站的ip地址,这种数字化的地址很容易记错或记混,我们人的思维模式更习惯于记忆名称,如:百度、163、QQ等网站,我们可以很轻松的写出它们的网址。所以,为了方便人与主机之间的沟通,在internet上,就需要有一台服务器,记录着网站域名(即网址)与服务器ip的对应关系。类似于表格,当我们上网时,在浏览器地址栏中输入网址,客户端则会向DNS服务器发出询问请求,DNS服务器通过查表得到对应服务器的IP,返回给客户端,客户端再以这个ip地址寻址到达服务器,申请访问web页面。所以,一次上网的过程中,客户端其实会向外发送两次请求,第一次是询问DNS,查表得到web服务器的ip,第二次是按照所获得的ip,寻址找到web服务器请求访问页面。DNS上查表的过程,我们用更专业的术语表示就叫做解析。所以DNS服务器又称为域名解析服务器,其功能就是将域名解析成ip的。
以上过程我们可以想象成生活中的手机电话簿功能:我们可以记住每个朋友的姓名,但我们是记不住每个朋友的手机号的,这就需要用电话簿记录各个朋友的手机号,当我们需要给某个朋友打电话时,一定会先查电话簿,查到电话后,即可拨号打电话了。这里的电话簿的功能就相当于DNS的功能。
6.1.2 DNS命名空间
既然DNS可以负责全球网络的域名解析工作,那么全球的网络必然或有一套严谨的命名规范,那就是DNS命名空间的功能。
我们假设将全球的网络资源都放到一个总的虚拟的域之下,这个总域我们称为根据即.域(点域)。在根域之下,划分为多个二级域,这些域被称为顶级域,顶级域是不允许企业或个人直接申请的,顶级域是由全球的网络维护商按照国家、地区、行业等分配的,如:.cn.表示中国地区,.hk.表示中国香港,.org.表示国际组织,.com.表示工商企业的,.net.表示网络提供商等等。因为所有域都在根域(即.域)之下,所以,一般书写时我们可以把最后的.省略,如:.com .cn等
作为企业或个人,只可以在顶级域下申请子域,申请到子域后即可在子域下指定自己的网络层次了。如下图:
图中,最右侧,假设有个企业在.com顶级域下申请了子域pp,该企业下有一台主机,主机名叫www,所以,它的完整域名就是把域的线路由下向上写上去,之间用.做分隔,即:www.pp.com;图中中间部分,有另一个企业在.cn下注册了子域rzz,rzz下又设置了一个子域bbs,在bbs下有四台主机,那么它们的完整名字即是:www.bbs.rzz.cn等。因为整个域名空间都是在虚拟的域体系之下,所以,每个主机的主机名也都是虚拟的,即是在网络环境中的名字(类似于每个人有真名,但是平时上网时可以使用网名一样,都是虚拟的名字)。只是,在网络上,各企业已经习惯使用www的主机名作为网站服务器的名字,所以大多数网站的域名都是www.XXX.XXX的格式的。
6.1.3 命名相关概念
先来分析一下域名的格式,我们知道上网时在浏览器输入域名后,浏览器会自动在域名前写上http://字样,即指定了通信协议,这种协议 地址的格式我们称为url。
url 统一资源定位符,即协议 完整网络路径,如:http://www.baidu.com。
其实我们日常中常说的链接,专业称谓就是url。如:我们会给朋友要的某网店链接,某电影的下载链接等,这些都是url。
全称域名(FQDN) 其实我们日常中说的域名(如www.baidu.com),严格来讲并不是标准的叫法。在专业的称谓中,一个完整的网址应该称为全称域名,简写FQDN(英文单词为全质量的域名)。而FQDN规定最多由255个字符组成。
域名 标准定义中,域名的概念只是指所在域部分,如:baidu.com。
主机名(又称NetBios名) FQDN中的www部分称为主机名部分。规定主机名最多16个字符,但最后一个字符固定为.(点),所以只有前15个字符可自定义。
小结,可见FQDN是由主机名 域名组成。
6.2 DNS解析原理
6.2.1 客户端解析顺序
首先来介绍一下客户端的申请解析顺序。作为客户端,在上网时会用到DNS解析,但是可以想象到,如果有几个网站,我们经常访问,而每次都需要访问公网的DNS做解析,势必会影响效率。那么,如果本机内有一个文件,记录下所有常用网站的ip,每次上网就可以不必再询问DNS了,这就是静态解析文件的作用。
在Linux中,静态解析文件是/etc/hosts(我们在第一章网络配置中介绍过)。所以,Linux系统的解析顺序是:当有网络访问需要做解析时,Linux先查看/etc/hosts文件中有无相关记录,若有,就按该记录执行了,不再去询问DNS服务器;若此文件中无相关记录,则再去询问DNS服务器做解析。PS:具体配置可参看本书第一章。
对比静态解析文件,DNS解析又被称为动态解析。
6.2.2 DNS支持的解析模式
因为DNS是负责域名与ip对应关系记录的,所以,客户端就会有两种询问情况:一种是客户端拿着域名,请求DNS给查询出ip;另一种是客户端拿着ip,请求DNS给查询出对应的域名。针对这两种情况,在DNS中定义其为两种解析模式:
正向解析:客户端拿着域名,请求DNS解析,获取到ip。
反向解析:客户端拿着ip,请求DNS解析,获取到域名。
6.2.3 DNS解析过程
我们可以想象到,客户端请求解析时,会询问DNS服务器,但全球有那么多台服务器,一台DNS上是不可能记录全球所有服务器的ip的。所以,在全球网络中,DNS的解析过程有一套完整的机制。首先来看一下下图:
如图,假设一台主机,网卡配置中指向了一台DNS服务器,当客户机想要访问www.microsoft.com这个域名时,会向网卡所指向的DNS服务器发出询问,若该dns有相关记录,就会立即回复。但若这台dns服务器无相关记录,则它会向全球的根域(即.)的dns服务器发出询问,根域服务器收到后,并不会返回最终结果,而是,分析域名请求,将域名所在的顶级域(即.com)的dns服务器地址反馈回去(如图中第2步)。则客户机网卡指向的那台dns服务器,再向.com顶级域的dns服务器发出请求,顶级域服务器同样不给最终答案,返回子域的dns服务器地址(图中第3步)。客户端所指向的dns再向子域的dns服务器发送请求,获取到最终答案(图中第4步)。客户端所指向的dns收到解析结果后,先放入缓存中,以备之后又其他客户端再次询问,然后再回复给客户端。
以上便是在全球范围内的解析过程,值得介绍的是,全球的根域dns服务器共有13台,这13台的ip是公开的,在安装dns软件包后,会自动写到相关配置文件中,以便解析时使用。
另外,在以上过程中,我们可以看到作为客户端,只需要发送请求,然后最后接收结果,这种工作模式成为递归模式。即递归模式是指只负责发送请求和接收最后结果,其他步骤都不参与。而客户端指向的dns服务器,它会参与到解析过程中的每一步,它会去询问根域、询问顶级域、询问子域,这种参与到每一步的工作模式称为迭代模式。所以总结可知,查询模式有两种:递归查询、迭代查询。一般客户端都工作在递归模式下,dns服务器都工作在迭代模式下。
6.3 DNS服务部署
下面我们来演示一个实验:部署一台基本的DNS服务器,并让它负责rzz.com域的解析工作。
实验环境:
服务器 Linux 192.168.10.1 关闭防火墙
客户端 windows 192.168.10.10 网卡dns指向 192.168.10.1
配置步骤如下:
1、安装DNS服务
yum -y bind bind-chroot ---安装dns所需软件包
2、编辑主配置文件,创建区域,即新建域
vi /etc/named.conf ---编辑DNS主配置文件
options{}中改:
listen-on port 53 { 192.168.10.1; }; ---指定本机对外提供服务的网卡
directory "/var/named"; ---指定区域文件的存放位置
allow-query { any; }; ---指定针对哪些客户端提供服务
下侧:加入
zone "rzz.com" IN { ---新建正向区域,关键字是zone
type master; ---设定类型为标准主要主区域
file "rzz_zheng"; ---指定区域文件名
allow-update { none; }; ---拒绝动态更新
};
zone "10.168.192.in-addr.arpa" IN { ---新建反向区域
type master;
file "rzz_fan";
allow-update { none; };
};
说明:
1)区域的类型有标准主要区域、辅助区域两种,主要区域就是首选的做各种配置的区域。辅助区域可视为做备用的区域,下一节会详细介绍。
2)file行表示指定该区域的区域文件名字,那么,在创建区域文件时,名字必须与这里指定的名字一致。区域文件中记录各个解析记录,详情见第三步.
3)allow-update行是指定允许哪个服务器做ip的动态更新,即当某服务器更换ip后,通知到DNS服务器上,则DNS服务器更新记录信息。一般都设置为none,即不支持动态更新。
4)反向区域是针对一个ip范围创建区域,这个范围内的ip都由这个区域负责反向解析。反向区域的名字“10.168.192.in-addr.arpa”是固定的书写格式。前面部分是ip地址中前三段的反写,后面的“.in-addr.arpa”是固定字符。
3、创建区域文件,写入记录
cd /var/named ---进入区域文件存放位置
vi rzz_zheng ---创建正向区域文件,对应主配置文件中区域文件名的指定
$TTL 1D ---最小生存期,即设定本缓存的存在时间
@ IN SOA ns1.rzz.com. admin.rzz.com. ( ---SOA指定谁是本域的主dns服务器,后面指定管理员邮箱, @符用.代替
20180319;serial ---序列号,即版本号,主辅更新比较相互的序列号
3H;refresh --- 更新周期,3H=3小时
15M;retry ---失败重试,即更新失败后,隔多久重试
1W;expire ---放弃时间,更新失败,重试坚持多久后放弃
1D;minimum --- 最短生效期,更新失败,发生变化的数据有效多久
) ---注:以上五行内容的功能,将在下节介绍。
@ IN NS ns1.rzz.com. ---指定有哪些dns服务器负责本域解析
@ IN NS ns2.rzz.com.
ns1 IN A 192.168.10.1 ---A记录指定域名对应的ip
ns2 IN A 192.168.10.2 ---对于NS记录必须做A记录的解析
www IN A 192.168.10.100 ---由于没有真正搭建web服务器,先假设www服务器ip是100,一下各条也是如此。
ftp IN A192.168.10.110
xia IN CNAME ftp.rzz.com. ---CNAME记录,设定别名
@ IN MX 10 mail.rzz.com. ---MX记录,指定本域邮件服务器,可以写多条MX记录,10表示优先级,数越小,优先级越高
mail IN A 192.168.10.120
说明:
1)本文件中所有的FQDN中最后的.(根域)不可省略。
2)若有两台或者多台DNS服务器负责当前区域的解析工作,则会有主、辅身份之分,主DNS为日常管理配置的主服务器。辅助DNS为备用机,会跟随主DNS的配置自动更新设置(下节会具体讲解)。所以在此文件中,需要指明都有哪些DNS服务器负责本区域的解析,用NS记录表示。但仅看NS记录是无法区分主、辅身份的,所以使用SOA记录指定谁是主DNS服务器,则其他的皆为辅助DNS了。
3)此文件中的@符表示当前域,所以带@符的配置即表示指定当前域内的NS记录、当前域内的SOA记录等。
4)因为在主配置文件(/etc/named.conf)中已经指定了正向区域的区域名(如rzz.com),此文件只是对应区域创建的区域文件,所以此文件中做解析时无需写明域名,只写主机名即可,如:www IN A 192.168.10.100。
5)此文件中的CNAME记录称为别名记录,是给某个FQDN起另一个名字的。可以理解为一台主机两个名字。
6)每行中的IN关键字,为固定的书写格式,原意表示标准的internet资源记录。
7)MX记录指定负责本域的邮件服务器是谁,再由A记录解析出ip。具体功能参看下图:
如图,假设有一个qq的用户,想要给163的用户发送邮件,按照邮件的通信原理,会先将邮件发送给自己域的邮件服务器(即QQ的邮件服务器,邮件服务遵守SMTP协议),再由QQ的邮件服务器转发给163的邮件服务器,再转给163的用户。但是作为QQ的邮件服务器,当接收到客户的邮件请求时,是不知道163邮件服务器的地址的,所以会向DNS发出询问,DNS会做两步操作:一,查询163.com区域内的MX记录,得到邮件服务器的FQDN,再根据A记录,把FQDN解析成ip,返回QQ的邮件服务器。QQ邮件服务器得到ip后,即可将邮件发送给163的服务器了。另外,MX记录可以写多条,通过数字设置优先级,则DNS会给客户端回复多个邮件服务器的ip,询问者会按优先级转发邮件,若一个发送不通再发给另一个。
下面,再来编写一下反向区域文件
vi rzz_fan
$TTL 1D
@ IN SOA ns1.rzz.com. admin.rzz.com. (
20180319;serial
3H;refresh
15M;retry
1W;expire
1D;minimum
)
@ IN NS ns1.rzz.com.
@ IN NS ns2.rzz.com.
1 IN PTR ns1.rzz.com. --- PTR 反向解析记录
2 IN PTR ns2.rzz.com.
100 IN PTR www.rzz.com.
110 IN PTR ftp.rzz.com.
120 IN PTR mail.rzz.com.
说明:
1)反向文件中的PTR记录是将ip解析成域名的
2)反向文件中只需要写ip地址的第四段数字,因为在主配置文件中反向区域名已经把ip的前三段写明了。
4、启动服务
systemctl restart named
systemctl enable named
配置完毕后,客户端即可检测验证了,我们在windows客户端的网卡上设置DNS指向10.1服务器,如下图:
在cmd界面中使用nslookup命令验证dns解析,如下图:
图中,可见当解析xia.rzz.com时,会显示原名为ftp.rzz.com,xia.rzz.com是别名(aliases)。其实我们在日常上网时,公网上查到的很多都是别名状态,如下图:
图中可见,www.baidu.com其实是网站的别名。其实,公网上很多网站的常用域名都是使用的别名,这是因为很多网站服务器在企业内部有其特殊的命名方式,但为了方便公网用户使用,所以在公网上常用的是别名。
6.4 区域文件记录类型总结
上节实验,我们已经通过区域文件实现了域名的解析,下面来总结一下区域文件中的可用记录类型:
SOA 起始授权机构,指定谁是主DNS
NS 域名服务器,指定本域都有哪些DNS
A 主机记录 ,解析域名=>ip
CNAME 别名记录,给域名起另一个名字
MX 邮件服务器记录,指定本域的邮件服务器
PTR 反向指针记录,解析ip=>域名