介绍
在本教程中,我们将学习如何在主/奴隶配置中设置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服务器。
前提条件
请完成这些要求:
- 2个512 MB Droplets或更大并带有Ubuntu 14.04 64位. 512 MB 应该足够运行一个带有中等数量的区域/记录的 PowerDNS 服务器
- A [sudo用户] (https://andsky.com/tech/tutorials/how-to-add-and-delete-users-on-an-ubuntu-14-04-vps).
- 如何在Ubuntu 14.04上安装和配置带有MariaDB后端的PowerDNS(步骤1中的细节)
- 联合国 在您的注册员配置的域的粘贴记录和命名服务器设置
在我们之前的教程中,我们将三个子域指向一个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/`。
使用您之前设置的 admin 凭证登录。
点击添加主区域
链接来创建一个新的区域文件,您可以使用原始名称或新的域名测试。
输入你的顶级域名,然后点击添加区域
按钮来创建该区域。
创建您的名称服务器的 NS 条目:
*hostmaster.example-dns.com *ns1.example-dns.com *ns2.example-dns.com
创建至少一个 A 记录来测试复制。
**注意:如果您的奴隶服务器未列为该区域的名称服务器,则不会复制该区域。
几秒钟后,新的条目应该传播到你的奴隶服务器。
测试在 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 节点之间保持同步。