文章目录
- 一、DNS
- 二、域名组成
-
- [1. 域名组成概述](#1. 域名组成概述)
- [2. 域名组成](#2. 域名组成)
- 三、监听端口
- 四、DNS解析种类
-
- [1. 按照查询方式分类:](#1. 按照查询方式分类:)
- [2. 按照查询内容分类:](#2. 按照查询内容分类:)
- 五、DNS服务器搭建过程
-
- [1. 先确保服务器的IP地址是固定的](#1. 先确保服务器的IP地址是固定的)
- [2. 安装DNS软件](#2. 安装DNS软件)
一、DNS
DNS全称Domain Name Service(域名服务),作用是为客户机提供域名解析服务。
二、域名组成
1. 域名组成概述
如"www.sina.com.cn"是一个域名,从严格意义上讲,"sina.com.cn"才被称为域名(全球唯一),而"www"是主机名。
"主机名.域名"称为完全限定域名(FQDN-Full Quality Domain Name)。讲到这里,有的小伙伴可能就纳闷了:主机名和域名有啥区别呢?而且域名不是都全球唯一了吗?怎么还要加个主机名呢?
域名"sina.com.cn"是新浪公司花钱买的,买了之后,公司想为用户提供上网浏览新闻的服务,则又花钱买了一台服务器,这台服务器名字就命名叫"www",然后绑定上买好的域名就可以为用户提供服务了。也就是说"www.sina.com.cn"其实指向的就是新浪公司的某一台具体的服务器,故而又称为"完全限定域名",也就是完全可以精准限定到某一台服务器。后面公司又打算开展邮件收发业务,又买了台服务器,命名叫"mail",域名肯定就不用再买了,继续用已经买的域名为用户提供服务,那这时候用户访问"mail.sina.com.cn",其实就是访问新浪公司内部专门提供邮件服务的那台服务器。
这里我们做个小实验,在控制台里面使用nslookup命令来查看该域名原本的IP地址 ,如下图所示:
通过上述实验就可以看出:www.sina.com.cn 和 mail.sina.com.cn指向的两台不同的服务器。所以通俗的说,主机名就是公司内部的某台服务器名字,而域名是该公司对外的唯一标识。以"sina.com.cn"为例,一般管理员在命名其主机的时候会根据其主机的功能而命名。比如网站的是www,博客的是blog,论坛的是bbs,那么对应的FQDN为www.sina.com.cn,blog.sina.com.cn,bbs.sina.com.cn。虽然有多个FQDN,然而我们只需要申请一个域名即"sina.com.cn"即可。
2. 域名组成
域名组成是树形结构,如下图所示:
根域名是一个点 ".",根域名下面叫顶级域名,也叫一级域名,如.com、.cn、.org等等,我们是买不了的。一级域名下面就是二级域名,如baidu、qq、taobao等等,再往下以此类推。如下示例所示:
如:www.baidu.com.
.为根域名
.com为顶级域
baidu为二级域名
www为主机名
注意:www.baidu.com.,后面是有一个点".",这个点代表的就是根域名,但是我们一般不敲,是浏览器已经给我们敲了,这个点不能没有,代表世界顶尖的那个根服务器。这就代表我们正在访问全世界根下面的com结尾的下面的baidu下面的www那台主机。从世界定位到某个公司内部的某台主机。
FQDN=主机名.DNS后缀
FQDN(完整的域名)
三、监听端口
DNS服务器的端口号是53,但是很特殊,既有TCP,又有UDP
TCP53
UDP53
四、DNS解析种类
DNS服务器为客户机提供解析服务的种类有多种
1. 按照查询方式分类:
- 递归查询:客户机与本地DNS服务器之间
- 迭代查询:本地DNS服务器与根等其他DNS服务器的解析过程
客户机寻求解析的过程:假如客户机现在要访问百度,输入www.baidu.com之后回车,会先看浏览器缓存,如果缓存中没有百度的解析记录,再看本机host文件,还没有,就寻求本地DNS服务器的帮助来解析,这里本地DNS服务器指的不一定是在本公司,而是给自己提供DNS解析服务最近的那台服务器,可能是在本公司,也可能是在当地城市,或者省会城市等。
DNS服务器解析的过程:当客户机把解析请求给到本地DNS服务器之后,本地DNS服务器会查看自身所有域名对应IP信息。问题来了:这台DNS服务器上就一定会有www.baidu.com域名解析信息吗?不一定,因为全世界的域名信息有上亿个,一台服务器不可能包含所有的域名信息。假设本地DNS服务器中没有百度的域名信息,那他会寻求根域的帮助,如上图所示,根域收到请求后,会告诉他.com结尾的顶级域域名解析服务器的IP是多少,因为根域的下一级就是顶级域名,他必然知道自己的下一级是什么,在哪里,然后本地DNS服务器会去请求.com域名服务器,.com域名服务器会告诉他baidu.com域名服务器的IP地址,最后在请求baidu.com域名服务器,该域名服务器会把解析出来的www.baidu.com的真实IP地址给到本地DNS服务器,该服务器又把IP给到客户机,同时他会把这个IP也存入自己的缓存中,以便日后其他客户机再解析时直接可以给到。
从上述两个过程就可以看出:客户机和本地DNS服务器之间是所问皆所答,也就是客户机要域名对应的真实IP,本地DNS服务器就会给到,这种关系也称递归查询;本地DNS服务器与其他服务器之间是所问非所答,他需要逐级遍历请求,这种关系也称迭代查询;
说明:全世界的根服务器只有13台,一台是主根服务器在美国,剩下12台是辅根服务器,其中9个在美国,2个在欧洲(位于英国和瑞典),1个在亚洲(位于日本)。
对于本地DNS服务器来说,只要记住根服务器在哪里就可以。只要自己不知道的域名,都可以访问根服务器,继而找到答案。比如说,我们要把自己的电脑做成DNS服务器,那么从网上下载一个DNS软件,这个软件安装好之后一定内置了13个根服务器IP地址,当自己解析不了的时候,一定会去问根服务器。
很多公司因为业务需求的原因,需要在自己公司内部搭建一个DNS服务器,让公司员工直接指向内部的DNS服务器来解析上网域名。这个服务器称为本地DNS服务器,那么问题来了:我自己搭的服务器需要去找根服务器吗?当然是要的,任何服务器要做DNS解析都必须要找根服务器,也就说,如果公司员工要访问百度,用本地DNS服务器解析的时候,服务器必须要求助于根服务器,因为刚安装好的DNS服务器里面域名文件是空白的,每解析一次,DNS服务器就要去国外访问一次根服务器,而且需要多次迭代查询才可以找到百度。而且我们本地搭建的DNS服务器是轻量级服务器,这样频繁请求外部服务器对他而言很容易超负荷,那怎么办呢?
工程师可以人为给本地DNS服务器加一个转发器,并且转发器指向的是我们当地的公网DNS服务器。这样的话,客户机如果访问百度,请求本地DNS服务器解析域名,本地DNS服务器会先查看缓存,自己如果有解析过百度,是有本地缓存的,如果没有,再看自己是不是负责解析baidu.com域名的服务器,如果也不是,这时候就不是把请求发给根服务器了,而是直接通过转发器甩给指向的那台的公网DNS服务器。转发器的工作原理就是递归查询,我把请求甩给公网DNS服务器,你只要给我结果就行,你那边没有,你自己请求根服务器,然后多次迭代去拿到最终结果给我就行,那我就轻松了。
所以公司一般搭建好自己的DNS服务器之后,会让他通过转发器把解析请求转发给当地的公网DNS服务器,这样很大程度缓解本地DNS服务器的载荷压力。
2. 按照查询内容分类:
- 正向解析:已知域名,解析IP地址
- 反向解析:已知IP地址,解析域名
普通用户用的基本都是正向解析,防火墙会用到反向解析。
五、DNS服务器搭建过程
1. 先确保服务器的IP地址是固定的
我们使用Windows server2003虚拟机作为要搭建DNS的服务器,先查看IP是否固定,步骤如下:
- 鼠标右键点击【网上邻居】,在弹出下来列表中点击【属性】
- 鼠标右键点击【本地连接】,在弹出下来列表中点击【属性】
- 鼠标双击【Internet 协议(TCP/IP)】
- 可以看到是固定的IP地址,如果不是的要改为固定IP
2. 安装DNS软件
安装DNS软件步骤如下:
-
在【我的电脑】里面,双击打开光驱
-
选择【安装可选的 Windows 组件】
-
找到【网络服务】,然后双击打开
-
勾选【域名系统(DNS)】,然后点击【确定】安装
-
在安装DNS域名服务之前,我们先cmd进入控制台,输入命令:netstat -an查看当前所有开放的端口服务,如下图。发现还没有53端口号,因为还没有安装。
-
然后回到刚才的DNS服务安装页面,勾选之后,点击确定,然后点击下一步,开始安装,安装过程中会弹出如下图所示窗口,并且会弹出两次。
-
我们需要将D改为E,因为光驱是装在E盘的,改完之后,点击【确定】,需要改两次,然后确定,下一步
-
安装成功之后,点击【完成】
-
鼠标点击左下角【开始】,点击【所有程序】,点击【管理工具】,就可以看到【DNS】软件已经在里面了
-
然后再cmd进入黑色控制台,输入命令:netstat -an,回车就可以看到TCP和UDP的53号端口都已经打开了,证明DNS服务已经开启了
至此,我这台电脑上的DNS服务就下载完成了,并且我这台电脑是可以正常上网的。员工本来是指向我们城市的公网DNS服务器解析域名上网的,然后我给某个员工说,你的IP、子网掩码都不用动,把DNS手动指向我的IP,请问他能不能上网呢?
答案是可以上网的,给大家解释一下整个原理:我现在什么都没做,只是在电脑上安装了DNS软件,也就是打开了DNS服务。现在员工把请求发给我了,说想要访问百度,上面我也讲了服务器的解析过程,收到请求之后,先看本地有咩有百度的域名解析缓存?我是刚搭建的,肯定是没有,其次看我这台服务器是不是负责该类型域名的解析,我们没有给这台电脑指定让他解析哪方面的域名,没有做这方面的任何配置,所以肯定也不是负责这块解析的。如果都没有,那服务器会找转发器,我也没给这台服务器设置转发器,那就剩最后一个方法-找根服务器。我这台服务器是能上网的,也就是内置了13个根服务器的IP信息的,那就可以去国外找对应的根服务器去迭代解析,最终我是能够把百度解析出来的,并且给到客户机。
其实我们把DNS软件装好之后,我们这台电脑就是一台真正的DNS服务器了,只是这种只安装了DNS软件的服务器,我们称之为:DNS缓存服务器。什么意思呢?也就是我这台服务器其实本身什么类型的解析都不负责,你问我什么域名,我就去根服务器逐级去解析,最后拿到解析后的结果返回给客户机,我一旦问的多了之后,我的本地缓存就会越来越多,而且缓存的时间可以设置的长点,当一段时间后,我把大家经常访问的域名都拿到之后。员工再访问我的时候,我就不用去互联网上找根服务器去问,就可以提高员工访问的速度。假设某天所在城市的公网DNS服务器瘫痪了,我照样可以为大家提供解析服务。所以我们只要把DNS服务软件装好之后,其实就已经是一台完整的DNS服务器了。
下一篇博客我会讲到,给这台DNS服务器进行后续的配置,让他可以真正意义上负责某一类型的域名解析,并进行验证,然后再做一些DNS劫持和转发器的实验。而且转发器是一定要会做,因为公司自己只要有DNS服务器,一定会用到转发器。