如何在 Ubuntu 14.04 的从属 PowerDNS 服务器上配置 DNS 复制

介绍

在本教程中,我们将学习如何在主/奴隶配置中设置PowerDNS,从主DNS服务器自动复制到奴隶。本教程是我们PowerDNS(https://andsky.com/tech/tutorials/how-to-install-and-configure-powerdns-with-a-mariadb-backend-on-ubuntu-14-04)系列中的第二个教程。

一个主/奴隶配置提供了额外的可靠性. 如果您的PowerDNS服务器之一失效,您将有一个辅助服务器来处理请求。

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

到本教程结束时,我们将有两个使用主/奴隶复制的功能PowerDNS服务器。

前提条件

请完成这些要求:

在我们之前的教程中,我们将三个子域指向一个PowerDNS服务器,现在我们将使用其中一个子域指向我们的奴隶服务器,在我们的示例中,我们的主服务器IP将是111.111.111.111,我们的奴隶服务器IP将是222.222.222

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

hostmaster.example-dns.com 111.111.111.111 (主服务器)* ns1.example-dns.com* 111.111.111.111 (主服务器)** ns2.example-dns.com* 222.222.222.222 (奴隶服务器)

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

步骤 1 — 在两个服务器上安装 PowerDNS

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

如果你还没有这样做,请按照之前的教程, 如何安装和配置PowerDNS与MariaDB备份在Ubuntu 14.04

你应该遵循完整的教程在你的 主服务器

你可以在你的奴隶服务器上只遵循步骤1到7,因为我们不需要Poweradmin在辅助服务器上。

當您有兩個功能的 PowerDNS 伺服器,其中至少有一個執行 Poweradmin 時,您可以進行下一步。

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

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

這應該是 Poweradmin 安裝的伺服器,並將被視為您的 主 DNS 伺服器 . 如果您在兩個伺服器上安裝了 Poweradmin,您可以使用任何一個伺服器。

备份原始配置文件。

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

创建我们的新配置文件。

1sudo nano pdns.conf

下面的细节适用于一个单一的奴隶服务器的标准主服务器配置。我们将输入奴隶服务器的IP地址,允许它与这个主服务器进行通信。

**注意: /32 是单一的 IP 子网,并且需要此配置。

 1[label /etc/powerdns/pdns.conf]
 2allow-recursion=0.0.0.0/0
 3allow-axfr-ips=222.222.222.222/32
 4config-dir=/etc/powerdns
 5daemon=yes
 6disable-axfr=no
 7guardian=yes
 8local-address=0.0.0.0
 9local-port=53
10log-dns-details=on
11log-failed-updates=on
12loglevel=3
13module-dir=/usr/lib/powerdns
14master=yes
15slave=no
16setgid=pdns
17setuid=pdns
18socket-dir=/var/run
19version-string=powerdns
20include-dir=/etc/powerdns/pdns.d

重启 PowerDNS 服务,以便更改生效。

1sudo service pdns restart

步骤 3 — 配置奴隶服务器(ns2.example-dns.com)

现在我们已经准备好配置我们的 slave 服务器 . 这个服务器将复制我们刚刚配置的主服务器的 DNS 区域. 如果您跟随示例,这应该是** ns2.example-dns.com** 。

备份原始配置文件。

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

创建新的配置文件。

1sudo nano pdns.conf

下面的细节是标准的奴隶服务器配置,更新间隔为 60 秒,您可以准确地复制配置。

 1[label /etc/powerdns/pdns.conf]
 2allow-recursion=0.0.0.0/0
 3config-dir=/etc/powerdns
 4daemon=yes
 5disable-axfr=yes
 6guardian=yes
 7local-address=0.0.0.0
 8local-port=53
 9log-dns-details=on
10log-failed-updates=on
11loglevel=3
12module-dir=/usr/lib/powerdns
13master=no
14slave=yes
15slave-cycle-interval=60
16setgid=pdns
17setuid=pdns
18socket-dir=/var/run
19version-string=powerdns
20include-dir=/etc/powerdns/pdns.d

每个 60 秒钟,奴隶服务器都会向主服务器查询区域更新。 通常,当区域更新时,主服务器会向分配给该区域的奴隶服务器发送通知。

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

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

1mysql -u powerdns_user -p

请在提示中输入您的密码:

1[secondary_label Output]
2Enter password:

更改到您在上一本教程中配置的PowerDNS数据库,我们的建议是powerdns

1USE powerdns;

接下来,我们将在)。

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

我们现在可以离开MariaDB壳。

1exit;

重启 PowerDNS 服务,以便更改生效。

1sudo service pdns restart

第4步:测试主/奴隶连接

此步骤要求 ns1.example-dns.com 指向您的主服务器,并要求 ns2.example-dns.com 指向您的奴隶服务器。

如果您的粘贴记录、 SOA 记录和 A 记录尚未传播,您可以向您的 /etc/hosts 文件添加一个翻译。

使用 nano 打开/etc/hosts

1sudo nano /etc/hosts

将内容添加到您的 /etc/hosts 文件中。

1[label /etc/hosts]
2111.111.111.111 ns1.example-dns.com
3222.222.222.222 ns2.example-dns.com

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

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

1ping ns1.example-dns.com

你的结果应该是这样的:

1[secondary_label Output]
264 bytes from ns1.example-dns.com (111.111.111.111): icmp_seq=1 ttl=64 time=0.061 ms

点击奴隶服务器:

1ping ns2.example-dns.com

预期结果:

1[secondary_label Output]
264 bytes from ns2.example-dns.com (222.222.222.222): icmp_seq=1 ttl=64 time=48.8 ms

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

步骤5 — 配置一个DNS区与复制

如果兩個伺服器都溝通正確,我們就可以創建我們的第一個DNS區域,使用主/奴隸複製。

在您的主服务器上登录Poweradmin,访问您的浏览器中的http://111.111.111.111/poweradmin/`。

Poweradmin login screen

使用您之前设置的 admin 凭证登录。

点击添加主区域链接来创建一个新的区域文件,您可以使用原始名称或新的域名测试。

Click the Add master zone link

输入你的顶级域名,然后点击添加区域按钮来创建该区域。

Enter your domain name in the Zone name field

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

*hostmaster.example-dns.com *ns1.example-dns.com *ns2.example-dns.com

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

Add your NS and A records

**注意:如果您的奴隶服务器未列为该区域的名称服务器,则不会复制该区域。

几秒钟后,新的条目应该传播到你的奴隶服务器。

测试在 ns1.example-dns.com 中保存的 DNS 记录,使用Dig

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

它应该响应与下面的结果相似。

 1[secondary_label Output]
 2root@ns1:/etc/powerdns# dig test.com A @ns1.example-dns.com
 3
 4; <<>> DiG 9.9.5-3ubuntu0.2-Ubuntu <<>> test.com A @ns1.example-dns.com
 5;; global options: +cmd
 6;; Got answer:
 7;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44833
 8;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
 9;; WARNING: recursion requested but not available
10
11;; OPT PSEUDOSECTION:
12; EDNS: version: 0, flags:; udp: 2800
13;; QUESTION SECTION:
14;test.com. IN A
15
16;; ANSWER SECTION:
17test.com. 86400 IN A 104.131.174.138
18
19;; Query time: 2 msec
20;; SERVER: 45.55.217.94#53(45.55.217.94)
21;; WHEN: Tue Apr 28 18:06:54 EDT 2015
22;; MSG SIZE rcvd: 53

测试在 ns2.example-dns.com 中保存的 DNS 记录,使用Dig

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

它应该响应与下面的结果相似。

 1[secondary_label Output]
 2root@ns1:/etc/powerdns# dig test.com A @ns2.example-dns.com
 3
 4; <<>> DiG 9.9.5-3ubuntu0.2-Ubuntu <<>> test.com A @ns2.example-dns.com
 5;; global options: +cmd
 6;; Got answer:
 7;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11530
 8;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
 9;; WARNING: recursion requested but not available
10
11;; OPT PSEUDOSECTION:
12; EDNS: version: 0, flags:; udp: 2800
13;; QUESTION SECTION:
14;test.com. IN A
15
16;; ANSWER SECTION:
17test.com. 86400 IN A 104.131.174.138
18
19;; Query time: 3 msec
20;; SERVER: 45.55.217.132#53(45.55.217.132)
21;; WHEN: Tue Apr 28 18:08:06 EDT 2015
22;; MSG SIZE rcvd: 53

请记住,对于 test.com 的设置,只有在您的名称服务器设置为** ns1.example-dns.com** 和** ns2.example-dns.com** 后才会被激活。

结论

我们现在有两个功能的PowerDNS服务器使用MariaDB后端在主 / 奴隶配置。

对主服务器上的主区进行任何时间更改,它会通知列出的任何奴隶服务器有自己的 NS 记录。

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

Published At
Categories with 技术
comments powered by Disqus