如何在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 教程。
- hostmaster.example-dns.com
111.111.111.111
(Master Server) - ns1.example-dns.com
111.111.111.111
(Master Server) - ns2.example-dns.com
222.222.222.222
(Slave Server)
请注意,您应该在注册商处为名称服务器本身使用的域设置粘合记录和 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.com 和 ns2.example-dns.com 后,test.com 的设置才会生效在您的注册商处。
结论
我们现在有两个功能强大的 PowerDNS 服务器,在主/从配置中使用 MariaDB 后端。
任何时候对主服务器上的主区域进行更改,它都会通知列出的任何从属服务器,其中列出了它们自己的 NS 记录。
从服务器将自动查询主服务器最近未更新的记录,确保您的 DNS 记录在您的 PowerDNS 节点之间保持同步。