如何在Ubuntu14.04上的从属PowerDNS服务器上配置DNS复制

来自菜鸟教程
跳转至:导航、​搜索

介绍

在本教程中,我们将学习如何在主/从配置中设置 PowerDNS,并从主 DNS 服务器自动复制到从服务器。 本教程是我们针对 Ubuntu 的 PowerDNS 系列的第二篇教程。

主/从配置提供了额外的可靠性。 如果您的一个 PowerDNS 服务器出现故障,您将有一个辅助服务器来处理请求。

我们建议在单独的数据中心配置这些服务器。 如果它们位于两个物理位置,那么即使数据中心中断也不会影响您的 DNS 服务。

在本教程结束时,我们将拥有两个使用主/从复制的功能性 PowerDNS 服务器。

先决条件

请完成以下要求:

  • 两个 512 MB Droplet 或更大的 Ubuntu 14.04 64 位。 512 MB 应该足够运行具有中等数量区域/记录的 PowerDNS 服务器
  • 一个 sudo 用户
  • 如何在 Ubuntu 14.04 上使用 MariaDB 后端安装和配置 PowerDNS(步骤 1 中的详细信息)
  • 在您的注册商处配置的域的粘合记录和名称服务器设置

在我们之前的教程中,我们将三个子域指向一个 PowerDNS 服务器。 我们现在将使用这些子域之一指向我们的从服务器。 在我们的示例中,我们的 主服务器 IP 将是 111.111.111.111,我们的 从服务器 IP 将是 222.222.222.222

您将需要相应地与您的提供商更新粘合记录。 请使用以下信息作为指导。 有关配置 DNS 记录的更多信息,请参阅之前的 PowerDNS 教程。

请注意,您应该在注册商处为名称服务器本身使用的域设置粘合记录和 SOA 记录。 另一方面,您只需要将其区域文件托管在自定义名称服务器上的其他域的 SOA 记录。

第 1 步 — 在两台服务器上安装 PowerDNS

首先,我们需要有两个功能强大的 PowerDNS 服务器。 一台服务器将成为我们的主服务器,而第二台服务器将成为我们的从服务器。

如果您还没有这样做,请按照之前的教程 如何在 Ubuntu 14.04 上使用 MariaDB 后端安装和配置 PowerDNS。

您应该按照 主服务器 上的完整教程进行操作。

您可以在 从服务器 上执行步骤 1-7,因为我们不需要辅助服务器上的 Poweradmin。

当您有两台功能正常的 PowerDNS 服务器,其中至少有一台运行 Poweradmin 时,您可以继续下一步。

第 2 步 — 配置主服务器 (ns1.example-dns.com)

我们现在准备好配置我们的主 PowerDNS 服务器。

这应该是安装了 Poweradmin 的服务器,并且将被视为您的 主 DNS 服务器。 如果您在两台服务器上都安装了 Poweradmin,您可以使用任何一台。 如果您遵循此示例,则应为 ns1.example-dns.com

备份原配置文件。

cd /etc/powerdns
sudo mv pdns.conf pdns.conf.orig

创建我们的新配置文件。

sudo nano pdns.conf

以下详细信息适用于具有单个从属服务器的标准主服务器配置。 我们将输入从服务器 IP 地址,允许它与该主服务器通信。 请记住在下面替换您自己的从服务器IP地址

注意:/32 是单个 IP 子网,并且是此配置所必需的。

/etc/powerdns/pdns.conf

allow-recursion=0.0.0.0/0
allow-axfr-ips=222.222.222.222/32
config-dir=/etc/powerdns
daemon=yes
disable-axfr=no
guardian=yes
local-address=0.0.0.0
local-port=53
log-dns-details=on
log-failed-updates=on
loglevel=3
module-dir=/usr/lib/powerdns
master=yes
slave=no
setgid=pdns
setuid=pdns
socket-dir=/var/run
version-string=powerdns
include-dir=/etc/powerdns/pdns.d

重新启动 PowerDNS 服务以使更改生效。

sudo service pdns restart

第 3 步 — 配置从服务器 (ns2.example-dns.com)

现在我们准备好配置我们的从服务器。 该服务器将从我们刚刚配置的主服务器复制 DNS 区域。 如果您按照示例进行操作,则应该是 ns2.example-dns.com

备份原配置文件。

cd /etc/powerdns
sudo mv pdns.conf pdns.conf.orig

创建新的配置文件。

sudo nano pdns.conf

以下详细信息适用于具有 60 秒刷新间隔的标准从属服务器配置。 您可以完全复制配置。

/etc/powerdns/pdns.conf

allow-recursion=0.0.0.0/0
config-dir=/etc/powerdns
daemon=yes
disable-axfr=yes
guardian=yes
local-address=0.0.0.0
local-port=53
log-dns-details=on
log-failed-updates=on
loglevel=3
module-dir=/usr/lib/powerdns
master=no
slave=yes
slave-cycle-interval=60
setgid=pdns
setuid=pdns
socket-dir=/var/run
version-string=powerdns
include-dir=/etc/powerdns/pdns.d

每隔 60 秒,从服务器将向主服务器查询区域更新。 通常,当区域更新时,主服务器将向分配给该区域的从服务器发送通知。 但是,如果在区域更新期间出现连接问题,这可以确保更新最终会在从服务器再次联机时传播到从服务器。

接下来我们需要告诉 PowerDNS 如何与主服务器通信。

使用您在上一教程中创建的 PowerDNS 用户名和密码登录 MariaDB。 我们的示例使用 powerdns_user

mysql -u powerdns_user -p

在提示符处输入您的密码:

OutputEnter password:

更改为您在上一个教程中配置的 PowerDNS 数据库。 我们的建议是 powerdns

USE powerdns;

接下来,我们将在 supermasters 表中创建一个新行。 此行将指定 主服务器 IP 地址,以及我们当前正在配置的从服务器 的完全限定域名 (FQDN)。

insert into supermasters values ('111.111.111.111', 'ns2.example-dns.com', 'admin');

我们现在可以退出 MariaDB shell。

exit;

重新启动 PowerDNS 服务以使更改生效。

sudo service pdns restart

第 4 步 — 测试主/从连接

此步骤需要 ns1.example-dns.com 指向您的主服务器,并且 ns2.example-dns.com 指向您的从服务器。

如果您的粘合记录、SOA 记录和 A 记录尚未传播,您可以将覆盖添加到您的 /etc/hosts 文件。 您将希望在 两台服务器 上执行此操作。

使用 nano 打开 /etc/hosts

sudo nano /etc/hosts

将条目添加到您的 /etc/hosts 文件中。

/etc/hosts

111.111.111.111 ns1.example-dns.com
222.222.222.222 ns2.example-dns.com

让我们确保我们的两个服务器现在可以通信。

从您的 主服务器 ping 两个主机名。

ping ns1.example-dns.com

您的结果应如下所示:

Output64 bytes from ns1.example-dns.com (111.111.111.111): icmp_seq=1 ttl=64 time=0.061 ms

ping从服务器:

ping ns2.example-dns.com

预期结果:

Output64 bytes from ns2.example-dns.com (222.222.222.222): icmp_seq=1 ttl=64 time=48.8 ms

现在,使用相同的命令从 从服务器 ping 两个主机名。 一旦您可以从两台服务器 ping 两台服务器,请继续。

第 5 步 — 使用复制配置 DNS 区域

如果两台服务器都能正常通信,我们就可以创建第一个带有主/从复制的 DNS 区域了。

通过在浏览器中访问 http://111.111.111.111/poweradmin/ 登录到主服务器上的 Poweradmin。

使用您之前设置的管理员凭据登录。

单击 Add master zone 链接以创建新的区域文件。 您可以使用原始名称或新域 test.com 进行测试。

输入您的顶级域名,点击【X48X】添加区域【X60X】按钮创建区域。

为您的名称服务器创建 NS 条目:

创建至少一个 A 记录来测试复制。

注意:如果您的从服务器未列为该区域的名称服务器,它将不会复制该区域。

几秒钟后,新条目应该传播到您的从属服务器。

使用 dig 测试保存在 ns1.example-dns.com 的 DNS 记录。

dig test.com A @ns1.example-dns.com

它应该以类似于以下结果的结果进行响应。

Outputroot@ns1:/etc/powerdns# dig test.com A @ns1.example-dns.com

; <<>> DiG 9.9.5-3ubuntu0.2-Ubuntu <<>> test.com A @ns1.example-dns.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44833
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 2800
;; QUESTION SECTION:
;test.com.                      IN      A

;; ANSWER SECTION:
test.com.               86400   IN      A       104.131.174.138

;; Query time: 2 msec
;; SERVER: 45.55.217.94#53(45.55.217.94)
;; WHEN: Tue Apr 28 18:06:54 EDT 2015
;; MSG SIZE  rcvd: 53

使用 dig 测试保存在 ns2.example-dns.com 的 DNS 记录。

dig test.com A @ns2.example-dns.com

它应该以类似于以下结果的结果进行响应。

Outputroot@ns1:/etc/powerdns# dig test.com A @ns2.example-dns.com

; <<>> DiG 9.9.5-3ubuntu0.2-Ubuntu <<>> test.com A @ns2.example-dns.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11530
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 2800
;; QUESTION SECTION:
;test.com.                      IN      A

;; ANSWER SECTION:
test.com.               86400   IN      A       104.131.174.138

;; Query time: 3 msec
;; SERVER: 45.55.217.132#53(45.55.217.132)
;; WHEN: Tue Apr 28 18:08:06 EDT 2015
;; MSG SIZE  rcvd: 53

请记住,只有在将您的域名服务器设置为 ns1.example-dns.comns2.example-dns.com 后,test.com 的设置才会生效在您的注册商处。

结论

我们现在有两个功能强大的 PowerDNS 服务器,在主/从配置中使用 MariaDB 后端。

任何时候对主服务器上的主区域进行更改,它都会通知列出的任何从属服务器,其中列出了它们自己的 NS 记录。

从服务器将自动查询主服务器最近未更新的记录,确保您的 DNS 记录在您的 PowerDNS 节点之间保持同步。