在本教程中,我们将学习如何在主/从配置中设置PowerDNS,并从主DNS服务器到从服务器进行自动复制。
主/从配置提供额外的可靠性。如果其中一个PowerDNS服务器出现故障,您将拥有一个辅助服务器来处理请求。
我们建议在单独的数据中心中配置这些服务器。如果它们位于两个物理位置,那么即使数据中心中断也不会影响您的DNS服务。
在本教程结束时,我们将使用两个功能强大的PowerDNS服务器,使用主/从复制。
要完成本教程,您需要具备一台已经设置好可以使用sudo
命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。
请完成以下要求:
在我们之前的教程中,我们将三个子域指向单个PowerDNS服务器。我们现在将使用其中一个子域指向我们的从属服务器。在我们的示例中,我们的主服务器IP将是111.111.111.111
,我们的从服务器IP将是222.222.222.222
。
您需要相应地更新胶粘记录。请使用以下信息作为指导。有关配置DNS记录的详细信息,请参阅以前的PowerDNS教程。
111.111.111.111
(主服务器)111.111.111.111
(主服务器)222.222.222.222
(从服务器)请注意,您应该在注册商处为名称服务器本身使用的域设置粘合记录和SOA记录。另一方面,对于要在自定义名称服务器上托管其区域文件的其他域,您只需要SOA记录。
首先,我们需要有两个功能强大的PowerDNS服务器。一台服务器将成为我们的主服务器,而另一台服务器将成为我们的从服务器。
如果您还没有这样做,请在Ubuntu 14.04上使用MariaDB后端安装和配置PowerDNS。
当您有两个功能强大的PowerDNS服务器(其中至少有一个运行Poweradmin)时,您可以继续执行下一步。
我们现在准备配置我们的主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子网,是此配置所必需的。
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
现在我们准备配置我们的从服务器了。此服务器将从我们刚刚配置的主服务器复制DNS区域。如果您跟随示例操作的,则这应该是ns2.example-dns.com。
备份原始配置文件。
cd /etc/powerdns
sudo mv pdns.conf pdns.conf.orig
创建新配置文件。
sudo nano pdns.conf
以下详细信息适用于标准从服务器配置,刷新间隔为60秒。您可以完全复制配置。
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
在提示符下输入您的密码:
Output
Enter 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
此步骤要求ns1.example-dns.com指向主服务器,ns2.example-dns.com指向您的从服务器。
如果胶水记录,SOA记录和A记录尚未传播,则可以向/etc/hosts
文件添加覆盖。您将希望在两台服务器上执行此操作。
使用nano打开/etc/hosts
。
sudo nano /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
您的结果应如下所示:
Output
64 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
预期结果:
Output
64 bytes from ns2.example-dns.com (222.222.222.222): icmp_seq=1 ttl=64 time=48.8 ms
现在,使用相同的命令从您的从服务器 ping两个主机名。当您可以从两个服务器ping两个服务器时,继续下一步。
如果两台服务器都正常通信,我们就可以创建第一个具有主/从复制的DNS区域。
通过访问浏览器中的http://111.111.111.111/poweradmin/
登录主服务器上的Poweradmin 。
使用您之前设置的管理员凭据登录。
单击“ 添加主区域”链接以创建新的区域文件。您可以使用原始名称或新域test.com对此进行测试。
输入您的顶级域名,然后单击“ 添加区域”按钮以创建区域。
为您的名称服务器创建NS条目:
创建至少一条A记录以测试复制。
注意:如果未将Slave Server列为区域的名称服务器,则不会复制该区域。
几秒钟后,新条目应传播到从属服务器。
使用dig
测试保存在ns1.example-dns.com的DNS记录。
dig test.com A @ns1.example-dns.com
它应该回应类似于下面的结果。
Output
root@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
它应该回应类似于下面的结果。
Output
root@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节点之间保持同步。
想要了解更多关于配置DNS复制的相关教程,请前往腾讯云+社区学习更多知识。
参考文献:《How To Configure DNS Replication on a Slave PowerDNS Server on Ubuntu 14.04》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。