Linux就该这么学 | 第13章 部署域名解析服务

第13章:使用 BIND 提供域名解析服务

本章学习内容:DNS域名解析服务的原理及其作用;域名查询功能中的正向解析与反向解析;如何在DNS主服务器上部署正、反解析工作模式?如何部署DNS从服务器?如何部署DNS缓存服务器?如何使用chroot牢笼机制插件来保障bind服务的可靠性?如何在DNS主服务器与从服务器之间部署TSIG密钥功能?什么是DNS分离解析技术?

一、认识DNS域名解析服务

1、为什么需要域名解析服务?

相较于由数字构成的 IP 地址,域名更容易被理解和记忆,所以我们通常更习惯通过域名的方式来访问网络中的资源。但是,网络中的计算机之间只能基于 IP 地址来相互识别对方的身份,而且要想在互联网中传输数据,也必须基于外网的 IP 地址来完成

为了降低用户访问网络资源的门槛,DNS(Domain Name System,域名系统)技术应运而生。

2、什么是DNS?什么是正向解析?什么是反向解析?

这是一项用于管理和解析域名与 IP 地址对应关系的技术,简单来说,就是能够接受用户输入的域名或 IP 地址,然后自动查找与之匹配(或者说具有映射关系)的 IP 地址或域名,即将域名解析为 IP 地址(正向解析),或将 IP 地址解析为域名(反向解析)。这样一来,我们只需要在浏览器中输入域名就能打开想要访问的网站了。DNS 域名解析技术的正向解析也是我们最常使用的一种工作模式。

3、DNS是如何解析域名的?

DNS 域名解析服务采用了类似目录树的层次结构来记录域名与 IP 地址之间的对应关系,从而形成了一个分布式的数据库系统,如下图:

Linux就该这么学 | 第13章 部署域名解析服务_第1张图片
DNS域名解析层次

最常见的域名后缀有.com(商业组织)、.org(非营利组织)、.gov(政府部门)、.net(网络服务商)、.edu(教研机构)、.pub(公共大众)、.cn(中国国家顶级域名)等。

4、DNS是如何提升域名解析效率的?

DNS 技术作为互联网基础设施中重要的一环,为了为网民提供不间断、稳定且快速的域名查询服务,保证互联网的正常运转,提供了下面三种类型的服务器:

Linux就该这么学 | 第13章 部署域名解析服务_第2张图片
三种类型的DNS服务器

简单来说,DNS主服务器是用于管理域名和 IP 地址对应关系的真正服务器,DNS从服务器帮助主服务器“打下手”,分散部署在各个国家、省市或地区,以便让用户就近查询域名,从而减轻主服务器的负载压力。DNS缓存服务器不太常用,一般部署在企业内网的网关位置,用于加速用户的域名查询请求。

5、DNS服务是如何执行域名查询任务的?

DNS 域名解析服务采用分布式的数据结构来存放海量的“区域数据”信息,在执行用户发起的域名查询请求时,具有递归查询迭代查询两种方式。

  • 递归查询,是指 DNS 服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果 DNS 服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户。
  • 迭代查询,是指DNS 服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台 DNS 服务器的地址,用户再向这台 DNS 服务器提交请求,这样依次反复,直到返回查询结果。

下图演示了DNS服务器执行域名查询的一般过程:

Linux就该这么学 | 第13章 部署域名解析服务_第3张图片
DNS服务执行域名一般的过程

当用户向网络中指定的 DNS 服务器发起一个域名请求时,通常情况下会由本地DNS服务器向上级的 DNS 服务器发送迭代查询请求;如果该 DNS 服务器没有要查询的信息,则会进一步向上级DNS服务器发送迭代查询请求,直到获得准确的查询结果为止。其中最高级、最权威的根 DNS 服务器总共有 13 台,分布在世界各地,其管理单位、具体的地理位置,以及 IP 地址如下图:

Linux就该这么学 | 第13章 部署域名解析服务_第4张图片
13台最高级的DNS根服务器

二、部署DNS主服务器

1、什么是BIND服务程序?如何安装?

BIND(Berkeley Internet Name Domain,伯克利因特网名称域)服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务程序。

在生产环境中安装部署 BIND 服务程序时建议加上 chroot(俗称牢笼机制)扩展包,以便有效地限制 bind 服务程序仅能对自身的配置文件进行操作,以确保整个服务器的安全。BIND服务程序安装命令如下:

yum  install  bind-chroot

2、关于 BIND 服务程序的配置文件

BIND 服务程序的配置并不简单(在 Linux 系统中,bind 服务程序的名称为 named)。它有三个比较关键的配置文件:

Linux就该这么学 | 第13章 部署域名解析服务_第5张图片
bind服务的配置

1)关于 BIND服务的主配置文件:

vim  /etc/named.conf
Linux就该这么学 | 第13章 部署域名解析服务_第6张图片
/etc/named.conf

2)关于BIND服务的区域配置文件

BIND 服务程序的区域配置文件(/etc/named.rfc1912.zones)用来保存域名和 IP地址对应关系的所在位置。该文件中,定义了保存着“域名与 IP 地址解析规则”的文件所在位置,以及服务类型等内容;而没有包含具体的域名、IP 地址对应关系等信息。

服务类型有三种,分别为 hint(根区域)、master(主区域)、slave(辅助区域),其中常用的 master 和 slave 指的就是主服务器和从服务器。

配置 DNS正向解析和反向解析的做法如下图示:

Linux就该这么学 | 第13章 部署域名解析服务_第7张图片
配置 DNS正向解析和反向解析

接下来的实验,我们将修改 BIND服务的三个配置文件,实现相应的 DNS功能。实验过程中,我们可以使用 named-checkconf 命令和 named-checkzone 命令,分别检查主配置文件和数据配置文件中语法、参数错误

3、DNS正向解析实验

在 DNS 域名解析服务中,正向解析是指根据域名(主机名)查找到对应的 IP 地址。也就是说,当用户输入了一个域名后,bind 服务程序会自动进行查找,并将匹配到的 IP 地址返给用户。这也是最常用的 DNS 工作模式。

1)编辑BIND服务的区域配置文件

vim  /etc/named.rfc1912.zones
Linux就该这么学 | 第13章 部署域名解析服务_第8张图片
/etc/named.rfc1912.zones

2)创建并编辑BIND服务的数据配置文件。

我们可以从/var/named 目录中复制一份正向解析的模板文件(named.localhost),然后把域名和 IP 地址的对应数据填写数据配置文件中并保存。在复制时记得加上-a 参数,这可以保留原始文件的所有者、所属组、权限属性等信息,以便让 bind服务程序顺利地读取该文件内容:

Linux就该这么学 | 第13章 部署域名解析服务_第9张图片
生成geekxia.cn.zone数据配置文件

编辑 geekxia.cn.zone 数据文件:

vim  /var/named/geekxia.cn.zone
Linux就该这么学 | 第13章 部署域名解析服务_第10张图片
geekxia.cn.zone

该数据配置文件中各个字段的含义如下图示:

Linux就该这么学 | 第13章 部署域名解析服务_第11张图片
BIND数据配置文件中各字段及其含义

3)测试DNS正向解析结果。

为了测试DNS正向解析结果,一定要先把 Linux 系统网卡中的 DNS 地址参数修改成本机 IP 地址,这样就可以使用本机提供的 DNS 查询服务了。

nslookup 命令用于检测能否从 DNS 服务器中查询到域名与 IP 地址的解析记录,进而更准确地测试 DNS 服务器是否已经能够为用户提供服务。

Linux就该这么学 | 第13章 部署域名解析服务_第12张图片
nslookup

4、DNS反向解析实验

在 DNS 域名解析服务中,反向解析的作用是将用户提交的 IP 地址解析为对应的域名信息,它一般用于对某个 IP 地址上绑定的所有域名进行整体屏蔽,屏蔽由某些域名发送的垃圾邮件。它也可以针对某个 IP 地址进行反向解析,大致判断出有多少个网站运行在上面。

1)编辑区域配置文件。

反向解析是把 IP 地址解析成域名格式,因此在定义 zone(区域)时应该要把 IP 地址反写,比如原来是 192.168.10.0,反写后应该就是 10.168.192,而且只需写出 IP 地址的网络位即可。

vim  /etc/named.rfc1912.zones
Linux就该这么学 | 第13章 部署域名解析服务_第13张图片
/etc/named.rfc1912.zones

2)编辑数据配置文件。

首先从/var/named 目录中复制一份反向解析的模板文件(named.loopback),然后把下面的参数填写到文件中。其中,IP 地址仅需要写主机位,其填写规范如下图示:

Linux就该这么学 | 第13章 部署域名解析服务_第14张图片
DNS反向解析时数据配置文件的填写规范
cp  -a  named.loopback  192.168.10.arpa
vim  /var/named/192.168.10.arpa
Linux就该这么学 | 第13章 部署域名解析服务_第15张图片
192.168.10.arpa

3)测试DNS反向解析结果。使用 nslookup 命令来检验解析结果,仅需输入 IP 地址即可查询到对应的域名信息

Linux就该这么学 | 第13章 部署域名解析服务_第16张图片
nslookup

三、部署DNS从服务器

DNS从服务器(192.168.10.20)可以从DNS主服务器(192.168.10.20)上获取指定的区域数据文件,从而起到备份解析记录与负载均衡的作用,因此通过部署从服务器可以减轻主服务器的负载压力,还可以提升用户的查询效率。

1)在DNS主服务器(192.168.10.10)中,修改区域配置文件,以允许DNS从服务器的数据更新请求,即修改 allow-update {允许更新区域信息的主机地址;};参数,然后重启DNS主服务器的 BIND服务程序。

vim  /etc/named.rfc1912.zones
systemctl  restart  named
Linux就该这么学 | 第13章 部署域名解析服务_第17张图片
编辑BIND的区域配置文件

2)在DNS从服务器(192.168.10.20)中,安装BIND服务程序,并配置其区域数据文件,填写上它要抓取的区域信息和DNS主服务器的IP地址,然后重启BIND服务。

DNS从服务器的type类型应该是 slave(从),而不再是 master(主)。masters 参数后面应该是DNS主服务器的 IP 地址,而且 file 参数指定了同步数据配置文件所在位置。

yum  install bind-chroot
vim  /etc/named.rfc1912.zones
systemctl  start  named
Linux就该这么学 | 第13章 部署域名解析服务_第18张图片
配置DNS从服务器

3)测试DNS从服务器的解析结果。

当DNS从服务器的 BIND服务程序重启后,通常会自动从DNS主服务器上同步了数据配置文件,并且该文件默认会存放在区域配置文件中所定义的目录位置中。在DNS从服务器(192.168.10.20)上,使用 nslookup 命令来测试域名解析结果。

cd  /var/named/slaves
ls        # 查看从 DNS主服务器上同步过来的数据文件
nslookup      # 测试域名解析结果

四、对DNS服务器之间的区域数据传输进行加密

域名解析服务是互联网基础设施中重要的一环,几乎所有的网络应用都依赖于 DNS 才能正常运行。

互联网中的绝大多数 DNS 服务器(超过 95%)都是基于 BIND 域名解析服务搭建的,而bind 服务程序为了提供安全的解析服务,已经对 TSIG(RFC 2845)加密机制提供了支持。

TSIG 主要是利用了密码编码的方式来保护区域信息的传输(Zone Transfer),即 TSIG 加密机制保证了 DNS 服务器之间传输域名区域信息的安全性。

接下来的实验,我们对DNS主服务器和DNS从服务器之间的区域数据传输进行加密。

1)在DNS主服务器(192.168.10.10)中,使用 dnssec-keygen 命令生成安全的DNS服务密钥。dnssec-keygen命令的使用方法如下图示:

Linux就该这么学 | 第13章 部署域名解析服务_第19张图片
dnssec-keygen

下面命令生成一个128位的 HMAC-MD5 算法的密钥文件(含公钥和私钥文件)。

生成公钥和私钥加密文件:
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST Kmaster-slave.+157+46845
两个密钥文件
Linux就该这么学 | 第13章 部署域名解析服务_第20张图片
查看私钥文件

2)在DNS主服务器中,创建密钥验证文件

进入BIND服务程序用于保存配置文件的目录,把刚刚生成的密钥名称、加密算法和私钥加密字符串按照下面格式写入到 tansfer.key 传输配置文件中。为了安全起见,我们需要把该文件的所属组修改成 named,并把其权限设置得小一点,然后把该文件做一个硬链接到/etc 目录中去。

cd  /var/named/chroot/etc
创建密钥认证文件:
vim  transfer.key
编辑文件的所属组:
chown  root:named  transfer.key
编辑文件的权限:
chmod  640  transfer.key
创建该文件的硬链接:
ln  transfer.key  /etc/transfer.key
transfer.key

3)编辑BIND服务程序的主配置文件,以开启并加载密钥验证功能。

vim  /etc/named.conf
systemctl  restart  named
Linux就该这么学 | 第13章 部署域名解析服务_第21张图片
/etc/named.conf

至此,DNS 主服务器上的 TSIG 密钥加密传输功能就已经配置完成了。

4)配置DNS从服务器(192.168.10.20),使其支持密钥验证功能。其配置做法,几乎和DNS主服务器上的配置一样。首先在DNS从服务器上创建密钥认证文件。

cd  /var/named/chroot/etc
vim  transfer.key
chown  root:named  transfer.key
chmod  640  transfer.key
ln  transfer.key  /etc/transfer.key
transfer.key

然后在DNS从服务器上对BIND主配置文件进行配置,以开启并加载密钥验证功能。

vim  /etc/named.conf
Linux就该这么学 | 第13章 部署域名解析服务_第22张图片
/etc/named.conf

6)至此,DNS主服务器、从服务器上的TSIG 密钥加密传输功能都已经开启了。我们重启 DNS从服务器,即实现了两台DNS服务器之间的数据加密传输,以保证了DNS服务的安全性。

systemctl  restart  named
查看从DNS主服务器传输过来的数据文件:
ls  /var/named/slaves

五、部署DNS缓存服务器

DNS 缓存服务器(Caching DNS Server)是一种不负责域名数据维护的 DNS 服务器。简单来说,缓存服务器就是把用户经常使用到的域名与 IP 地址的解析记录保存在主机本地,从而提升下次解析的效率。

1)在DNS缓存服务器(192.168.10.30)上,安装BIND程序,并配置BIND服务程序的主配置文件,添加缓存转发参数。

yum  install  bind-chroot
vim  /etc/named.conf
systemctl  restart  named
Linux就该这么学 | 第13章 部署域名解析服务_第23张图片
/etc/named.conf

2)在客户机上把DNS服务器地址参数修改成我们的DNS缓存服务器 IP = 192.168.10.30 。然后就可以在客户机上测试DNS缓存服务器了。

Linux就该这么学 | 第13章 部署域名解析服务_第24张图片
修改客户机上的DNS Servers 参数

重启客户机的网络服务,然后使用 nslookup 命令来测试DNS缓存服务器的域名解析结果。

systemctl  restart  network
nslookup

六、部署DNS分离解析技术

所谓的DNS分离解析技术,让位于不同地理范围内的访问者,通过访问同一个域名,可以从不同的服务器(不同IP地址)上获取到相同的网站数据。比如,我们分别为处于北京的 DNS 服务器和处于美国的 DNS 服务器分配不同的 IP 地址,然后让国内读者在访问时自动匹配到北京的服务器,而让海外读者自动匹配到美国的服务器。

Linux就该这么学 | 第13章 部署域名解析服务_第25张图片
同一域名,从不同IP的服务器上获取相同的网站数据

接下来我们手动部署 DNS 服务器并实现分离解析功能,以便让不同地理区域的读者在访问相同的域名时,能解析出不同的 IP 地址。

1)修改BIND服务的主配置文件。

vim  /etc/named.conf
Linux就该这么学 | 第13章 部署域名解析服务_第26张图片
/etc/named.conf

2)编辑BIND服务的区域配置文件。首先清空该区域文件中的数据,使用 cal 参数定义两个变量,使用 view 参数判断用户的IP地址是中国的还是美国的,然而分别加载不同的数据配置文件(geekxia.cn.chian 或 geekxia.cn.usa)。

vim  /etc/named.rfc1912.zones
Linux就该这么学 | 第13章 部署域名解析服务_第27张图片
/etc/named.rfc1912.zones

接着,把两台服务器的IP地址,分别写入到这两个数据配置文件中去,即可实现DNS的分离解析功能。当用户访问 www.geekxia.cn 时,如果用户在中国,则使用 geekxia.cn.china 中的数据配置来获取网站资源;如果用户在美国,则使用 geekxia.cn.usa 中的数据配置来获取网站资源。

3)创建 geekxia.cn.china 数据配置文件。

cd  /var/named
cp  -a  named.localhost  geekxia.cn.china
vim  geekxia.cn.china
Linux就该这么学 | 第13章 部署域名解析服务_第28张图片
geekxia.cn.china的配置指南

4)创建 geekxia.cn.usa 数据配置文件。

cd  /var/named
cp  -a  named.localhost  geekxia.cn.usa
vim  geekxia.cn.usa
Linux就该这么学 | 第13章 部署域名解析服务_第29张图片
geekxia.cn.usa的配置指南

5)重启BIND服务程序,验证DNS分离解析技术的结果。

将客户端主机的 IP 地址分别设置为 122.71.115.1 与 106.185.25.1,将 DNS 地址分别设置为服务器主机的两个 IP 地址。再使用 nslookup 命令测试域名的解析结果。

Linux就该这么学 | 第13章 部署域名解析服务_第30张图片
模拟中国用户测试www.geekxia.cn
Linux就该这么学 | 第13章 部署域名解析服务_第31张图片
模拟美国用户测试www.geekxia.cn

本章复习题

Linux就该这么学 | 第13章 部署域名解析服务_第32张图片
复习题1
Linux就该这么学 | 第13章 部署域名解析服务_第33张图片
复习题2


本章结束 2019-01-10

你可能感兴趣的:(Linux就该这么学 | 第13章 部署域名解析服务)