本文将为您介绍如何在CentOS7上搭建主备DNS服务器。我们将使用Bind作为DNS服务器,并使用Keepalived实现DNS服务器的高可用性。

一、安装Bind

在CentOS7上安装Bind的方法非常简单。使用以下命令即可快速安装:

sudo yum install bind bind-utils -y

二、配置主DNS服务器

第一步是配置主DNS服务器。以下是我们需要执行的步骤:
2.1 配置Bind
首先,我们需要编辑Bind的配置文件以支持主DNS服务器。我们需要打开文件 /etc/named.conf:

sudo vi /etc/named.conf

找到以下语句并取消注释,以便允许对外提供DNS服务:

// allow-query     { localhost; };

改为:

allow-query     { any; };

然后添加一个新的区块来指定我们将要支持的域名:

zone "example.com" IN {
     type master;
     file "example.com.zone";
     allow-update { none; };
};

上述配置指定了需要支持的域名(example.com),并将其类型定义为 master 即主DNS服务器的形式。该配置还指定了主DNS服务器使用的文件位置,并禁止了区域更新。
现在,我们需要创建一个名为 example.com.zone 的新文件,该文件将保存我们的DNS记录。使用以下命令即可创建该文件:

sudo vi /var/named/example.com.zone

然后,在该文件中添加以下内容:

$TTL 86400
@ IN SOA example.com. root.example.com. (
                        2019110501         ; Serial
                              7200         ; Refresh
                               3600        ; Retry
                            1209600        ; Expire
                              3600 )       ; Negative Cache TTL
;
@    IN      NS      ns1.example.com.
@    IN      NS      ns2.example.com.
;
@    IN      MX      10      mail.example.com.
;
www  IN      A       192.168.1.2
mail IN      A       192.168.1.3
ns1  IN      A       192.168.1.4
ns2  IN      A       192.168.1.5

上述代码包含了指定域名的SOA记录、NS记录、MX记录以及A记录。此外,指定了主DNS服务器的IP地址。
2.2 启动和测试Bind
成功配置Bind之后,我们需要启动它。使用以下命令即可启动:

sudo systemctl start named
sudo systemctl enable named

现在我们可以使用 dig 命令来测试新的DNS服务器是否正常工作。使用以下命令测试:

dig example.com

这将查询DNS服务器以查找 example.com 的IP地址。如果域名解析正常,应该会看到与 example.com 相关联的IP地址。

三、安装和配置备用DNS服务器

然后是安装和配置备用DNS服务器。以下是我们需要执行的步骤:
3.1 安装Keepalived
我们需要在备用服务器上安装Keepalived来实现高可用性。使用以下命令即可快速安装:

sudo yum install keepalived -y

3.2 配置Keepalived
此外,我们还需要配置Keepalived,以便在主DNS服务器出现故障时自动将流量切换到备用DNS服务器。使用以下命令打开 keepalived.conf 文件:

sudo vi /etc/keepalived/keepalived.conf

并将以下配置添加到该文件中:

! Configuration File for keepalived

global_defs {
   router_id LB_01
}

vrrp_script check_named {
  script "systemctl status named | grep -q 'active (running)'"
  interval 10
  weight 2
}

vrrp_instance VI_DNS {
    interface ens33
    state BACKUP
    virtual_router_id 51
    priority 150
    virtual_ipaddress {
        192.168.1.10
    }
    track_script {
        check_named
    }
}

上述配置指定了Keepalived的全局定义和两个组件(vrrp_script 和 vrrp_instance):

global_defs 包含 router_id 域,用于标识Keepalived实例。
vrrp_script 定义了一个名为 check_named 的脚本,用于检查DNS服务是否处于活动状态。
vrrp_instance 包含了Virtual Router Redundancy Protocol (VRRP)实例的配置。该实例标识为 VI_DNS,使用网卡 ens33 连接。在该实例中,指定了优先级、虚拟IP地址、以及 track_script 模块需要检查的脚本。

3.3 启动和测试Keepalived
配置完Keepalived之后,我们需要启动它。使用以下命令即可启动:
 

sudo systemctl start keepalived
sudo systemctl enable keepalived

现在,我们可以测试前面章节中创建的DNS服务器的高可用性。使用以下命令测试:
 

dig example.com @192.168.1.10

这将查询DNS服务器以查找 example.com 的IP地址。如果域名解析正常,应该会看到与 example.com 相关联的IP地址。
现在,您已经成功完成了主备DNS服务器的搭建。如果主DNS服务器出现故障,Keepalived将自动将流量切换到备用DNS服务器,确保您的DNS服务器具有高可用性。