配置主从DNS服务器(RHEL/CentOS 7)
在本文中,我将分享在chroot环境中使用bind"配置主从DNS服务器"的步骤。
本文是在使用CentOS 7时编写的,因此可以肯定地说,它还全面介绍了RHEL 7,Fedora以及整个Red Hat操作系统家族,以及Novell的SLES和OpenSUSE。
为什么需要配置主从DNS服务器?
在生产环境中,我们始终关心正常运行时间和冗余性,因此通过配置主从DNS服务器,我们的主服务器数据会自动复制到从服务器,因此,如果主服务器由于某种原因停机,则从服务器可以充当主DNS修复主服务器时,服务器将按他们的时间运行。
因此,我们可以再次询问:"为什么网络中没有两个或者两个以上的DNS服务器,如果一个服务器出现故障,那么另一个服务器将如何充当主服务器?
"这是正确的,但是在这种情况下,我们将必须手动执行网络中所有DNS服务器上的更改相同,但是如果我们配置主从DNS服务器,则我们在主DNS服务器上所做的任何更改都会自动复制到从DNS服务器上,因此几乎没有人为错误的可能性,因此无需进行任何返工建议配置Master Slave DNS Server
。
由于我已经在chroot环境中配置了DNS服务器。
其中我将使用相同的配置并进行配置主从DNS服务器所需的相关更改。
我的设置详细信息
主DNS服务器10.0.2.32(master.example.com)
从DNS服务器10.0.2.31(slave.example.com)
配置主DNS服务器
配置主从DNS服务器的第一步,我们需要一个主服务器。
让我分享主服务器上要遵循的简要配置步骤:
(M)安装bind-chroot rpm
首先,我们需要在主DNS服务器上安装bind chroot rpm
[root@master ~]# yum install -y bind-chroot
(M)示例named.conf
我们的示例命名配置文件带有自定义更改,突出显示。
提示:
我们将需要在主DNS服务器的/etc/named.conf
中进行一些更改,以配置主从DNS服务器,但是一旦named-chroot服务启动并在主服务器上运行,我们将进行此操作。
[root@master ~]# cat /etc/named.conf options { listen-on port 53 { 127.0.0.1; 10.0.2.32; }; # 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 { localhost; any; }; allow-query-cache { localhost; any; }; recursion yes; dnssec-enable yes; dnssec-validation yes; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.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"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
(M)样品区配置
以下是来自" named.rfc1912.zones"文件的区域配置。
此处不需要进行特殊更改即可配置主从DNS服务器:
[root@master ~]# cat "/etc/named.rfc1912.zones" zone "example.com" IN { type master; file "example.com.zone"; allow-update { none; }; }; zone "2.0.10.in-addr.arpa" IN { type master; file "example.com.rzone"; allow-update { none; }; };
(M)示例正向区域文件
以下是我的正向区域文件。
此处不需要进行特殊更改即可配置主从DNS服务器:
[root@master ~]# cat /var/named/example.com.zone $TTL 1D @ IN SOA example.com root ( 6 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS master master IN A 10.0.2.32 localhost IN A 127.0.0.1 client IN A 10.0.2.30 slave IN A 10.0.2.31
(M)示例反向区域文件
以下是我的反向区域文件。
此处不需要进行特殊更改即可配置主从DNS服务器:
[root@master ~]# cat /var/named/example.com.rzone $TTL 1D @ IN SOA example.com. root ( 2 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS master. 30 IN PTR client.example.com. 31 IN PTR slave.example.com. 32 IN PTR master.example.com.
(M)启用chroot环境
接下来将所有DNS配置文件挂载到chroot环境中
[root@master ~]# /usr/libexec/setup-named-chroot.sh /var/named/chroot on
(M)验证DNS配置
接下来验证配置
[root@master ~]# named-checkconf -t /var/named/chroot//etc/named.conf [root@master ~]# named-checkzone master.example.com /var/named/example.com.zone zone master.example.com/IN: loaded serial 6 OK [root@master ~]# named-checkzone master.example.com /var/named/example.com.rzone zone master.example.com/IN: loaded serial 2 OK
说明:
在本文中,我在RHEL 7设置中禁用了firewalld
和selinux
。
(M)更新resolv.conf文件
说明:
如果将DNS信息写入主网络接口文件中,则还需要更新网络文件中的DNS选项。
[root@master ~]# cat /etc/resolv.conf # Generated by NetworkManager search example.com nameserver 10.0.2.32 #master
(M)启动named-chroot服务
但是在此之前,请确保停止并禁用RHEL 7 Linux主机上可用且正在运行的任何命名服务,因为我们计划使用named-chroot
:
[root@master named]# systemctl stop named [root@master named]# systemctl disable named
现在我们可以启动命名的chroot服务
[root@master ~]# systemctl start named-chroot [root@master ~]# systemctl is-active named-chroot active
(M)验证DNS服务器
接下来,验证DNS服务器配置:
[root@master ~]# nslookup master.example.com Server: 10.0.2.32 Address: 10.0.2.32#53 Name: master.example.com Address: 10.0.2.32
因此,我们的基本DNS服务器已启动并正在运行,让我们配置从属DNS服务器。
配置从服务器
接下来,让我们继续配置从属服务器,以在Linux中配置主从DNS服务器。
(S)安装bind-chroot rpm
与主DNS服务器类似,我们需要在此处安装bind-chroot
rpm
[root@slave ~]# yum install -y bind-chroot
(S)配置named.conf
接下来,使用从属DNS服务器IP修改/etc/named.conf
文件,如下所示。
其余所有条目将保持不变。
[root@slave ~]# cat /etc/named.conf options { listen-on port 53 { 127.0.0.1; 10.0.2.31; }; 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 { localhost; any; }; <Output Trimmed> include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
(M)配置named.conf
现在,在此阶段,我们必须在主DNS服务器的/etc/named.conf
上进行一些其他配置更改。
添加以下内容:
allow-transfer { 10.0.2.31; }; notify yes; also-notify { 10.0.2.31; };
这里的10.0.2.31是我的从DNS服务器。
通过这些更改,主DNS服务器将自动将任何更改通知从DNS服务器,并且还将传输更改的内容。
(S)更新区域配置
接下来,我们需要配置/etc/named.rfc1912.zones
文件来为我们的从DNS服务器的正向和反向区域文件添加区域记录。
将以下内容添加到" named.rfs1912.zones"文件中
说明:
在此处根据环境调整IP地址和文件名。
[root@slave ~]# cat /etc/named.rfc1912.zones <Output Trimmed> zone "example.com" IN { type slave; masters { 10.0.2.32; }; file "slaves/example.com.zone"; }; zone "2.0.10.in-addr.arpa" IN { type slave; masters { 10.0.2.32; }; file "slaves/example.com.rzone"; };
"其中"
为主DNS服务器IP提供主服务器。
添加正向和反向区域文件的文件位置。
位置应与此处给出的位置相同。该区域的类型将为"从属"
(S)启用chroot环境
将绑定配置文件挂载到chroot环境中
[root@slave ~]# /usr/libexec/setup-named-chroot.sh /var/named/chroot on
(S)验证DNS配置
接下来使用named-checkconf验证配置文件
[root@slave ~]# named-checkconf -t /var/named/chroot//etc/named.conf
由于屏幕上没有输出,因此这意味着在我们的绑定配置文件中没有发现语法错误。
(M&S)更新resolv.conf文件
说明:
如果将DNS信息写入主网络接口文件中,则还需要更新网络文件中的DNS选项。
[root@slave ~]# cat /etc/resolv.conf # Generated by NetworkManager search example.com nameserver 10.0.2.32 #master nameserver 10.0.2.31 #slave
在主DNS服务器上更新/etc/resolv.conf
中的相同条目
[root@master ~]# cat /etc/resolv.conf # Generated by NetworkManager search example.com nameserver 10.0.2.32 #master nameserver 10.0.2.31 #slave
(M&S)启动named-chroot服务
但是在此之前,请确保停止并禁用RHEL 7 Linux主机上可用且正在运行的任何命名服务,因为我们计划使用named-chroot
:
[root@slave named]# systemctl stop named [root@slave named]# systemctl disable named
接下来,因为我们也在主DNS服务器上做了一些更改,所以我们可以在从DNS服务器上启动named-chroot
服务,并在主服务器上重新启动named-chroot
服务。
[root@master ~]# systemctl restart named-chroot [root@master ~]# systemctl is-active named-chroot active [root@slave ~]# systemctl start named-chroot [root@slave ~]# systemctl is-active named-chroot active
因此,我们所有的服务都已启动并正在运行。
现在,在从属服务器上启动命名的chroot服务后,我们会发现区域文件将在从属服务器上自动在/var/named/slaves /目录下创建。
[root@slave ~]# ls -l /var/named/slaves/ total 8 -rw-r--r-- 1 named named 386 Jun 22 02:30 example.com.rzone -rw-r--r-- 1 named named 410 Jun 22 02:47 example.com.zone
说明:
这些区域文件将不是可读格式,因此不应修改,因为每次在主DNS服务器上重新加载或者重新启动" named-chroot"服务时它们都会自动更新。
验证主到从数据复制
现在,由于我们的" named-chroot"服务在从DNS服务器上运行,因此与区域相关的数据将立即在" /var/named/data/named.run"下从主服务器传输到从服务器。
以下是我的/var/named/data/named.run
中的示例内容
managed-keys-zone: loaded serial 2 zone 0.in-addr.arpa/IN: loaded serial 0 zone 2.0.10.in-addr.arpa/IN: loaded serial 2 zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0 zone example.com/IN: loaded serial 6 zone localhost.localdomain/IN: loaded serial 0 zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN: loaded serial 0 zone localhost/IN: loaded serial 0 all zones loaded running
我们可以通过添加新的" A记录"来修改主DNS服务器上的转发区域文件来验证这一点。
[root@master ~]# vim /var/named/example.com.zone $TTL 1D @ IN SOA example.com root ( 7 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS master master IN A 10.0.2.32 localhost IN A 127.0.0.1 client IN A 10.0.2.30 slave IN A 10.0.2.31 test IN A 10.0.2.33
其中我们添加了一个新的" A record"进行测试,并更新了" serial number"。
重要的提示:
确保每次修改区域文件时都更新序列号,否则从站将无法获取更新。
接下来,重新加载named-chroot
服务,并观察从属服务器上/var/named/data/named.run
下的日志。
[root@master ~]# systemctl reload named-chroot
在从服务器上的/var/named/data/named.run下可以看到以下日志。
因此,我们的转移已成功完成:
client 10.0.2.32#25912: received notify for zone 'example.com' zone example.com/IN: Transfer started. transfer of 'example.com/IN' from 10.0.2.32#53: connected using 10.0.2.31#39338 zone example.com/IN: transferred serial 7 transfer of 'example.com/IN' from 10.0.2.32#53: Transfer completed: 1 messages, 8 records, 247 bytes, 0.002 secs (123500 bytes/sec) zone example.com/IN: sending notifies (serial 7)
接下来验证从属服务器上的" A record"解析
[root@slave ~]# nslookup test.example.com Server: 10.0.2.32 Address: 10.0.2.32#53 Name: test.example.com Address: 10.0.2.33
因此,数据已成功传输,因此我们的主从复制成功运行。