RH358管理DNS和DNS服务器–使用BIND 9配置授权名称服务器
本章节介绍如何使用BIND来配置DNS。
专栏地址:https://blog.csdn.net/qq_41765918/category_11532281.html
文章目录
1. 为权威名称服务器设计体系结构
权威的名称服务器存储DNS资源记录,并为它们管理的区域提供官方答案。Red Hat Enterprise Linux中包含了Berkeley Internet Name Domain (BIND)软件,可以实现权威的名称服务器。
BIND允许您将授权服务器配置为区域的主服务器或辅助服务器。
您可以在主服务器的区域文件中编辑和管理区域的资源记录。一个区域只有一个主服务器。
辅助服务器通过请求区域传输,定期从主服务器下载区域信息的最新版本。他们执行区域传输的频率以及如何判断区域的SOA资源记录是否过期
**重要:**名称服务器可以是某些区域的主服务器,也可以是其他区域的辅助服务器。
**注意:**当RHEL 8发布时,它发布了BIND 9.11 ESV,这是当时软件的最新扩展支持版本。该版本的BIND将主名称服务器称为“主”,将辅助名称服务器称为“从”。
BIND的开发人员已经决定在该软件的未来版本中不再使用“主”和“从”的术语,而分别使用“主”和“辅”,这反映了RFC 8499所记录的共识。为了与现有配置向后兼容,将继续支持主区和从区类型指令。这在BIND 9.14和以后的配置文件中是支持的。
然而,RHEL 8附带的BIND版本还不支持将primary和secondary指令作为这些区域类型的同义词。当Red Hat在某种程度上提供了一个新的BIND扩展支持版本时,比如BIND 9.16 ESV,新的指令将被支持。
当您注册一个新的DNS域时,您必须为该域提供所有公共权威名称服务器的名称和IP地址。您的注册商将该信息放在父域的区域文件中(作为NS、A和AAAA记录),以便DNS解析器可以找到您的名称服务器。为了帮助确保可靠性,您应该至少有两个公共DNS服务器,它们应该位于不同的站点,以避免由于网络故障而停机。
并不是所有的权威服务器都需要公开。例如,您可能决定只使用主服务器来管理区域文件,并将区域信息发布到权威的辅助服务器。主服务器可以是私有的,但辅助服务器将是面向公共的,为外部客户端提供权威的答案。这可以帮助保护您的主服务器免受攻击。
下图显示了外部主机如何使用其缓存名称服务器和权威名称服务器来执行example.com中的记录的DNS查找,假设没有缓存的记录:
外部客户的DNS查找
客户的caching-only名称服务器首先查询一个根名称服务器。它被定向到负责 .com域名的名称服务器池。其中一个服务器响应example.com域的NS记录,因此caching-only名称服务器查询面向公共的次要名称服务器之一。在这个示例中,主名称服务器实际上不是公共的,但是辅助名称服务器可以从主名称服务器执行区域传输,以便它们拥有关于example.com区域的最新数据
下图说明了example.com域内的内部caching-only仅缓存名称服务器的过程是相同的:
通过内部客户端进行DNS解析
更好的方法是提供内部权威辅助服务器,内部名称服务器可以查询这些服务器。这消除了当存在关于本地域的问题时的外部查询,这样更安全。
内部辅助服务器的DNS查找
为此,您需要配置内部缓存名称服务器,将example.com中的记录请求转发到内部辅助服务器。(例如,对于unbound,您需要配置一个适当的forward-zone块。)
2. 安装BIND
通过安装bind包来安装BIND。名称服务器本身作为named服务运行。bind包还在/usr/share/doc/bind/目录中安装了全面的bind文档,包括HTML和PDF格式。
[root@host ~]# yum install bind
Red Hat Enterprise Linux 8的bind包默认将该服务设置为一个基本的递归缓存名称服务器。它还被配置为本地主机和相关域和地址的主服务器,以减轻根名称服务器的负载。此默认配置还限制了仅对本地主机上的程序的访问。侦听IPv4和IPv6 loopback接口的UDP/TCP端口53上的连接,127.0.0.1和::1
在本章的其余部分中,将学习如何修改BIND配置以禁用递归查询支持并提供权威性DNS服务。
3. 配置BIND
named使用的主配置文件为/etc/named.conf。这个文件控制BIND的基本操作。它应该属于root用户,named组,具有权限0640,并具有命名named_conf_t类型
配置文件还指定授权服务器管理的每个区域的区域文件的位置。在RHEL 8上,这些文件通常保存在/var/named.
配置DNS服务器的步骤如下:
-
定义地址匹配列表,便于维护。
-
配置named侦听的IP地址。
-
为客户端配置访问控制。
-
指定区域指示。
-
在/etc/named.conf配置文件外写入区域文件。
定义地址匹配列表
在/etc/named .conf文件的开头,可以使用acl指令来定义地址匹配列表。这些指令不允许或阻止对服务器本身的访问。相反,您可以使用它们来定义一个扩展为IP地址和网络列表的名称。它们提供了方便的别名,可以与访问控制指令和其他配置选项一起使用,并使更新配置文件变得更容易。
表项可以是完整的IP地址或网络,由一个尾随的点(192.168.0.)或CIDR符号(192.168.0/24或2001:db8::/32)表示,或先前定义的地址匹配列表的名称
考虑以下ACL定义:
acl trusted {
192.168.1.21; };
acl classroom {
192.168.0.0/24; trusted; };
有四个预定义的acl内置到named:
预定义的地址匹配列表
ACL | 描述 |
---|---|
none | 没有主机匹配。 |
any | 匹配所有主机。 |
localhost | 匹配DNS服务器的所有IP地址。 |
localnets | 匹配DNS服务器所在子网内的所有主机。 |
匹配DNS服务器所在子网内的所有主机
你可以在/etc/named.conf文件的options指令中指定一些全局设置。其中的前两个(listen-on和listen-on-v6)规定了名称侦听的接口和端口。侦听选项接受一个分号分隔的IPv4地址列表。Listen-on-v6使用IPv6地址。
本例中除了默认的IPv4和IPv6环回地址外,还配置BIND侦听IPv4地址192.0.2.1IPv4地址和IPv6地址2001:db8:2020::5300。
listen-on port 53 {
127.0.0.1; 192.0.2.1; };
listen-on-v6 port 53 {
::1; 2001:db8:2020::5300; };
还可以定义acl,然后在listen-on和listen-on-v6指令中使用它。这是来自/etc/named.conf的一个更完整的示例:
acl interfaces {
127.0.0.1; 192.0.2.1; };
acl interfacesv6 {
::1; 2001:db8:2020::5300; };
options {
listen-on port 53 {
interfaces; };
listen-on-v6 port 53 {
interfacesv6; };
...output omitted...
};
限制访问
/etc/named.conf中的另外三个选项指令对于控制访问非常重要:
-
allow-query控制所有查询。
-
allow-recursive控制递归查询。
-
allow-transfer控制区域转移。
默认情况下,allow-query被设置为localhost,因此公共权威服务器必须定义allow-query { any; }; 允许互联网主机从他们那里获取信息。
权威服务器不应该允许递归查询。这可以防止它被用于DNS 扩大分布式拒绝服务攻击,并更好地保护它免受缓存中毒攻击。最简单的配置方法是完全关闭递归:
recursion no;
如果你必须允许受信任的客户端执行递归,你可以为这些特定的主机或网络打开递归并设置allow-recursive:
recursion yes;
allow-recursion {
trusted-nets; };
区域传输允许客户端获取区域中所有数据的转储。这些应该受到限制,以便潜在的攻击者很难执行一次DNS查询来快速获取区域中的所有资源记录。
您的主服务器必须配置allow-transfer以允许次要服务器执行区域传输。您应该禁止其他主机执行区域传输。您可以允许Localhost执行区域传输以帮助进行故障排除。
注意:如果服务器允许客户端进行区域传输,则可以使用dig请求区域传输。从一个权威的名称服务器中查询区域的AXFR记录:
[user@host ~]$ dig axfr @classroom.example.com example.com
宣布权威的区域
以下named.conf块配置一个服务器来托管example.com的主区域文件及其对应的反向查找区域2.0.192.in-addr.arpa。它作为example.net域的辅助服务器,使用从examplenet ACL标识的一个服务器检索到的区域文件。
file指令指定相对路径名。这些文件的位置由options选项块中的directory目录设置决定,默认为/var/named/。总是配置named.conf将辅助区域文件保存在slaves/ 子目录中,该目录的SELinux类型为named_cache_t。SELinux防止named在其他位置创建文件。
4. 编辑区域文件
区域文件的位置由options选项块中的directory指令和/etc/named.conf中区域配置中的file指令控制。
如果将辅助区域文件保存在/var/named/slaves中,那么当辅助服务器启动时,它会将其缓存的区域版本与主服务器上的当前版本进行比较,如果是最新的,则使用它。如果区域不是最新的或文件不存在,named将执行区域传输并将结果缓存到该文件中。
您应该配置一个主区域,以从/var/named.BIND应该能够读取这些区域文件,但不能写入它们。这些文件应该由root用户拥有,这样,如果守护进程有问题,就不能对它们进行更改。
[root@host ~]# chmod 640 /var/named/*.zone
[root@host ~]# chcon -t named_zone_t /var/named/*.zone
[root@host ~]# chown root:named /var/named/*.zone
区域文件格式
BIND区域文件是一个文本文件,每行包含一个指令或资源记录。如果资源记录的数据中包含一个圆括号,那么它可以跨多行。在同一物理行上,分号 (😉 右边的所有内容都被注释掉。
区域文件可以以$TTL指令开始,该指令为任何没有列出TTL的资源记录设置默认TTL。这允许您一次性调整许多资源记录的TTL,而无需编辑整个文件。如果TTL是一个数字,它是以秒为单位测量的。
$TTL 3600
一个字母可以跟在数字后面指定较长的时间段:
-
M分钟(1M为60)
-
H小时(1H为3600)
-
D天(1D为86400)
-
W周(1W是604800)
每个区域文件只包含一个SOA (Start of Authority)资源记录。考虑以下example.com域的SOA资源记录:
①正在定义的区域的名称(此例子是example.com)。之后是IN SOA,,它标识了记录类和类型(internet SOA记录)。
②这个区域的主名称服务器的名称(primary.example.com)。
③专区负责人的联系邮箱。地址中的第一个点(.)被视为@,所以是root.example.com.代表root@ example.com。
④表示文件修订的序列号。每次文件更改时,该值必须增加。
⑤辅助服务器查询主服务器以查看是否需要区域刷新的频率。
⑥如果由于主服务器宕机而导致刷新失败,辅助服务器应尝试重新连接的频率。
⑦次要服务器在放弃之前应该尝试重新连接无响应的主服务器多长时间。当发生这种情况时,辅助服务器假定该区域不再存在,并停止回答对它的查询
⑧其他名称服务器应该缓存来自该区域的负响应(“没有此类记录”)多长时间。
重要:每次在主服务器上更新区域文件时,必须增加序列号,并重新加载已命名的。当辅助服务器测试是否拥有最新版本的区域文件时,它们只比较序列号。如果它们具有区域的最新序列号,则不执行区域传输。
添加记录到区域文件
一个普通的“转发”区域文件,将名称映射到IP地址和其他记录必须有:
-
SOA记录。
-
每个公共名称服务器的NS记录。
-
区域的另一条A、AAAA、CNAME、MX、SRV、TXT记录。
下面的例子演示了example.com的区域文件:
@字符是zone名称的缩写,在/etc/named.conf中有引用。这有助于避免重复输入,在某些情况下允许重用。区域文件中的SOA记录与前面示例中的相同。
如果该记录的名称为空,则与前一条记录的值相同。因此,在前面的例子中,第一条记录是example.com的SOA记录,接下来的两条记录是example.com的NS记录。然后有一个primary主的A记录,然后是primary主的AAAA记录。
www这个名称有两个A记录。与在文件顶部使用默认TTL的所有其他记录不同,它将这些记录的非默认TTL设置为30秒。
任何不以点结尾的名称都被视为部分主机名,应该将区域名添加为完全限定的域名。换句话说,primary等价于primary.example.com. 在上面的例子中。
这在将IP地址映射到名称的“反向”区域文件中很有用。这些区域文件通常包含SOA记录、NS记录和PTR记录。以2.0.192.in-addr.arpa为例。IP地址的“名称”不需要包含域名的其余部分(使用1代替1.2.0.192.in-addr.arpa):
委派子域
可以将整个子域作为包含其父域的区域文件的一部分来设置和管理。例如,您可以将这样的记录添加到前面的示例中。为服务器servera.lab.example.com和serverb.lab.example.com添加记录的example.com区域文件:
servera.lab IN A 192.0.2.150
serverb.lab IN A 192.0.2.151
但是,可能希望将lab.example.com子域委托为另一个名称服务器上的区域。
例如,假设您希望委派support.example.com子域名到一些其他的名称服务器。可以为你的example.com区域文件添加相应的NS记录:
support IN NS ns.support.example.com.
IN NS ns2.support.example.com.
要找到名称服务器的IP地址,您需要知道名称服务器的IP地址。在这种特殊情况下,当子域名服务器位于其授权的子域名中,您必须为example.com区域文件中的每个子域名服务器添加一条a或AAAA资源记录:
ns.support.example.com. IN A 192.100.100.10
ns2.support.example.com. IN A 192.100.100.11
5. 验证您的配置
在重新加载或重新启动.conf文件之前,应该验证/etc/named.conf和zone文件的语法
-
named-checkconf验证/etc/named.conf
-
named-checkzone zone zone-file验证zone-file中zone的zone文件
在某些情况下,验证不在默认位置的配置文件的语法,例如
[root@host ~]# named-checkconf /media/backups/named.conf
当您启动服务器时,您应该监视系统日志中的错误。单个错误可能导致无法加载整个区域,但是,由于无法加载一个区域并不会阻止守护进程启动,因此,除非在启动期间监视系统日志,否则可能不会明显地看出有任何错误。
[root@host ~]# journalctl -f _SYSTEMD_UNIT=named.servic
使用host -l DOMAIN或dig -t AXFR DOMAIN命令初始化一个zone传输,生成所有zone记录的列表。请记住,这必须在服务器的allow-transfer指令中列出的主机上执行。
6. 运行BIND
配置防火墙允许DNS请求
Red Hat Enterprise Linux 8默认配置允许出站查询DNS,但禁止所有入站查询DNS。防火墙有支持DNS的服务规则。以下命令持续启用DNS入方向流量:
[root@host ~]# firewall-cmd --add-service=dns --permanent
[root@host ~]# firewall-cmd --reload
启动绑定
启动并启用BIND。
[root@host ~]# systemctl start named
[root@host ~]# systemctl enable named
7. 课本练习
[student@workstation ~]$ lab dns-bind start
该命令确保bastion服务器为DNS使用BIND,并委托backend.lab.example.com区域设置为serverb.lab.example.com。它使用192.168.0.10到192.168.0.13的IPv4地址在servera到serverd上配置第二个网络接口。它还通过接口配置fde2:6494:1e09:2::a到fde2:6494:1e09:2::d的IPv6地址。
1. 将serverb配置为本地主机域的主名称服务器。
[root@serverb ~]# yum -y install bind
将BIND配置为本地主机域及其反向域的非递归权威DNS服务器。默认情况下,绑定包应该为这些正向和反向查找配置区域和区域文件。
但是,默认情况下,named只侦听loopback接口上的连接,因此您需要修改它的配置:
-
让服务器使用任意值监听所有IPv4和IPv6接口。
-
允许从localhost、bastion.lab.example.com (IP地址172.25.250.254)和后端backend.lab.example.com (192.168.0.0/24)子网下的任何主机进行查询。
-
禁用递归。
-
删除root (.) 提示节。因为禁用了递归,所以不需要它。
[root@serverb ~]# grep -v ^# /etc/named.conf | grep -v ^/
options {
listen-on port 53 {
any; };
listen-on-v6 port 53 {
any; };
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query {
localhost; 172.25.250.254; 192.168.0.0/24; };
recursion no;
dnssec-enable yes;
dnssec-validation yes;
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
include "/etc/crypto-policies/back-ends/bind.config";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
[root@serverb ~]# firewall-cmd --add-service=dns --permanent
success
[root@serverb ~]# firewall-cmd --reload
success
[root@serverb ~]# systemctl enable --now named
2. 确认serverb应答本地主机查询而不是lab.example.com网络。
在servera上查询来自lab.example.com地址的localhost.localdomain。这个操作会失败,因为BIND只允许bastion从该网络进行查询。
[student@servera ~]$ dig localhost.localdomain @172.25.250.11
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el8 <<>> localhost.localdomain @172.25.250.11
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 6719
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: b166992e9c73abc172ff75e460c5cdd8eded1b6aca0097dd (good)
;; QUESTION SECTION:
;localhost.localdomain. IN A
;; Query time: 1 msec
;; SERVER: 172.25.250.11#53(172.25.250.11)
;; WHEN: Sun Jun 13 17:20:24 CST 2021
;; MSG SIZE rcvd: 78
查询来自backend.lab.example.com地址的localhost.localdomain。这是因为BIND允许来自该子网的所有查询。
[student@servera ~]$ dig localhost.localdomain @192.168.0.11
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el8 <<>> localhost.localdomain @192.168.0.11
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30852
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 69b8e5ea2e3ca9d23bf9960e60c5ce881ad394a2fc620916 (good)
;; QUESTION SECTION:
;localhost.localdomain. IN A
;; ANSWER SECTION:
localhost.localdomain. 86400 IN A 127.0.0.1
;; AUTHORITY SECTION:
localhost.localdomain. 86400 IN NS localhost.localdomain.
;; ADDITIONAL SECTION:
localhost.localdomain. 86400 IN AAAA ::1
;; Query time: 1 msec
;; SERVER: 192.168.0.11#53(192.168.0.11)
;; WHEN: Sun Jun 13 17:23:20 CST 2021
;; MSG SIZE rcvd: 136
3. 按要求创建区域文件。
注意:虽然应该自己创建这个文件,但是可以在http://materials.example.com/solutions/dns-bind上找到副本进行比较。
wget http://materials.example.com/solutions/dns-bind/backend.lab.example.com.zone
# 将缺省生存时间定义为300秒,并创建SOA条目。
$TTL 300
@ IN SOA serverb.backend.lab.example.com. dnslab.example.com. (
2021061300 ; serial
1H ; refresh
5M ; retry
1W ; expire
1M ) ; minimum
# 添加一条NS记录,将serverb定义为此域的权威名称服务器。给它指定600秒的生存时间。
; owner TTL CL type RDATA
600 IN NS serverb
# 添加A记录映射的IPv4地址。
servera IN A 192.168.0.10
serverb IN A 192.168.0.11
serverc IN A 192.168.0.12
serverd IN A 192.168.0.13
# 添加AAAA记录映射的IPv6地址。
servera IN AAAA fde2:6494:1e09:2::a
serverb IN AAAA fde2:6494:1e09:2::b
serverc IN AAAA fde2:6494:1e09:2::c
serverd IN AAAA fde2:6494:1e09:2::d
# 确保指定组的区域文件是可读的,而不是可写的。
[root@serverb ~]# chmod 640 /var/named/backend.lab.example.com.zone
[root@serverb ~]# chgrp named /var/named/backend.lab.example.com.zone
4. 配置BIND以使用新的区域文件来响应后端转发查找。
[root@serverb ~]# vim /etc/named.backend.conf
zone "backend.lab.example.com" IN {
type master;
file "backend.lab.example.com.zone";
forwarders {
};
};
# 确保新的BIND配置文件对named组是可读的,而不是可写的。
[root@serverb ~]# chmod 640 /etc/named.backend.conf
[root@serverb ~]# chgrp named /etc/named.backend.conf
# 添加配置文件包含所写的配置文件
[root@serverb ~]# vim /etc/named.conf
include "/etc/named.backend.conf";
# 重启服务
[root@serverb ~]# systemctl restart named
5. 测试查找。
[student@servera ~]$ dig serverc.backend.lab.example.com @192.168.0.11
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el8 <<>> serverc.backend.lab.example.com @192.168.0.11
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37496
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: def510f3e2f30f35c7aff36c60c5dd8f1741258a22f9dc04 (good)
;; QUESTION SECTION:
;serverc.backend.lab.example.com. IN A
;; ANSWER SECTION:
serverc.backend.lab.example.com. 300 IN A 192.168.0.12
;; AUTHORITY SECTION:
backend.lab.example.com. 600 IN NS serverb.backend.lab.example.com.
;; ADDITIONAL SECTION:
serverb.backend.lab.example.com. 300 IN A 192.168.0.11
serverb.backend.lab.example.com. 300 IN AAAA fde2:6494:1e09:2::b
;; Query time: 0 msec
;; SERVER: 192.168.0.11#53(192.168.0.11)
;; WHEN: Sun Jun 13 18:27:27 CST 2021
;; MSG SIZE rcvd: 170
[student@servera ~]$ dig serverc.backend.lab.example.com @bastion.lab.example.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el8 <<>> serverc.backend.lab.example.com @bastion.lab.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60821
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: ae1c203a15768c96e471b11960c5ddfab41f88b743c797b2 (good)
;; QUESTION SECTION:
;serverc.backend.lab.example.com. IN A
;; ANSWER SECTION:
serverc.backend.lab.example.com. 300 IN A 192.168.0.12
;; AUTHORITY SECTION:
backend.lab.example.com. 86400 IN NS serverb.lab.example.com.
;; ADDITIONAL SECTION:
serverb.lab.example.com. 600 IN A 172.25.250.11
;; Query time: 2 msec
;; SERVER: 172.25.250.254#53(172.25.250.254)
;; WHEN: Sun Jun 13 18:29:14 CST 2021
;; MSG SIZE rcvd: 142
# 请注意A记录的生存时间值为300秒。
# 再次执行相同的DNS查询。生存时间值小于300秒,因为bastion依赖于其缓存中的值。
[student@servera ~]$ dig serverc.backend.lab.example.com @bastion.lab.example.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el8 <<>> serverc.backend.lab.example.com @bastion.lab.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46261
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: c2dc15fcf24673d5658fb98a60c5deb8a7529e598f7cda25 (good)
;; QUESTION SECTION:
;serverc.backend.lab.example.com. IN A
;; ANSWER SECTION:
serverc.backend.lab.example.com. 110 IN A 192.168.0.12
;; AUTHORITY SECTION:
backend.lab.example.com. 86400 IN NS serverb.lab.example.com.
;; ADDITIONAL SECTION:
serverb.lab.example.com. 600 IN A 172.25.250.11
;; Query time: 0 msec
;; SERVER: 172.25.250.254#53(172.25.250.254)
;; WHEN: Sun Jun 13 18:32:24 CST 2021
;; MSG SIZE rcvd: 142
6. 按要求创建区域文件。
[root@serverb ~]# vim /var/named/192.168.0.zone
$TTL 300
@ IN SOA serverb.backend.lab.example.com. dnslab.example.com. (
0 ; serial
1H ; refresh
5M ; retry
1W ; expire
1M ) ; minimum
; owner TTL CL type RDATA
600 IN NS serverb.backend.lab.example.com.
10 IN PTR servera.backend.lab.example.com.
11 IN PTR serverb.backend.lab.example.com.
12 IN PTR serverc.backend.lab.example.com.
13 IN PTR serverd.backend.lab.example.com.
[root@serverb ~]# vim /var/named/fde2.6494.1e09.2.zone
$TTL 300
@ IN SOA serverb.backend.lab.example.com. dnslab.example.com. (
0 ; serial
1H ; refresh
5M ; retry
1W ; expire
1M ) ; minimum
; owner TTL CL type RDATA
600 IN NS serverb.backend.lab.example.com.
A.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR servera.backend.lab.example.com.
B.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR serverb.backend.lab.example.com.
C.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR serverc.backend.lab.example.com.
D.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR serverd.backend.lab.example.com.
# 注意:每个PTR记录应该在一行上。
[root@serverb ~]# chmod 640 /var/named/*.zone
[root@serverb ~]# chgrp named /var/named/*.zone
[root@serverb ~]# vim /etc/named.backend.conf
zone "backend.lab.example.com" IN {
type master;
file "backend.lab.example.com.zone";
forwarders {
};
};
zone "0.168.192.in-addr.arpa" IN {
type master;
file "192.168.0.zone";
forwarders {
};
};
zone "2.0.0.0.9.0.E.1.4.9.4.6.2.E.D.F.ip6.arpa" IN {
type master;
file "fde2.6494.1e09.2.zone";
forwarders {
};
};
[root@serverb ~]# systemctl restart named
7. 确认服务器响应反向DNS查找。
[root@serverb ~]# dig -x 192.168.0.13 @localhost
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el8 <<>> -x 192.168.0.13 @localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41654
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: dff4d13ab18e64a624f1753460c5e1488fdcf39267055d1d (good)
;; QUESTION SECTION:
;13.0.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
13.0.168.192.in-addr.arpa. 300 IN PTR serverd.backend.lab.example.com.
;; AUTHORITY SECTION:
0.168.192.in-addr.arpa. 600 IN NS serverb.backend.lab.example.com.
;; ADDITIONAL SECTION:
serverb.backend.lab.example.com. 300 IN AAAA fde2:6494:1e09:2::b
serverb.backend.lab.example.com. 300 IN A 192.168.0.11
;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Sun Jun 13 18:43:20 CST 2021
;; MSG SIZE rcvd: 193
[root@serverb ~]# dig -x fde2:6494:1e09:2::d @localhost
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el8 <<>> -x fde2:6494:1e09:2::d @localhost
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41655
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 1a31b9f51da36b31109513f360c5e16e9289bac87aff8f20 (good)
;; QUESTION SECTION:
;d.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.9.0.e.1.4.9.4.6.2.e.d.f.ip6.arpa. IN PTR
;; ANSWER SECTION:
D.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.2.0.0.0.9.0.E.1.4.9.4.6.2.E.D.F.ip6.arpa. 300 IN PTR serverd.backend.lab.example.com.
;; AUTHORITY SECTION:
2.0.0.0.9.0.E.1.4.9.4.6.2.E.D.F.ip6.arpa. 600 IN NS serverb.backend.lab.example.com.
;; ADDITIONAL SECTION:
serverb.backend.lab.example.com. 300 IN AAAA fde2:6494:1e09:2::b
serverb.backend.lab.example.com. 300 IN A 192.168.0.11
;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Sun Jun 13 18:43:58 CST 2021
;; MSG SIZE rcvd: 304
8. 配置serverc为备用名称服务器。
[root@serverc ~]# yum -y install bind
[root@serverc ~]# scp serverb:/etc/named.conf /etc/named.conf
[root@serverc ~]# scp serverb:/etc/named.backend.conf /etc/named.backend.conf
[root@serverc ~]# vim /etc/named.backend.conf
zone "backend.lab.example.com" IN {
type slave;
file "slaves/backend.lab.example.com.zone";
masters {
192.168.0.11; };
};
zone "0.168.192.in-addr.arpa" IN {
type slave;
file "slaves/192.168.0.zone";
masters {
192.168.0.11; };
};
zone "2.0.0.0.9.0.E.1.4.9.4.6.2.E.D.F.ip6.arpa" IN {
type slave;
file "slaves/fde2.6494.1e09.2.zone";
masters {
192.168.0.11; };
};
[root@serverc ~]# chgrp named /etc/named.conf /etc/named.backend.conf
[root@serverc ~]# chmod 640 /etc/named.conf /etc/named.backend.conf
[root@serverc ~]# firewall-cmd --add-service=dns --permanent
success
[root@serverc ~]# firewall-cmd --reload
success
[root@serverc ~]# systemctl enable --now named
9. 测试应答。
[student@servera ~]$ dig servera.backend.lab.example.com @192.168.0.12
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el8 <<>> servera.backend.lab.example.com @192.168.0.12
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62765
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 374f7447c86b031156c08a3760c6021be0971c83e52d4e1b (good)
;; QUESTION SECTION:
;servera.backend.lab.example.com. IN A
;; ANSWER SECTION:
servera.backend.lab.example.com. 300 IN A 192.168.0.10
;; AUTHORITY SECTION:
backend.lab.example.com. 600 IN NS serverb.backend.lab.example.com.
;; ADDITIONAL SECTION:
serverb.backend.lab.example.com. 300 IN A 192.168.0.11
serverb.backend.lab.example.com. 300 IN AAAA fde2:6494:1e09:2::b
;; Query time: 1 msec
;; SERVER: 192.168.0.12#53(192.168.0.12)
;; WHEN: Sun Jun 13 21:03:23 CST 2021
;; MSG SIZE rcvd: 170
完成实验
[student@workstation ~]$ lab dns-bind finish
总结
- 介绍权威名称服务器设计体系结构。
- 安装和配置BIND。
- 运行和验证所配置的DNS。
- 若喜欢金鱼哥的文章,顺手点个赞。也可点个关注,因为后续会不断上干货。