DNS工作原理与基本部署
DNS服务器基本原理、利用Bind9搭建本地DNS服务器
一、DNS简介
1.1 DNS的作用
因特网上的主机有多种方式来标识,比如IP地址、主机名、域名等。但是,这些标识方式都有各自的特点,不同的标识方式有不同的优缺点。比如,IP地址是唯一的,但是不容易记忆;主机名(如www.baidu.com
、www.google.com
)是容易记忆的,但是不唯一;域名(如baidu.com
、google.com
)是唯一的,也容易记忆,但是需要通过域名服务器(DNS server)来解析。因此,域名是最常用的标识方式。
DNS(Domain Name System)
是因特网上作为域名
和IP地址
相互映射的一个由分层的DNS服务器实现的分布式数据库,它能够使人更方便地访问因特网。DNS服务器就是存储域名和IP地址映射信息的服务器,它能够将域名解析为IP地址(正向解析
),或者将IP地址解析为域名(反向解析
)。另外,DNS亦指一个使得主机能够查询分布式数据库的应用层协议,DNS协议运行在UDP协议
之上,使用53号端口
。
而DNS服务器一般运行在BIND( Berkeley Internet Name Domain)
软件上,BIND
是一个开源的DNS服务器软件,由Berkeley大学开发,现在由ISC(Internet Systems Consortium)维护。
DNS除了能够实现域名与IP地址之间的映射,还提供了以下服务:
-
主机别名(host aliasing)
: 一个主机可以有多个别名,这样就可以用不同的名字来访问同一个主机。例如,一台拥有着复杂主机名example.hangzhou.zj.gov.cn
的主机,可以通过news.hz.gov.cn
、hz.gov.cn
来访问。其中,news.hz.gov.cn
和hz.gov.cn
都是example.hangzhou.zj.gov.cn
的别名,而example.hangzhou.zj.gov.cn
是news.hz.gov.cn
和hz.gov.cn
的规范主机名
。 -
邮件服务器别名(mail server aliasing)
:除了让主机名更容易记忆,电子邮件地址的便捷性也很重要。例如,如果Albrecht想要一个gmail账户,Albrecht的邮件地址可能就像albrecht@gmail.com这么简单,但是实际上Gmail邮件服务器的主机名可能比这复杂多了,它的规范主机名可能是这样的:mailserver2.california.gmail.com
。因此,邮件服务器别名的引入,就可以让电子邮件应用程序通过调用DNS,对提供的主机名别名(gmail.com
,[注]MX记录
允许邮件服务器和Web服务器使用相同的主机名别名)进行解析,从而得到规范主机名(mailserver2.california.gmail.com
),从而访问邮件服务器。 -
负载分配(load distribution)
:DNS服务器可以将一个被频繁访问的主机名映射到多个IP地址上,这样就可以实现繁忙主机的负载分配。例如,一个主机名www.baidu.com
可以映射到多个IP地址上,当用户访问www.baidu.com
时,DNS服务器会将用户的请求分配到不同的IP地址上,从而降低某一台主机的负载,以实现实现负载分配。
1.2 DNS的工作原理
1.2.1 DNS服务器的层次(分类)
-
根域名服务器(root name server)
:根域名服务器是DNS服务器的最高层,它是DNS服务器的顶级服务器,它存储着顶级域名服务器的地址信息,例如,com
域名服务器的IP地址信息,edu
域名服务器的IP地址信息,gov
域名服务器的IP地址信息等。 -
顶级域名服务器(top-level domain name server)
:顶级域名服务器是DNS服务器的第二层,它存储着权威DNS服务器的地址信息(例如,baidu.com
权威域名服务器的地址信息,hdu.edu
权威域名服务器的地址信息)。 -
权威域名服务器(authoritative name server)
:权威域名服务器是DNS服务器的第三层,它存储着主机名和IP地址的映射关系(例如,www.baidu.com
的主机IP地址信息)。
1.2.2 本地DNS服务器
本地DNS服务器
通常指的是ISP提供的DNS服务器,它并不属于上述的DNS服务器层次,该DNS服务器与用户主机一般只相隔几个路由器而已。当用户主机发起DNS请求时,该请求就会被发往本地DNS服务器,本地DNS服务器起着代理的作用,它会将用户的DNS请求转发到上述的DNS服务器层次中的某一台DNS服务器上,然后将DNS服务器返回的结果返回给用户主机。
1.2.3 DNS服务器的工作流程(不考虑DNS缓存)

假设主机cs.hdu.edu.cn想要访问cs.zju.edu.cn,那么在建立TCP连接前,主机cs.hdu.edu.cn肯定要知道cs.zju.edu.cn的IP地址。这里假设cs.hdu.edu.cn的本地DNS服务器为dns.hdu.edu.cn,且cs.zju.edu.cn的权威服务器为dns.zju.edu.cn。
- 首先,主机
cs.hdu.edu.cn
向本地DNS服务器dns.hdu.edu.cn
发送一个DNS查询报文,请求cs.zju.edu.cn
的IP地址。 - 本地DNS服务器将该报文转发给根域名服务器,根域名服务器根据请求报文中的
edu
前缀,向本地DNS服务器返回edu
域名服务器的IP地址列表
。 - 本地DNS服务器接收到上述
IP地址列表
后,从中选择一个IP地址,向该IP发送一个DNS查询报文,请求cs.zju.edu.cn
的IP地址。 - edu权威域名服务器收到本地DNS服务器的请求报文后,根据请求报文中的
zju.edu
前缀,向本地DNS服务器返回zju.edu
域名服务器的IP地址列表
。 - 本地DNS服务器接收到
zju.edu
域名服务器的IP地址列表
后,从中选择一个IP地址,向该IP发送一个DNS查询报文,请求cs.zju.edu.cn
的IP地址。 - dns.zju.edu.cn权威域名服务器收到本地DNS服务器的请求报文后,根据请求报文中的
cs.zju.edu.cn
目标主机名,向本地DNS服务器返回cs.zju.edu.cn
主机的IP地址。
1.3 DNS记录
资源记录(Resource Record,RR)是DNS数据库中的一条记录(四元组),它包含了一些域名系统中的资源信息,例如域名、IP地址、邮箱地址等。DNS数据库中的每条记录都是一个RR,RR的格式如下:
<name> <TTL> <class> <type> <data>
其中,name
是域名,TTL
是生存时间,class
是类别,type
是类型,data
是数据。
Name和Value的值取决于Type:
- Type=A:Name是主机名,Value是IP地址;
- Type=NS:Name是域名,Value是获得Name域中主机IP地址的权威DNS服务器的主机名;
- Type=CNAME:Name是别名,Value是规范主机名;
- Type=MX:Name是域名,Value是邮件服务器器的规范主机名。
二、搭建本地DNS服务器
以Ubuntu
系统为例,利用BIND
搭建本地DNS服务器。
2.1 安装bind
|
|
2.2 配置bind
在bind9中,/etc/bind/目录保存了bind的配置文件,/var/cache/bind/目录保存了bind的数据库文件。
本文以IPv4地址解析为例,故先指定named只解析IPv4:
|
|
将OPTIONS
选项指定为:
|
|
/etc/bind
目录
|
|
其中,
named.conf
是bind的主配置文件,它包含了其他配置文件的引用;named.conf.options
是bind的配置文件,它包含了bind的配置选项;named.conf.local
是bind的配置文件,它包含了本地域名服务器的配置选项;named.conf.default-zones
是bind的默认配置文件,它包含了默认的域名服务器的配置选项;
2.2.1 编辑named.conf
named.conf内容是由以下三个文件定义的:
|
|
- 首先重新生成rndc密钥:
|
|
- 输出如下:
|
|
- 将上述输出日志的以下部分取消注释
#
,然后追加到named.conf
中:
|
|
- 日志记录
向named.conf
中追加:
|
|
2.2.2 编辑name.conf.options
- name.conf.options内容如下:
|
|
2.2.3 编辑named.conf.local
-
正向解析:将域名解析为IP地址
-
反向解析:将IP地址解析为域名
-
named.conf.local内容如下:
|
|
2.2.4 编辑SOA记录
-
SOA记录是域名服务器的配置文件,它包含了域名服务器的配置信息,如域名服务器的IP地址、域名服务器的管理员邮箱、域名服务器的刷新时间等
-
[根域] 即所谓的“
.
”,比如主机名www.baidu.com
在SOA配置中应该为www.baidu.com.
-
SOA记录的配置文件有两个,分别是正向解析和反向解析的配置文件
-
正向解析的配置文件:
/etc/bind/db.shikaihdu.net
|
|
- 反向解析的配置文件:
/etc/bind/db.rev-shikaihdu.net
|
|
2.2.5 named配置文件检查
- 检查named.conf文件是否有语法错误(会递归检查named.conf中包含的配置)
|
|
- 检查指定域名的配置文件
- 若输出
OK
,表示无语法错误;否则会输出错误信息
- 若输出
|
|
2.3 重载配置
- 重载配置文件:
sudo rndc reconfig
- 重启named服务:
sudo systemctl restart bind9
三、客户机测试
3.1 配置DNS服务器地址
- Linux客户机
- 编辑
/etc/resolv.conf
文件,修改全局DNS:
- 编辑
|
|
- Windows客户机
更改适配器选项
,对网络设备点击“属性”- 取消选择“Internet协议版本6(TCP/IPv6)”
- 选择“Internet协议版本4(TCP/IPv4)”,点击“属性”,修改DNS服务器地址:192.168.1.106

3.2 测试
- Linux客户机
|
|
- Windows客户机
|
|
- 测试结果


五、参考文献
- 《计算机网络:自顶向下方法(第7版)》[美] James F. Kurose, Keith W. Ross 著,李晓峰,王晓军,李晓峰,王晓军 译,机械工业出版社,2017年
- Guide to reverse zones
- DNS解析过程详解
- bind9的基本配置详解(二)
- Linux下配置dns正反向解析服务(基于bind9)
- 使用BIND9在Ubuntu 20.04上配置本地DNS解析器)
- Linux下配置dns正反向解析服务(基于bind9)

