1 配置场景

image-20220408100538285.png
在Server01上配置DNS服务器

  1. chinaskills.cn域提供域名解析。
  2. www.chinaskills.cndownload.chinaskills.cnmail.chinaskills.cn提供解析。
  3. 添加邮件MX 记录;
  4. 启用内外网解析功能,当内网客户端(172.16.100.128/25,10.10.100./24)请求解析的时候,解析到对应的内部服务器地址,当外部客户端(192.168.10.0/28)请求解析的时候,请把解析结果解析到提供服务的公有地址。
  5. 请将Server04作为上游DNS服务器,所有未知查询都由该服务器处理。

在Server04上配置DNS服务器

  1. 安装BIND9
  2. 启用chroot 功能,限制bind9 在/var/named/chroot 下运行(没有运行在/var/named/chroot目录下,本题全部不得分。);
  3. 其他未知域名解析,统一解析为该本机IP
  4. 创建正向区域“chinaskills.cn”;
  5. 类型为Slave
  6. 主服务器为“Server01”;

2 配置解析

在上述拓扑中,Server01和Server04分别代表内网和外网的DNS服务器。

  • 在开始配置任务之前,需要先搭建如上图的网络拓扑,配置好各台虚拟机的IP地址参数,在RServer上配置好路由转发。
  • 需要在Server04和Server01上安装bind9服务程序,并启动服务。
  • Server04服务器需要做chroot,并限制在/var/named/chroot目录上运行,按照bind配置chroot的操作步骤完成就可以了。
  • Server04服务器添加根区域和根区域配置文件,同时需要将named.conf里面的根提示区域注释掉。
  • Server04服务器的根区域中添加解析“ * ”的泛域名解析的A记录,将所有未知域名解析成Server04的IP地址。
  • 在Server01上创建对chinaskills.cn的正向解析主区域,由于任务要求实现内外网解析不同的地址,所以需要使用bind里面的view(视图)配置选项。(关于view配置,参考《DNS & bind从基础到深入》文献。)
  • 使用view配置,需要将所有的区域都放在view中进行定义,需要定义两个view。(1)将外网查询的chinaskills.cn区域定义放在outside view中,(2)将内网查询的chinaskills.cn区域定义放在inside view中。
  • 为内外网chinaskills.cn区域定义不同的区域文件,具体参数如下。 | | 内网解析IP | 外网解析IP | | —- | —- | —- | | ns.chinaskills.cn | 172.16.100.201 | 192.168.10.2 | | www.chinaskills.cn | 172.16.100.201 | 192.168.10.2 | | download.chinaskills.cn | 172.16.100.202 | 192.168.10.2 | | mail.chinaskills.cn | 172.16.100.202 | 192.168.10.2 | | *.chinaskills.cn | 172.16.100.201 | 192.168.10.2 | | ns2.chinas.skills.cn | 192.168.10.4 | 192.168.10.4 |

  • 在区域中需要添加chinaskills.cn的邮件MX记录。

说明:
(1)Server04上要创建chinaskills.cn的辅助区域,所以,outside view的chinaskills.cn区域配置文件中要做好相应的配置。
(2)外网DNS查询需要和RouterSrv上配置的NAT服务联动(这个在后面题目中解决),所以域名解析的地址是RouterSrv的外网IPi地址。

  • 在Server04上添加chinaskills.cn的辅助区域,从主服务器Server01上获得区域文件。
  • 将Server04配置为Server01的转发服务器(forwarder)。

3 配置过程

3.1 在Server04上安装bind软件

因为对bind做chroot操作,所以安装bind时候连同bind-chroot一并安装

  1. [root@Server04 ~]# yum -y install bind bind-utils bind-chroot
  2. [root@Server04 chroot]# systemctl stop firewalld
  3. [root@Server04 chroot]# systemctl disable firewalld

3.2 对Server04上的bind服务进行chroot

chroot是通过相关文件封装在一个伪根目录内,已达到安全防护的目的,一旦程序被攻破,将只能访问伪根目录内的内容,而不是真实的根目录。BIND安装好之后不会有预制的配置文件,但是在BIND的文档文件夹内(/usr/share/doc/bind-9.9.4),BIND提供了配置文件模板,可以直接拷贝过来。
在CentOS7和UOS20中,在/usr/libexec目录中提供chroot操作的脚本程序,可以通过这个脚本程序来进行chroot操作,默认的chroot操作的目录在/var/named/chroot目录下。
执行setup-named-chroot.sh脚本程序(注意最好使用绝对路径执行)

  1. [root@Server04 ~]# cd /usr/libexec
  2. [root@Server04 libexec]# ls -l setup-named-chroot.sh
  3. [root@Server04 ~]# /usr/libexec/setup-named-chroot.sh /var/named/chroot on /etc/named-chroot.files

启动named-chroot服务,并设置为自启动服务

  1. [root@Server04 named]# systemctl start named-chroot
  2. [root@Server04 named]# systemctl enable named-chroot

说明:启用named-chroot服务之后,所有的配置都在/var/named/chroot目录下进行,它将是named服务器的根目录,后面在Server04上namedf服务中所指的根目录都在/var/named/chroot。
可以使用如下命令查看named-chroot服务的运行状态
image.png

3.3 Server04上配置根域名区域

修改etc/named.conf配置文件中options节的监听IP地址和允许查询的IP地址,如下

  1. listen-on port 53 { 192.168.10.4; };
  2. allow-query { any; };

修改etc/named.conf配置文件中的根域信息
image.png
将上述部分修改如下

  1. zone "." IN {
  2. type master;
  3. file "root.zone"
  4. };

在var/named目录下创建root.zone区域配置文件。

  1. [root@Server04 ~]# cd /var/named/chroot
  2. [root@Server04 chroot]# cd var/named
  3. [root@Server04 named]# ls
  4. chroot data dynamic named.ca named.empty named.localhost named.loopback slaves
  5. [root@Server04 named]# cp -a named.localhost root.zone
  6. [root@Server04 named]# ls -l root.zone
  7. -rw-r----- 1 root named 152 Jul 4 2021 root.zone

修改root.zone的内容如下,然后保存。

  1. $TTL 1D
  2. @ IN SOA @ rname.invalid. (
  3. 0 ; serial
  4. 1D ; refresh
  5. 1H ; retry
  6. 1W ; expire
  7. 3H ) ; minimum
  8. . IN NS ns
  9. ns IN A 192.168.10.4
  10. * IN A 192.168.10.4 #根域名下的泛域名解析

修改完成后,使用命令检查配置文件,重启named-chroot服务

  1. [root@Server04 named]# named-checkzone . root.zone
  2. [root@Server04 named]# named-checkconf /var/named/chroot/etc/named.conf
  3. [root@Server04 named]# systemctl restart named-chroot

在Server04上将Server04作为域名服务器,验证根域名配置是否正确。

  1. [root@Server04 named]# nslookup www.sina.com.cn
  2. Server: ::1
  3. Address: ::1#53
  4. Name: www.sina.com.cn
  5. Address: 192.168.10.4
  6. [root@Server04 named]# nslookup www.lzy.edu.cn
  7. Server: ::1
  8. Address: ::1#53
  9. Name: www.lzy.edu.cn
  10. Address: 192.168.10.4

可以看到,DNS 服务器将任意域名解析到192.168.10.4。

3.4 在Server01上安装bind

在Server01上安装bind(题目没有要求Server01上做chroot,所以这里可以不做)

  1. [root@srever01 ~]# yum -y install bind bind-utils
  2. [root@srever01 ~]# systemctl start named
  3. [root@srever01 ~]# systemctl enable named

修改/etc/named.conf配置文件,修改如下内容,并保存。

  1. listen-on port 53 { 172.16.100.201; };
  2. allow-query { any; };

3.5 在Server01上创建Chinaskills.cn正向查找主区域

(1)修改/etc/named.conf配置文件,(此处省略了原始配置文件中的注释部分)红色部分为修改过的内容,绿色文字为配置注解:
//———————————————————————————————————————————————————————
acl “inside” { 172.16.100.0/25;10.10.100.0/24; };
acl “outside” { !”inside”; any; };
//“inside”和”outside”定义的两个acl,bind软件中可以定义acl来划定不同的客户端范围,acl的定义格式如上所、示,可以使用IP地址。!”inside”表示不包括”inside”中的IP地址。acl要先定义后使用,详见参考文献[1,2]
options {
listen-on port 53 { 172.16.100.201; }
//bind服务监听172.16.100.201的53端口
listen-on-v6 port 53 { ::1; };
directory “/var/named”;
dump-file “/var/named/data/cache_dump.db”;
statistics-file “/var/named/data/named_stats.txt”;
memstatistics-file “/var/named/data/named_mem_stats.txt”;
recursing-file “/var/named/data/named.recursing”;
secroots-file “/var/named/data/named.secroots”;
allow-query { any; };
recursion yes;
dnssec-enable no;
//关闭dnssec功能
dnssec-validation no;
//关闭dnssec-validation功能,关闭此两项功能的目的是为了后面访问192.168.10.4上面的自定义根域名不出错误
bindkeys-file “/etc/named.root.key”;
managed-keys-directory “/var/named/dynamic”;
pid-file “/run/named/named.pid”;
session-keyfile “/run/named/session.key”;
};
logging {
channel default_debug {
file “data/named.run”;
severity dynamic;
};
};

//zone “.” IN {
// type hint;
// file “named.ca”;
//};
//把named.conf中原有的”.”定义注释掉,因为后面要使用view,所有的区域定义都要写到view中去。
//关于视图的定义和使用,参看参考文献[1,2]
view “inside” {
//定义inside 视图,这个视图提供为本机和内网主机提供区域定义
match-clients { localhost;”inside”; };
//match-clients定义了使用该视图的主机localhost和acl inside
zone “chinaskills.cn” IN {
type master;
file “inside.chinaskills.cn.zone”;
};
//这里定义了chinaskills.cn区域
include “/etc/named.rfc1912.zones”;

};
view “outside” {
//定义outside 视图,这个视图提供为外网主机提供区域定义
match-clients { “outside”; };
//match-clients定义了使用该视图的主机acl outside
zone “chinaskills.cn” IN {
type master;
file “outside.chinaskills.cn.zone”;
masterfile-format text;
//定义主区域类型为文本类型
allow-transfer { 192.168.10.4;};
//定义主区域配置文件将复制给192.168.10.4(即外网DNS服务器Server04)
also-notify { 192.168.10.4;} ;
};
//这里定义了chinaskills区域
include “/etc/named.rfc1912.zones”;
};
include “/etc/named.root.key”;
//——————————————————————————————————————————————————————————-
提示:在inside和outside中都定了chinaskills区域,分别用于不同区域客户端的解析,使用了不同的配置文件。

(2)创建inside.chinaskills.cn.zone和outside.chinaskills.cn.zone两个区域配置文件
在/var/named目录下创建区域配置文件inside.chinaskills.cn.zone

  1. [root@srever01 named]# touch inside.chinaskills.cn.zone
  2. [root@srever01 named]# chown root:named inside.chinaskills.cn.zone
  3. [root@srever01 named]# chmod 640 inside.chinaskills.cn.zone

编辑inside.chinaskills.cn.zone,内容如下

  1. $TTL 604800
  2. @ IN SOA chinaskills.cn. root.chinaskills.cn (
  3. 3 ; Serial
  4. 604800 ; Refresh
  5. 86400 ; Retry
  6. 2419200 ; Expire
  7. 604800 ) ; Negative Cache TTL
  8. ;
  9. @ IN NS ns.chinaskills.cn.
  10. ns IN A 172.16.100.201
  11. www IN A 172.16.100.201
  12. download IN A 172.16.100.202
  13. @ IN MX 10 mail.chinaskills.cn.
  14. mail IN A 172.16.100.202
  15. * IN A 172.16.100.201
  16. ns2 IN A 192.168.10.4

提示:
(1)区域配置文件中的一个细节,全称域名(FQDN)中要以”.”结尾,因为这个点是根域名。
(2)上述记录中包含有邮件MX记录,注意其格式是如何的。
在/var/named目录下创建区域配置文件outside.chinaskills.cn.zone

  1. [root@srever01 named]# touch outside.chinaskills.cn.zone
  2. [root@srever01 named]# chown root:named outside.chinaskills.cn.zone
  3. [root@srever01 named]# chmod 640 outside.chinaskills.cn.zone

编辑outside.chinaskills.cn.zone,内容如下

  1. $TTL 604800
  2. @ IN SOA chinaskills.cn. root.chinaskills.cn. (
  3. 2 ; Serial
  4. 604800 ; Refresh
  5. 86400 ; Retry
  6. 2419200 ; Expire
  7. 604800 ) ; Negative Cache TTL
  8. ;
  9. @ IN NS ns.chinaskills.cn.
  10. @ IN NS ns2.chinaskills.cn.
  11. ns IN A 192.168.10.2
  12. ns2 IN A 192.168.10.2
  13. www IN A 192.168.10.2
  14. download IN A 192.168.10.2
  15. mail IN A 192.168.10.2
  16. chinaskills.cn IN MX 1 mail.chinaskills.cn.
  17. * IN A 192.168.10.4

测试inside.chinaskills.cn和outside.chinaskills.cn配置文件的正确性。

  1. [root@srever01 named]# named-checkzone chinaskills.cn inside.chinaskills.cn.zone
  2. zone chinaskills.cn/IN: loaded serial 3
  3. OK
  4. [root@srever01 named]# named-checkzone chinaskills.cn outside.chinaskills.cn.zone
  5. zone chinaskills.cn/IN: loaded serial 2
  6. OK

重启named服务

  1. [root@srever01 named]# systemctl restart named

(3)在Server01、Client、Server03上分别进行DNS客户端的域名解析测试,验证view的配置是否正确
注意:测试之前应该将Server01配置为这些客户端的DNS服务器,并且客户端应该安装好bind-utils。
image.png
image.png
image.png

3.6 在Serve04上创建chinaskills.cn的辅助区域

(1)/var/named/chroot/etc/named.rfc1912.zones配置文件中创建chinaskills.cn的辅助区域,内容如下

  1. zone "chinaskills.cn" IN {
  2. type slave;
  3. masters { 172.16.100.201; };
  4. file "outside.chinaskills.cn.zone";
  5. masterfile-format text;
  6. };

检查配置和重启named-chroot服务

  1. [root@Server04 etc]# named-checkconf named.conf
  2. [root@Server04 etc]# systemctl restart named-chroot

(2)检验是否收到了从chinaskills.cn的主区域服务器上传送过来的区域文件

  1. [root@Server04 chroot]# ls var/named
  2. chroot dynamic named.empty named.loopback root.zone
  3. data named.ca named.localhost outside.chinaskills.cn.zone slaves
  4. [root@Server04 chroot]# ls -l var/named/outside.chinaskills.cn.zone
  5. -rw-r--r-- 1 named named 485 Apr 30 11:06 var/named/outside.chinaskills.cn.zone
  6. [root@Server04 chroot]# cat var/named/outside.chinaskills.cn.zone
  7. $ORIGIN .
  8. $TTL 604800 ; 1 week
  9. chinaskills.cn IN SOA chinaskills.cn. root.chinaskills.cn. (
  10. 2 ; serial
  11. 604800 ; refresh (1 week)
  12. 86400 ; retry (1 day)
  13. 2419200 ; expire (4 weeks)
  14. 604800 ; minimum (1 week)
  15. )
  16. NS ns.chinaskills.cn.
  17. NS ns2.chinaskills.cn.
  18. $ORIGIN chinaskills.cn.
  19. * A 192.168.10.4
  20. chinaskills.cn MX 1 mail
  21. download A 192.168.10.2
  22. mail A 192.168.10.2
  23. ns A 192.168.10.2
  24. ns2 A 192.168.10.2
  25. www A 192.168.10.2

(3)在client和Server02上验证辅助DNS服务器的域名解析
image.png
image.png

3.7 在Server01上配置转发器

(1)修改Server01上配置文件/etc/named.conf,添加和修改如下内容:

allow-query { any; };
recursion yes;
forwarders { 192.168.10.4; };
//这一行是新添加的内容,是Server01的转发器,即Server01凡是遇到不能解析的域名就转发给转发器DNS 服务器进行递归解析
dnssec-enable no;
dnssec-validation no;

说明:
(1)allow-query { any; }; 允许任意主机查询
(2)recursion yes; 允许递归查询
(3)forwarders { 192.168.10.4; }; 设置Server04为转发器,将所有Server01不能转发的域名转发到Server04
(4)dnssec-enable no; dnssec-validation no; 因为Server04不是公网有效根服务器,其上的”.”域不是公网可用根域,是自建私有根域,所以需要关闭bind的安全验证和有效性验证功能。

重启named服务。

  1. [root@server01 ~]# systemctl restart named

(2)在Client上进行验证
image.png

4 参考文献

  1. bind的view配置 https://www.jianshu.com/p/9c2f6f850095
  2. 基于bind实现view功能,实现分IP解析(DNS连载四) https://blog.51cto.com/limeizhi/1379547
  3. linux centos 8 DNS服务器配置 https://blog.csdn.net/qq_57030184/article/details/121507786
  4. centos7 dns(bind-chroot)安装配置.pdf
  5. dns服务器分类和bind-chroot服务配置.pdf
  6. 使用Bind提供域名解析服务.pdf