今天,我所介绍的是一个互联网上非常基础的服务,是DNS服务器,以下将是我要介绍的内容:包括DNS的原理及工作过程、DNS服务器的搭建、DNS服务器正反向解析、DNS主从服务器、DNS服务器的子域授权、DNS服务器的转发、以及DNS的视图功能。
DNS的原理及工作过程:
DNS:Domain Name System,域名系统,是将域名和IP地址相互映射的分布式数据库,用户只要输入域名,就能转换成域名所对应的IP地址去访问,不需要记忆繁杂的IP地址串,DNS服务器监听在TCP和UDP的53号端口上。
上面,我们提到了DNS是一个分布式数据库,下面我们将通过一张图来了解DNS的结构
如上图所示,这是倒置的树状结构,它的各级域远多于这些,我只是列出部分,我们一次解释一下:
根域:是用来管理互联网的主目录,全球共有13台根服务器,9个在美国,2个在欧洲,1个在日本。
一级域:又称顶级域,刚开始有7个,后来又加了,具体多少大家可以上网了解一下。
com:商业组织,如:google.com
edu:教育机构,如:berkeley.edu
gov:政府部门,如:nasa.gov
mil:军事部门,如:army.mil
net:通常是提供网络基础设施的组织,如:uu.net
org:通常指非盈利性组织,如:linux.org
int:国家组织,如:nato.int
二级域:一般是公司、企业、学校各单位所申请的域名,如magedu
主机名:提供各种服务的主机,如:提供Web服务的www主机
上面,我们看到了DNS的结构图,但是,我们的DNS到底是如何工作的呢?我给出了一个图:
大家第一眼看上去,是不是觉得很乱啊,下面,我为大家一一解释一下:
比如说,我们局域网内的一台普通主机要访问www.google.com这个Web服务器
step1:本地主机会先查看自己的缓存情况,是否有对于的域名的IP,如果没有,则向这个域内
的DNS服务器发起请求。
step2:本地DNS服务器收到请求后,会先查看自己的缓存,如果缓存里没有对应域名的IP,则
本地DNS服务器会向我们的根服务器发起请求。
step3:根收到请求后,发现www.google.com这台主机的com在自己的子域中,根域查看自己查看
自己的数据库,查找对应的com的域的一台服务器的IP地址,返回给本地DNS服务器。
step4:本地DNS服务器得到com的服务器IP地址后,接着向com这台服务器发送这个域名请求。
step5:com域内的服务器收到请求后,发现google这个域在它的下面,然后,com服务器查找自己的
数据库,查找对应google域内的一台DNS服务器的IP地址,返回给本地DNS服务器。
step6:本地DNS服务器收到google的DNS服务器的IP地址后,就向这台google的DNS服务器
发起域名请求。
step7:google域内的这台DNS服务器收到请求后,发现对应的www这台主机的确在自己的域中,
向本地主机返回对应的www这台主机的IP地址。
step8:本地DNS服务器收到google的DNS服务器返回的www主机的IP地址后,将这个IP地址
响应给发起请求的本地主机。
step9:本地的主机收到本地DNS服务发回的响应后,利用得到的IP地址,直接去访问google.com
这台Web服务器。
step10:www这个主机接收到本地主机的请求后,提供响应的服务,并返回数据。
这个过程中,有两个有提到的概念,一个是递归,另一个是迭代:
递归:我们的本地主机将请求发给本地的DNS服务器后,它就一直等待本地DNS服务器给它发回应答,
这个过程就是一个递归地过程
迭代:本地主机发出请求后,我们的本地DNS服务器一次去根域、一级域、二级域发送请求,并返回数据
的这一过程就是迭代。
以上就是DNS的原理以及工作过程。
以下服务器的系统都为CentOS6.5
DNS服务器的搭建,实现正向反向解析
环境准备:以下实验在虚拟机上进行,一台装有linux的虚拟机,一台windows 2003的客户端
提示:如果本机能上网,以上两个主机最好使用nat方式连接,以下过程皆使用yum安装软件包
实验拓扑图如下所示:(及对应主机的IP如图所示)
实验要求:
为magedu这个域建立一台DNS服务器,并能够正反解析
实验过程:
一、正向解析
1、 在linux服务器上安装DNS服务,提供DNS服务的软件为bind 1
2
3
4
5
6
7
8
9
| [iyunv@localhost~]# yum install -y bind
[iyunv@localhost~]# rpm -qa | grep bind
samba-winbind-3.6.9-164.el6.x86_64
bind-libs-9.8.2-0.17.rc1.el6_4.6.x86_64
bind-utils-9.8.2-0.17.rc1.el6_4.6.x86_64
rpcbind-0.2.0-11.el6.x86_64
PackageKit-device-rebind-0.5.8-21.el6.x86_64
samba-winbind-clients-3.6.9-164.el6.x86_64
bind-9.8.2-0.17.rc1.el6_4.6.x86_64 #bind已经安装了
|
2、编辑bind的主配置文件(/etc/named.conf),结果如下所示:
1
2
3
4
5
6
7
8
9
10
11
| [iyunv@localhost ~]# vim /etc/named.conf
options {
directory "/var/named"; #指定域文件所在的目录
recursion yes; #递归请求都允许
};
zone"." IN {
type hint;
file "named.ca";
};
include"/etc/named.rfc1912.zones";
|
3、编辑/etc/named.rfc1912.zones文件,添加我们所要解析的magedu这个域,结果如下所示: 1
2
3
4
5
| [iyunv@localhost~]# vim /etc/named.rfc1912.zones
zone"magedu.com" IN { #添加magedu这个域
type master; #类型,这里是主DNS服务器
file "magedu.com.zone"; #对应的域文件及名称
};
|
4、 手动编辑并生成上面提到的域文件magedu.com.zone 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| [iyunv@localhost~]# cd /var/named/
$TTL 3600
$ORIGIN magedu.com.
@ IN SOA ns.magedu.com. admin.magedu.com. ( #其实授权记录,必须是第一条,且只有一个
2014080601 #解析库版本
2H #同步的时间间隔
10M #重试时间间隔
5D #过期时长
10H #否定答案的缓存时长
)
IN NS ns
IN MX 10 mail
ns IN A 172.16.30.10
mail IN A 172.16.30.50
www IN A 172.16.30.51 #记住这个地址,下面解析会出现
|
5、检查配置文件和域文件配置是否正确。 1
2
3
4
| [iyunv@localhostnamed]# named-checkconf #无结果返回,这就是最好的结果,配置正确
[iyunv@localhostnamed]# named-checkzone "magedu.com" /var/named/magedu.com.zone
zonemagedu.com/IN: loaded serial 2014080601
OK #这边也是没有问题的
|
6、 设置文件权限以及属主、属组。 1
2
3
4
| [iyunv@localhostnamed]# chmod 640 magedu.com.zone
[iyunv@localhostnamed]# chown root:named magedu.com.zone
[iyunv@localhostnamed]# ll magedu.com.zone
-rw-r-----1 root named 206 Aug 5 20:39magedu.com.zone
|
7、 配置没有问题后,我们就可以启动服务了。 1
2
3
| [iyunv@localhostnamed]# service named start
Generating/etc/rndc.key: [ OK ]
Startingnamed: [ OK ] #这样,服务就启动成功了
|
8、利用windows客户端进行验证 先对windows的网络参数进行配置,将DNS服务器的地址指定到上面的DNS服务器改为172.16.30.10,
设置如下:
在windows下执行命令行程序,输入以下命令检测
从上面的结果看出,我们的windows客户端通过DNS服务器解析出来了对应www这台主机对应的IP地址,这是在上方的DNS服务器中定义过了的IP地址。
二、反向解析
1、编辑/etc/named.rfc1912.zones文件,添加我们所要解析的magedu这个域的反向解析域,添加如下:
1
2
3
4
| zone"30.16.172.in-addr.arpa" IN {
type master;
file "172.16.30.zone";
};
|
2、在/var/named下建立172.16.30.zone域文件,配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
| $TTL 3600
@ IN SOA ns.magedu.com. admin.magedu.com. (
2014080601
2H
10M
5D
10H
)
IN NS ns.magedu.com.
10 IN PTR ns.magedu.com. #这里是反向解析记录
51 IN PTR www.magedu.com.
|
3、设置文件权限及属主、属组
1
2
| [iyunv@localhostnamed]# chmod 640 172.16.30.zone
[iyunv@localhostnamed]# chown root:named 172.16.30.zone
|
4、重新加载配置文件,并在windows客户端下检测
1
2
| [iyunv@localhostnamed]# service named reload
Reloadingnamed: [ OK ]
|
在windows测试:
至此,我们的实验就完成了,实验过程中,一定要注意的是,花括号后面的分号,一定不能少,而且,配置介绍后要使用named-checkconf和named-checkzone验证配置文件和域文件是否正确。
主从DNS服务器搭建: 环境准备: 在上一个实验上进行扩展,添加一台linux虚拟机,作为从DNS服务器
拓扑图如下所示:从DNS服务器地址如图所示
实验过程: 1、为从DNS服务器上安装bind软件 1
| [iyunv@localhost~]# yum install -y bind
|
2、 配置从DNS服务器的主配置文件,跟主DNS服务器的一致,配置如下: 1
2
3
4
5
6
7
8
9
10
11
| [iyunv@localhost ~]#vim /etc/named.conf
options {
directory "/var/named";
recursion yes;
};
zone"." IN {
type hint;
file "named.ca";
};
include"/etc/named.rfc1912.zones";
|
3、编辑主配置文件中include进来的文件,即/etc/named.rfc19212.zones,添加如下内容: 1
2
3
4
5
6
| [iyunv@localhost ~]#vim /etc/named.rfc19212.zones
zone "magedu.com" IN {
typeslave; #这个服务器是从DNS服务器
file"slaves/magedu.com.zone"; #域文件在slaves下,对于named这个用户,/var/named这个目录它没有写权限
masters{ 172.16.30.10; }; #指定主DNS服务器的IP地址
};
|
4、检查配置文件,启动从DNS服务器 1
2
3
| [iyunv@localhost~]# named-checkconf
[iyunv@localhost~]# service named start
Startingnamed: [ OK ]
|
5、到主DNS服务器上,加入从服务器的地址,在域文件下配置,即/var/named/magedu.com.zone下 加入以下内容,然后改变解析库版本,一般在原有的基础上加1。 1
2
3
4
5
| 版本库改为:2014080602
添加内容:
IN NS ns
ns2 IN A 172.16.30.30
|
6、 检查配置文件和域文件,没问题后重启主DNS服务器 1
2
3
| [iyunv@localhostnamed]# named-checkconf
[iyunv@localhostnamed]# rndc reload
serverreload successful
|
7、 检测从DNS是否生效,将windows的DNS选项指向从DNS服务器,如下所示: 8、另外,我们还可以检查从DNS服务器的/var/named/slaves目录 1
2
| [iyunv@localhost~]# ls /var/named/slaves/
magedu.com.zone #同步过来了主DNS服务器的域文件
|
DNS服务器的子域授权 实验背景: 假设,我们这个域(magedu.com)内有了一个新的市场部(mkt),它的IP为172.16.130.0/16这些地址,由于各种需求,他们需要建一台DNS服务器如何,能够让外网的主机可以访问到市场部的各种服务。
实验准备: 在上面的拓扑上进行扩展,添加一台linux服务器,作为市场部的DNS服务器
实验拓扑图形:地址如图所示
实验过程: 1、在子域的DNS服务器上安装DNS服务 1
| [iyunv@localhost~]# yum install -y bind
|
2、更改子域DNS服务器上的配置,添加如下的内容 1
2
3
4
5
| #[iyunv@localhost~]# vim /etc/named.rfc1912.zones
zone"mkt.magedu.com" IN {
type master;
file "mkt.magedu.com.zone";
};
|
3、创建区域文件。 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| [iyunv@localhostnamed]# vim /var/named/mkt.magedu.com.zone
$TTL 3600
$ORIGIN mkt.magedu.com. #市场部的域名
@ IN SOA ns.mkt.magedu.com. admin.mkt.magedu.com. (
2014080601
2H
10M
5D
1D
)
IN NS ns
IN MX 10 mail
ns IN A 172.16.100.10
mail IN A 172.16.100.11
www IN A 172.16.100.12
|
4、 检查配置文件和区域文件,更改文件的权限及属主,并启动DNS服务。 1
2
3
4
5
6
7
8
| [iyunv@localhostnamed]# named-checkconf
[iyunv@localhostnamed]# named-checkzone "mkt.magedu.com"/var/named/mkt.magedu.com.zone
zonemkt.magedu.com/IN: loaded serial 2014080601
OK
[iyunv@localhostnamed]#chmod 640 /var/named/mkt.magedu.com.zone
[iyunv@localhostnamed]#chown root:named /var/named/mkt.magedu.com.zone
[iyunv@localhostnamed]# service named start
Startingnamed: [ OK ]
|
5、在父域中添加子域的DNS服务器的地址(172.16.130.10) 1
2
3
4
5
| #vim/var/named/magedu.com.zone
#版本库改为:2014080603
#且添加如下内容:
IN MX 10 mail
mkt IN NS ns.mkt
|
6、检查配置文件和区域文件,如果没有问题,加载它们 1
2
3
4
5
6
7
| [iyunv@localhostnamed]# named-checkconf
[iyunv@localhostnamed]# named-checkzone "magedu.com" /var/named/magedu.com.zone
zonemagedu.com/IN: mkt.magedu.com/NS 'ns.mkt.magedu.com' (out of zone) has noaddresses records (A or AAAA)
zonemagedu.com/IN: loaded serial 2014080602
OK
[iyunv@localhostnamed]# rndc reload
serverreload successful
|
7、用windows客户端检测子域是否能被解析:
|