BIND 提供域名解析服务
DNS 域名解析服务
相较于由数字构成的 IP 地址,域名更容易被理解和记忆,所以我们通常更习惯通过域名的方式来访问网络中的资源。但是,网络中的计算机之间只能基于 IP 地址来相互识别对方的身份,而且要想在互联网中传输数据,也必须基于外网的 IP 地址来完成。
域名系统(Domain Name System,DNS)技术是一项用于管理和解析域名与 IP 地址对应关系的技术。简单来说,就是能够接受用户输入的域名或 IP 地址,然后自动查找与之匹配(或者说具有映射关系)的 IP 地址或域名,即将域名解析为 IP 地址(正向解析),将 IP 地址解析为域名(反向解析)。这样一来,只需要在浏览器中输入域名就能打开想要访问的网站了。DNS 域名解析技术的正向解析也是最常使用的一种工作模式。
鉴于互联网中的域名和 IP 地址对应关系数据库太过庞大,DNS 域名解析服务采用了类似目录树的层次结构来记录域名与 IP 地址之间的对应关系,从而形成了一个分布式的数据库系统,如图所示。
域名后缀一般分为国际域名和国内域名。原则上来讲,域名后缀都有严格的定义,但在实际使用时可以不必严格遵守。目前最常见的域名后缀有.com(商业组织)、.org(非营利组织)、.gov(政府部门)、.net(网络服务商)、.edu(教育机构)、.pub(公共大众)、.cn(中国国家顶级域名)等。
DNS 技术作为互联网基础设施中重要的一环,为网民提供不间断、稳定且快速的域名查询服务,保证互联网的正常运转,提供了下面 3 种类型的服务器。
- 主服务器:在特定区域内具有唯一性,负责维护该区域内的域名与 IP 地址之间的对应关系。
- 从服务器:从主服务器中获得域名与 IP 地址的对应关系并进行维护,以防主服务器宕机等情况。
- 缓存服务器:通过向其他域名解析服务器查询获得域名与 IP 地址的对应关系,并将经常查询的域名信息保存到服务器本地,以此来提高重复查询时的效率。
主服务器是用于管理域名和 IP 地址对应关系的真正服务器,从服务器帮助主服务器“打下手”,分散部署在各个国家、省市或地区,以便让用户就近查询域名,从而减轻主服务器的负载压力。缓存服务器不太常用,一般部署在企业内网的网关位置,用于加速用户的域名查询请求。
DNS 域名解析服务采用分布式的数据结构来存放海量的“区域数据”信息,在执行用户发起的域名查询请求时,具有递归查询和迭代查询两种方式。所谓递归查询,是指 DNS 服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果 DNS 服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户。而迭代查询则是指,DNS 服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS 服务器的地址,用户再向这台 DNS 服务器提交请求,这样依次反复,直到返回查询结果。
由此可见,当用户向就近的一台 DNS 服务器发起对某个域名的查询请求之后(这里以www.zxbke.cn为例),其查询流程大致如图所示。
当用户向网络指定的 DNS 服务器发起一个域名请求时,通常情况下会有本地 DNS 服务器向上级的 DNS 服务器发送迭代查询请求;如果该 DNS 服务器没有要查询的信息,则会进一步向上级 DNS 服务器发送迭代查询请求,直到获得准确的查询结果为止。
安装 bind 服务程序
BIND(Berkeley Internet Name Domain,伯克利因特网名称域)服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务程序。DNS 域名解析服务作为互联网基础设施服务,其责任之重可想而知,因此建议大家在生产环境中安装部署 bind 服务程序时加上 chroot(俗称牢笼机制)扩展包,以便有效地限制 bind 服务程序仅能对自身的配置文件进行操作,以确保整个服务器的安全。
[root@RSA ~]# dnf install bind-chroot //安装bind 服务
为提供健全的 DNS 查询服务,要在本地保存相关的域名数据库,而如果把所有域名和 IP 地址的对应关系都写入到某个配置文件中,估计要有上千万条的参数,这样既不利于程序的执行效率,也不方便日后的修改和维护。因此在 bind 服务程序中有下面这 3 个比较关键的文件。
- 主配置文件(/etc/named.conf):只有59行,而且在去除注释信息和空行之后,实际有效的参数仅有30行左右,这些参数用来定义bind服务程序的运行。
- 区域配置文件(/etc/named.rfc1912.zones):用来保存域名和IP地址对应关系的所在位置。类似于图书的目录,对应着每个域和相应IP地址所在的具体位置,当需要查看或修改时,可根据这个位置找到相关文件。
- 数据配置文件目录(/var/named):该目录用来保存域名和IP地址真实对应关系的数据配置文件。
bind 服务程序的名称为 named。首先需要在/etc 目录中找到该服务程序的主配置文件,把第 11 行和第 19 行的地址均修改为 any,分别表示服务器上的所有 IP地址均可提供 DNS 域名解析服务,以及允许所有人对本服务器发送 DNS 查询请求。
[root@serverA ~]# vim /etc/named.conf
......
11 listen-on port 53 { any; };
......
19 allow-query { any; };
......
bind 服务程序的区域配置文件( /etc/named.rfc1912.zones )用来保存域名和 IP地址对应关系的所在位置。
这个文件中,定义了域名与 IP 地址解析规则保存的文件位置以及服务类型等内容,而没有包含具体的域名、IP 地址对应关系等信息。服务类型有 3 种,分别为 hint(根区域)、master(主区域)、slave(辅助区域),其中常用的 master 和 slave 指的就是主服务器和从服务器。
下面的实验中会分别修改 bind 服务程序的主配置文件、区域配置文件与数据配置文件。如果实验中遇到了 bind 服务程序启动失败的情况,如果认为这是由于参数写错而导致的,则可以执行 named-checkconf
命令和 named-checkzone
命令,分别检查主配置文件与数据配置文件中语法或参数的错误。
正向解析示例
正向解析是指根据域名(主机名)查找到对应的 IP 地址。也就是说,当用户输入了一个域名后,bind 服务程序会自动进行查找,并将匹配到的 IP 地址返给用户,如下图所示。这也是最常用的 DNS 工作模式。
第一步:编辑服务程序的主配置文件
在/etc 目录中找到该服务程序的主配置文件,把第 11 行和第 19 行的地址均修改为 any,分别表示服务器上的所有 IP地址均可提供 DNS 域名解析服务,以及允许所有人对本服务器发送 DNS 查询请求。
[root@serverA ~]# vim /etc/named.conf
......
11 listen-on port 53 { any; };
......
19 allow-query { any; };
......
第二步:编辑区域配置文件
编辑区域配置文件( /etc/named.rfc1912.zones )。该文件中默认已经有了一些无关紧要的解析参数可供参考。可将下面的参数添加到区域配置文件的最下面。当然,也可以将该文件中的原有信息全部清空,而只保留自己的域名解析信息。
[root@serverA ~]# vim /etc/named.rfc1912.zones
zone "zxbke.cn" IN{
type master;
file "zxbke.cn.zone";
allow-update {none;};
};
第三步:编辑数据配置文件
编辑数据配置文件。可以从 /var/named
目录中复制一份正向解析的模板文件(named.localhost),然后把域名和 IP 地址的对应数据填写数据配置文件中并保存。在复制时记得加上 -a 参数,这可以保留原始文件的所有者、所属组、权限属性等信息,以便让 bind 服务程序顺利读取文件内容。
[root@serverA ~]# cd /var/named //进入/var/named目录
[root@serverA named]# ls -al named.localhost //查看正向解析的模板文件的权限参数
-rw-r-----. 1 root named 152 Jun 21 2007 named.localhost
[root@serverA named]# cp -a named.localhost zxbke.cn.zone //复制正向解析参数
[root@serverA named]# vim zxbke.cn.zone //内容如下图
[root@serverA named]# systemctl restart named
[root@serverA named]# systemctl enable named
域名解析记录类型
记录类型 | 作用 |
---|---|
A | 将域名指向一个IPV4地址 |
CNAME | 将域名指向另外一个域名 |
AAAA | 将域名指向一个IPV6地址 |
NS | 将子域名指定其他DNS服务器解析 |
MX | 将域名指向邮件服务器地址 |
SRV | 记录提供特定的服务的服务器 |
TXT | 文本内容一般为512字节,常作为反垃圾邮件的SPF记录 |
CAA | CA证书办法机构授权校验 |
显性URL | 将域名重定向到另外一个地址 |
隐性URL | 与显性URL类型,但是会隐藏真实目标地址 |
第四步:检验解析结果(先把 Linux 系统网卡中的 DNS 地址参数修改成本机 IP 地址,这样就可以使用由本机提供的 DNS 查询服务了。
nslookup命令用于检测能否从 DNS 服务器中查询到域名与 IP 地址的解析记录,进而更准确地检验 DNS服务器是否已经能够为用户提供服务。
若解析出的结果不是 192.168.8.10,则很有可能是虚拟机选择了联网模式,并由互联网DNS 服务器进行了解析。此时应确认服务器信息是否为“Address: 192.168.8.10#53”,即由本地服务器 192.168.8.10 的 53 端口号进行解析;若不是,则重启网络后再试下。
反向解析示例
反向解析的作用是将用户提交的 IP 地址解析为对应的域名信息,它一般用于对某个 IP 地址上绑定的所有域名进行整体屏蔽,屏蔽由某些域名发送的垃圾邮件。它也可以针对某个 IP 地址进行反向解析,大致判断出有多少个网站运行在上面。
第一步:编辑服务主配置文件
在/etc 目录中找到该服务程序的主配置文件,把第 11 行和第 19 行的地址均修改为 any,分别表示服务器上的所有 IP地址均可提供 DNS 域名解析服务,以及允许所有人对本服务器发送 DNS 查询请求。
[root@serverA ~]# vim /etc/named.conf
......
11 listen-on port 53 { any; };
......
19 allow-query { any; };
......
第二步:编辑区域配置文件( /etc/named.rfc1912.zones )。
反向解析是把 IP 地址解析成域名格式,因此在定义 zone(区域)时应该要把 IP 地址反写,比如原来是 192.168.10.0,反写后应该就是 10.168.192,而且只需写出 IP 地址的网络位即可。
[root@RSA ~]# vim /etc/named.rfc1912.zones
zone "8.168.192.in-addr.arpa" IN{
type master;
file "192.168.8.arpa";
allow-update {none;};
};
第三步:编辑数据配置文件
首先从/var/named 目录中复制一份反向解析的模板文件(named.loopback),把下面的参数填写到文件中。IP 地址仅需要写主机位,如图所示。
[root@RSA ~]# cd /var/named/
[root@RSA named]# cp -a named.loopback 192.168.8.arpa //复制反向解析模板
[root@RSA named]# vim 192.168.8.arpa //填写下图内容
[root@RSA named]# systemctl restart named
[root@RSA named]# systemctl enable named
第四步:检验解析结果
把系统网卡中的 DNS 地址参数修改成本机 IP 地址,因此可以直接使用 nslookup 命令来检验解析结果,仅需输入 IP 地址即可查询到对应的域名信息。
[root@RSA ~]# nslookup 192.168.8.10
10.8.168.192.in-addr.arpa name = www.zxbke.cn.
[root@RSA ~]# nslookup 192.168.8.20
20.8.168.192.in-addr.arpa name = blog.zxbke.cn.
部署从服务器
作为重要的互联网基础设施服务,保证 DNS 域名解析服务的正常运转至关重要,只有这样才能提供稳定、快速且不间断的域名查询服务。在 DNS 域名解析服务中,从服务器可以从主服务器上获取指定的区域数据文件,从而起到备份解析记录与负载均衡的作用。
在/etc 目录中找到该服务程序的主配置文件,把第 11 行和第 19 行的地址均修改为 any,分别表示服务器上的所有 IP地址均可提供 DNS 域名解析服务,以及允许所有人对本服务器发送 DNS 查询请求。
[root@RSA ~]# vim /etc/named.conf
......
11 listen-on port 53 { any; };
......
19 allow-query { any; };
......
主服务器与从服务器分别使用的操作系统与IP地址信息
主机名称 | 操作系统 | IP地址 |
---|---|---|
主服务器 | RHEL 8 | 192.168.8.10 |
从服务器 | RHEL 8 | 192.168.8.11 |
第一步:编辑区域主配置文件
在主服务器的区域配置文件中允许该从服务器的更新请求,即修改 allow-update {允许更新区域信息的主机地址;};参数,然后重启主服务器的 DNS 服务程序。
[root@RSA ~]# vim /etc/named.rfc1912.zones
zone "zxbke.cn" IN{
type master;
file "zxbke.cn.zone";
allow-update {192.168.8.11;}; //此为允许 11 主机 动态更新
};
zone "8.168.192.in-addr.arpa" IN {
type master;
file "192.168.8.arpa";
allow-update {192.168.8.11;}; //此为允许 11 主机 动态更新
};
//编辑正向解析模板 和 反向解析模板后 重启服务
[root@RSA ~]# systemctl restart named //重启服务
第二步:主服务器上配置防火墙放行规则
[root@RSA ~]# iptables -F //清除防护墙策略
[root@RSA ~]# iptables-save //保存策略
[root@RSA ~]# firewall-cmd --permanent --zone=public --add-service=dns //防火墙放行
[root@RSA ~]# firewall-cmd --reload //重新加载防火墙
第三步:从服务器配置
在从服务器上安装 bind-chroot 软件包。修改配置文件,让从服务器也能够对外提供 DNS 服务,并且测试其与主服务器的网络连通性。
[root@RSB ~]# yum install bind-chroot //安装 bind-chroot 软件包
[root@RSB ~]# vim /etc/named.conf //编辑允许所有IP进行解析服务
......
11 listen-on port 53 { any; };
19 allow-query { any; };
......
第四步:从服务器配置主服务器的 IP 地址与要抓取的区域信息,然后重启服务。
注意此时的服务类型应该是 slave(从),而不再是 master(主)。masters 参数后面应该为主服务器的 IP 地址,而且 file 参数后面定义的是同步数据配置文件后要保存到的位置,稍后可以在该目录内看到同步的文件。这里的 masters 参数比正常的主服务类型master多了个字母s,表示可以有多个主服务器。注意不要漏掉。
[root@RSB ~]# vim /etc/named.rfc1912.zones
zone "zxbke.cn" IN {
type slave;
masters { 192.168.8.10; };
file "slaves/zxbke.cn.zone";
};
zone "8.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.8.10; };
file "slaves/192.168.8.10.arpa";
};
[root@RSB ~]# systemctl restart named //重启服务
第五步:检验解析结果
当从服务器的 DNS 服务程序在重启后,一般就已经自动从主服务器上同步了数据配置文件,而且该文件默认会放置在区域配置文件中所定义的目录位置中。
修改从服务器的网络参数把 DNS 地址参数修改成 192.168.8.20,这样即可使用从服务器自身提供的 DNS 域名解析服务。最后就可以使用 nslookup 命令顺利看到解析结果了。
[root@RSB slaves]# cd /var/named/slaves
[root@RSB slaves]# ls //可以看到从服务器同步了数据配置文件
192.168.8.10.arpa zxbke.cn.zone
----------查看解析结果----------
[root@RSB slaves]# nslookup 192.168.8.10 //查看反向解析结果
10.8.168.192.in-addr.arpa name = www.zxbke.cn.
[root@RSB slaves]# nslookup 192.168.8.20 //查看反向解析结果
20.8.168.192.in-addr.arpa name = blog.zxbke.cn.
[root@RSB slaves]# nslookup www.zxbke.cn //查看正向解析结果
Server: 192.168.8.20
Address: 192.168.8.20#53
Name: www.zxbke.cn
Address: 192.168.8.10
[root@RSB slaves]# nslookup ns.zxbke.cn //查看正向解析结果
Server: 192.168.8.20
Address: 192.168.8.20#53
Name: ns.zxbke.cn
Address: 192.168.8.10
安全的加密传输
域名解析服务是互联网基础设施中重要的一环,几乎所有的网络应用都依赖于 DNS 才能正常运行。如果 DNS 服务发生故障,那么即便 Web 网站或电子邮件系统服务等都正常运行,用户也无法找到并使用它们了。
互联网中的绝大多数 DNS 服务器(超过 95%)都是基于 BIND 域名解析服务搭建的,而 bind 服务程序为了提供安全的解析服务,已经对 TSIG 加密机制提供了支持。TSIG 主要是利用了密码编码的方式来保护区域信息的传输(Zone Transfer),即 TSIG 加密机制保证了 DNS 服务器之间传输域名区域信息的安全性。
接下来的实验依然使用了以上环境的两台服务器。
第一步:在主服务器中生成密钥
dnssec-keygen 命令用于生成安全的 DNS 服务密钥,其格式为“dnssec-keygen [参数]”。dnssec-keygen命令的常用参数如下所示
参数 | 作用 |
---|---|
-a | 指定加密算法,包括RSAMD5(RSA)、RSASHA1、DSA、NSEC3RSASHA1、NSEC3DSA等 |
-b | 密钥长度(HMAC-MD5的密钥长度在1~512位之间) |
-n | 密钥的类型(HOST表示与主机相关) |
使用下述命令生成一个主机名称为 master-slave 的 128 位 HMAC-MD5 算法的密钥文件。在执行该命令后默认会在当前目录中生成公钥和私钥文件,需要把私钥文件中 Key 参数后面的值记录下来,一会儿要将其写入传输配置文件中。
[root@RSA ~]# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-salve //生成密钥
[root@RSA ~]# ls -l Kmaster-salve.+157+48686.*
-rw-------. 1 root root 56 Dec 26 01:07 Kmaster-salve.+157+48686.key
-rw-------. 1 root root 165 Dec 26 01:07 Kmaster-salve.+157+48686.private
[root@RSA ~]# cat Kmaster-salve.+157+48686.private //查看私钥的Key值
......
Key: e8ausK9TS7BZo/6i4L9aEA==
......
第二步:
在主服务器中创建密钥验证文件进入 bind 服务程序用于保存配置文件的目录,把刚刚生成的密钥名称、加密算法和私钥加密字符串按照下面的格式写入 tansfer.key 传输配置文件中。为了安全起见,需要将文件的所属组修改成 named,并将文件权限设置小一点,然后设置该文件的一个硬链接,并指向/etc 目录。
[root@RSA ~]# cd /var/named/chroot/etc/
[root@RSA etc]# vim transfer.key
key "master-slave" {
algorithm hmac-md5;
secret "NI6icnb74FxHx2gK+0MVOg==";
};
[root@RSA etc]# chown root:named transfer.key
[root@RSA etc]# chmod 640 transfer.key
[root@RSA etc]# ln transfer.key /etc/transfer.key
第三步:开启并加载 bind 服务的密钥验证功能
首先需要在主服务器的主配置文件中加载密钥验证文件进行设置,使得只允许带有 master-slave 密钥认证的 DNS 服务器同步数据配置文件。
至此,DNS 主服务器的 TSIG 密钥加密传输功能就已经配置完成。然后清空 DNS 从服务器同步目录中所有的数据配置文件,再次重启 bind 服务程序。这时就已经不能像刚才那样自动获取到数据配置文件了。
第四步:配置从服务器,使其支持密钥验证
配置 DNS 从服务器和主服务器的方法大致相同,都需要在 bind 服务程序的配置文件目录中创建密钥认证文件,并设置相应的权限,然后设置该文件的一个硬链接,并指向/etc 目录。
[root@RSB ~]# cd /var/named/chroot/etc
[root@RSB etc]# vim transfer.key
key "master-slave" {
algorithm hmac-md5;
secret "NI6icnb74FxHx2gK+0MVOg==";
};
[root@RSB etc]# chown root:named transfer.key //设置文件属性
[root@RSB etc]# chmod 640 transfer.key //设置权限
[root@RSB etc]# ln transfer.key /etc/transfer.key //硬链接指向/etc 目录。
第五步:开启并加载从服务器的密钥验证功能
这一步的操作步骤也同样是在主配置文件中加载密钥认证文件,然后按照指定的格式写上主服务器的 IP 地址和密钥名称。注意,密钥名称等参数位置不要太靠前,大约在第 51 行比较合适,否则 bind 服务程序会因为没有加载完预设参数而报错:
[root@serverB etc]# vim /etc/named.conf
......
7 // See /usr/share/doc/bind*/sample/ for example configuration files.
8 //
9 include "/etc/transfer.key"; //添加此行,加载从服务器的密钥验证功能
......
51 server 192.168.8.10 //添加此行,指定主服务器的 IP 地址
52 { //添加此行
53 keys { master-slave; };//添加此行,指定主服务器的密钥名称
54 }; //添加此行
55 ......
第六步:DNS 从服务器同步域名区域数据
现在,两台服务器的 bind 服务程序都已经配置妥当,并匹配到了相同的密钥认证文件。接下来在从服务器上重启 bind 服务程序,可以顺利地同步到数据配置文件了。
[root@serverB etc]# systemctl restart named //重启服务,生成以下文件
[root@serverB etc]# ls -l /var/named/slaves/
total 8
-rw-r--r--. 1 named named 354 Dec 26 01:33 192.168.8.10.arpa
-rw-r--r--. 1 named named 225 Dec 26 01:33 zxbke.cn.zone
部署缓存服务器
DNS 缓存服务器是一种不负责域名数据维护的 DNS 服务器。简单来说,缓存服务器就是把用户经常使用到的域名与 IP 地址的解析记录保存在主机本地,从而提升下次解析的效率。DNS 缓存服务器一般用于经常访问某些固定站点而且对这些网站的访问速度有较高要求的企业内网中,但实际的应用并不广泛。而且,缓存服务器是否可以成功解析还与指定的上级 DNS 服务器的允许策略有关。
虚拟机已恢复初始状态,下面只安装服务,不需要配置解析。
配置系统的双网卡参数。缓存服务器一般用于企业内网,指在降低内网用户查询 DNS 的时间消耗。因此,为了更加贴近真实的网络环境,实现外网查询功能,需要在缓存服务器中再添加一块网卡,并按照表所示的信息配置出两台 Linux 虚拟机系统。
第一步:在 bind 服务程序的主配置文件中添加缓存转发参数。在大约第 20 行处添加一行参数 “ forwarders { 上级 DNS 服务器地址; }; ” ,上级 DNS 服务器地址指的是获取数据配置文件的服务器。考虑到查询速度、稳定性、安全性等因素,这里使用的是公共 DNS 服务器的地址 114.114.144.114
。
[root@serverA ~]# vim /etc/named.conf //编辑配置文件
......
21 forwarders { 114.114.114.114; };
......
[root@serverA ~]# systemctl restart named //重启服务
[root@serverA ~]# iptables -F //清除防火墙策略
[root@serverA ~]# iptables-save //保存策略
[root@serverA ~]# firewall-cmd --permanent --zone=public --add-service=dns //放行DNS
[root@serverA ~]# firewall-cmd --reload //重新加载防火墙
第二步:重启 DNS 服务,验证成果。把客户端主机的 DNS 服务器地址参数修改为 DNS缓存服务器的 IP 地址 192.168.8.10。
[root@RSA named]# nslookup www.zxbke.cn
Server: 192.168.8.10
Address: 192.168.8.10#53
Non-authoritative answer:
www.zxbke.cn canonical name = s5.hk.3vcdn.cn.
Name: s5.hk.3vcdn.cn
Address: 216.118.233.230
缓存DNS服务的配置参数只有一行参数,因此不存在写错的可能性。如果出错了,则大概率有两个可能:上述的 210.73.64.1 服务器可能停用,此时可以改为8.8.8.8或114.114.114.114再重新尝试;有可能是本地网络参数没有生效而导致的,需要检查nslookup输出结果中服务器的地址是否正确。
分离解析技术
为了满足海内外用户的需求,可以购买多台服务器并分别部署在全球各地,然后再使用 DNS 服务的分离解析功能,即可让位于不同地理范围内的用户通过访问相同的网址,从不同的服务器获取到相同的数据。
例如实现分别为处于北京的 DNS服务器和处于美国的 DNS 服务器分配不同的 IP 地址,然后让国内用户在访问时自动匹配到北京的服务器,而让海外用户自动匹配到美国的服务器,如图所示。
第一步:修改 bind 服务程序的主配置文件(/etc/named.rfc1912.zones ),把第 11 行的监听端口与第 19 行的允许查询主机修改为 any。由于配置的 DNS 分离解析功能与 DNS 根服务器配置参数有冲突,所以需要把第 52~55 行的根域信息删除。
第二步:编辑区域配置文件。把区域配置文件中原有的数据清空,然后按照以下格式写入参数。
首先使用 acl 参数分别定义两个变量名称(china 与 america),当下面需要匹配 IP 地址时只需写入变量名称即可,这样不仅容易阅读识别,而且也利于修改维护。view 参数的是通过判断用户的 IP 地址是中国的还是美国的,然后去分别加载不同的数据配置文件
[root@SRA ~]# vim /etc/named.rfc1912.zones
acl "china" { 192.168.8.0/24; };
acl "america" { 192.168.10.0/24; };
view "china"{
match-clients { "china"; };
zone "zxbke.cn" {
type master;
file "zxbke.cn.china";
};
};
view "america" {
match-clients { "america"; };
zone "zxbke.cn" {
type master;
file "zxbke.cn.america";
};
};
第三步:建立数据配置文件。分别通过模板文件创建出两份不同名称的区域数据文件,其名称应与上面区域配置文件中的参数相对应。
[root@SRA ~]# cd /var/named
[root@SRA named]# cp -a named.localhost zxbke.cn.china //复制模板为中国区域解析
[root@SRA named]# cp -a named.localhost zxbke.cn.america //复制模板为国外区域解析
[root@SRA named]# vim zxbke.cn.china
[root@SRA named]# vim zxbke.cn.america
china配置如下
america配置如下
第四步:重新启动 named 服务程序,验证结果。
[root@SRA named]# iptables -F
[root@SRA named]# iptables-save
[root@SRA named]# firewall-cmd --permanent --zone=public --add-service=dns
[root@SRA named]# firewall-cmd --reload
为简缩实验,设置两块网卡,配置本机地址为 192.168.8.100 和 192.168.10.100 可以直接将 www.zxbke.cn 域名解析到本机。ns和www都指向本机地址即可,在Windows客户端分别一一配置对应的DNS服务地址测试即可!