配置主从DNS服务器(RHEL/CentOS 7)

时间:2020-01-09 10:37:45  来源:igfitidea点击:

在本文中,我将分享在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设置中禁用了firewalldselinux

(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-chrootrpm

[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

因此,数据已成功传输,因此我们的主从复制成功运行。