BIND DNS服务高可用(一) 主服务器部署
BIND DNS服务高可用(一) 主服务器部署
1 | 作者:李晓辉 |
环境介绍
操作系统 | IP地址 | 主机名 | BIND版本 | 角色 |
---|---|---|---|---|
rhel8 | 172.25.250.10 | servera | BIND 9 | 主DNS服务器 |
rhel8 | 172.25.250.11 | serverb | BIND 9 | 辅助DNS服务器 |
BIND 9 DNS服务介绍
BIND 9 是一个强大且广泛使用的 DNS 服务软件,适用于多种应用场景,并且拥有活跃的社区支持和持续的更新
为权威名称服务器设计架构
通过 BIND,可以将权威服务器配置为区域的主要或次要服务器。
次要服务器通过请求区域传送定期从主服务器下载最新版本的区域信息。它们多久执行一次区域传送以及如何判断其数据是否过期都由区域的 SOA 资源记录控制。
为了确保可靠性,应至少具有两个公共 DNS 服务器,并且它们应位于不同的站点,以避免由于网络故障而造成的停机。
并非所有权威服务器都必须是公共服务器。例如,你可能决定仅使用您的主服务器来管理区域文件,并将区域信息发布到权威次要服务器。主服务器可以是私有服务器,但次要服务器将是面向公共的,为外部客户端提供权威应答。这可帮助您保护您的主服务器免受攻击。
下图显示了外部主机如何使用其缓存名称服务器和权威名称服务器对 example.com
中的记录执行 DNS 查找,假设尚未缓存任何记录:
在本示例中,主名称服务器实际上不是公共的,而是可以从主服务器执行区域传送的次要名称服务器,以便它们拥有关于 example.com
区域的最新数据。
安装配置bind
安装bind
通过安装 bind 软件包来安装 BIND。名称服务器本身作为 named
服务运行。bind 软件包也会以 HTML 和 PDF 格式在 /usr/share/doc/bind/
目录中安装综合 BIND 文档。
1 | [root@servera ~]# yum install bind -y |
启动bind服务
1 | [root@servera ~]# systemctl enable named.service --now |
开通防火墙
1 | [root@servera ~]# firewall-cmd --add-service=dns --permanent |
配置 主BIND服务器
named
使用的主配置文件是 /etc/named.conf
。此文件控制 BIND 的基本操作。它应由 root
用户、named
组所有,具有八进制权限 0640
,并且具有 named_conf_t
SELinux 类型。此文件一般以封号结尾
配置文件还指定由权威服务器管理的每个区域的区域文件的位置,这些文件通常保存在 /var/named
中。
配置 DNS 服务器需要以下步骤:
定义地址匹配列表,以便于维护。
配置
named
侦听的 IP 地址。配置客户端的访问控制。
指定
zone
指令。在
/etc/named.conf
配置文件的外部,写入区域文件。
定义地址匹配列表
以使用 acl
指令来定义地址匹配列表,这个acl位于options的上方
条目可以是由尾部点 (192.168.0.
) 或 CIDR 表示法(192.168.0/24
或 2001:db8::/32
)表示的完整 IP 地址或网络,或者是之前定义的地址匹配列表的名称。
我定义了一个名为 trusted
的 ACL,其中只包含多个 IP 地址 172.25.0/16
又定义了一个名为 classroom
的 ACL,它包含了一个网络段 192.168.0.0/24
以及trusted里的所有IP
1 | acl trusted { 172.25.0/16; }; |
named
中内置有四个预定义的 ACL:
ACL | 描述 |
---|---|
none | 无匹配主机。 |
any | 匹配全部主机。 |
localhost | 匹配 DNS 服务器的全部 IP 地址。 |
localnets | 匹配 DNS 服务器所在本地子网的全部主机。 |
配置服务器接口
listen-on
和 listen-on-v6
,用于指示 named
侦听的接口和端口,可以用封号表达多个,甚至直接使用你的acl名称也可以
1 | acl trusted { 172.25.0/16; }; |
限制访问
/etc/named.conf
中的三个附加 options
指令对于控制访问非常重要:
allow-query
控制所有查询。allow-recursion
控制递归查询。allow-transfer
控制区域传送。
默认情况下, allow-query
设置为 localhost
,根据需求更改,例如any
1 | allow-query { localhost; }; |
权威服务器不应允许递归查询。如果您必须允许受信任的客户端执行递归,您可以打开递归,并为这些特定的主机或网络设置 allow-recursion
:
权威 DNS 服务器是为其管理的特定域名提供确切答案的服务器。它们不需要执行递归查询,因为它们本身就是所查询域的权威数据源
递归 DNS 服务器通常用于客户端查询,它们会代表客户端向其他 DNS 服务器查询以获取查询结果,并可能将结果缓存起来以加快响应速度。
1 | recursion yes; |
声明权威区域
/etc/named.conf
中最下面的内容定义了区域文件,不过建议在include的文件中修改
1 | include "/etc/named.rfc1912.zones"; |
1 | [root@servera ~]# vim /etc/named.rfc1912.zones |
file
指令指定相对路径名称。这些文件的位置由 options
块中的 directory
设置决定(默认为 /var/named/
)。始终将 named.conf
配置为将次要区域文件保存在 slaves/
子目录中,其 SELinux 类型为 named_cache_t
。SELinux 会阻止 named
在其他位置创建文件。
这里提前添加了辅助服务器需要的参数
1 | zone "lixiaohui.cn" IN { |
编辑区域文件
区域文件的位置由 options
块中的 directory
指令和 /etc/named.conf
中的区域配置中的 file
指令控制。
如果您将次要区域文件保存在 /var/named/slaves
中,那么当次要服务器启动时,它会将该区域的缓存版本与主服务器上的当前版本进行比较,如果是最新状态,则使用它。如果区域不是最新的,或者文件不存在,则 named
会执行区域传送,并将结果缓存到该文件中。
区域文件应由 root
用户、named
组所有,具有八进制权限 0640
,并且具有 named_conf_t
SELinux 类型。
1 | [root@servera ~]# cd /var/named/ |
1 | [root@servera named]# chmod 640 /var/named/*.zone |
区域文件格式
BIND 区域文件是一种文本文件,每行包含一个指令或资源记录。如果资源记录的数据中包含圆括号,它可以跨越多行。在同一物理行上分号 (;
) 右侧的所有内容都将被注释掉。
区域文件可能以 $TTL
指令开头,该指令可为没有列出 TTL 的任何资源记录设置默认 TTL。这使您可以一次调整多个资源记录的 TTL,而无需编辑整个文件。如果 TTL 是一个数字,它将以秒为计量单位。
1 | $TTL 3600 |
默认是秒,这个数字后可以跟一个字母,以指定更长的时间段:
M
表示分钟(1M
为60
)H
表示小时(1H
为3600
)D
表示天(1D
为86400
)W
表示周 (1W
为604800
)
每个区域文件都包含一个 SOA (授权起始)资源记录,如下所示
1 | $TTL 1D |
第一行规定了TTL默认为1天
第二行最开始写了本区域的域名,也可以缩写为一个@,随后的IN SOA是表明这是互联网的SOA记录
第二行中的ns.lixiaohui.cn.部分是本区域的NS主机,注意以英文的句号结尾
第二行中的939958092.qq.com. 是本区域维护人的邮箱地址,我写了我的QQ邮箱,但是要把@变为英文的点,因为@在文件中有特别的意思
serial代表文件版本的序列号。每次文件发生更改时,该序列号都必须增加。每次在主服务器上更新区域文件时,您必须增加序列号,并重新加载
named
。refresh次要服务器应多久查询一次主服务器,以查看是否需要进行区域刷新。
retry 如果主服务器停机导致刷新失败,次要服务器应多久尝试一次重新连接。
expire 在放弃之前,次要服务器应尝试重新连接到不响应的主服务器的时长。如果发生超时,次要服务器将假设该区域不再存在,并停止对其查询的应答。
minimum 其他名称服务器应缓存该区域负(“无此类记录”)响应的时长。例如,如果
minimum
设置为3H
,这表示对于该区域不存在的记录,DNS 服务器将缓存这个 NXDOMAIN 的结果长达 3 小时。在这 3 小时内,即使再次查询相同的不存在的记录,DNS 服务器也会直接返回缓存中 NXDOMAIN 的结果,而不需要再次发起查询请求
将记录添加到区域文件
正常来说,区域文件必须具有:
一条 SOA 记录。
每个公共名称服务器的 NS 记录。
区域的其他 A、AAAA、CNAME、MX、SRV 和 TXT 记录。
正向区域文件
1 | [root@servera ~]# vim /var/named/lixiaohui.cn.zone |
一般来说,不需要在记录前面指定TTL,因为第一行写了1D
1 | $TTL 1D |
查询测试
发现TTL为30,的确是生效了
1 | [root@servera named]# dig -t a lxh.lixiaohui.cn @172.25.250.10 |
反向区域文件
1 | [root@servera ~]# vim /var/named/lixiaohui.cn.ptr |
1 | $TTL 1D |
查询测试
1 | [root@servera named]# dig -x 172.25.250.10 @172.25.250.10 |
子域委托
可以将整个子域作为含有其父域的区域的一部分进行设置和管理,例如添加 support.online.lixiaohui.cn
和 test.online.lixiaohui.cn
的记录:
1 | $TTL 1D |
查询发现DNS解析成功
1 | [root@servera named]# dig -t a support.online.lixiaohui.cn @localhost |
验证配置文件
在重新加载或重新启动 named
之前,您应验证 /etc/named.conf
和区域文件的语法。
named-checkconf
验证/etc/named.conf
。named-checkzone zone zone-file
验证zone-file
中zone
的区域文件。
1 | [root@servera named]# named-checkconf /etc/named.conf |
如果服务起不来或者想看到详细内容,可以用下面的方法查看详情
1 | [root@servera named]# journalctl -xeu named |