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

介绍

在本教程中,我们将学习如何在主/从配置中设置PowerDNS,并从主DNS服务器到从服务器进行自动复制。

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

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

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

要完成本教程,您需要具备一台已经设置好可以使用sudo命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

准备

请完成以下要求:

  • 两个512 MB Droplet或更大的64位Ubuntu 14.04服务器。运行具有中等数量区域/记录的PowerDNS服务器应该足够512 MB
  • 一个拥有sudo权限的用户
  • 在Ubuntu 14.04上使用MariaDB后端安装和配置PowerDNS
  • 针对在注册商处配置的域的胶水记录和名称服务器设置

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

您需要相应地更新胶粘记录。请使用以下信息作为指导。有关配置DNS记录的详细信息,请参阅以前的PowerDNS教程。

  • 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服务器。一台服务器将成为我们的主服务器,而另一台服务器将成为我们的从服务器。

如果您还没有这样做,请在Ubuntu 14.04上使用MariaDB后端安装和配置PowerDNS。

当您有两个功能强大的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子网,是此配置所必需的。

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秒。您可以完全复制配置。

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

第4步 - 测试主/从连接

此步骤要求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两个服务器时,继续下一步。

步骤5 - 使用复制配置DNS区域

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

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

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

单击“ 添加主区域”链接以创建新的区域文件。您可以使用原始名称或新域test.com对此进行测试。

输入您的顶级域名,然后单击“ 添加区域”按钮以创建区域。

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

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

创建至少一条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.comns2.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》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏月色的自留地

新麦装机问题汇

14730
来自专栏皮振伟的专栏

[linux][memory]进程的最大内存使用量的讨论

前言: 一个进程最大能使用多少虚拟内存,能控制的地方还是比想象的多一点。 尤其是IaaS上,一个qemu进程能使用多少虚拟内存,就是对应着虚拟机的物理内存的最大...

2.6K110
来自专栏云计算教程系列

如何在Ubuntu上构建Android ROM

Android是当今世界上最流行的操作系统。数以百计的不同设备制造商选择将其安装在他们的设备上,因为它是免费的开源的,并且围绕它构建了大量的应用程序和服务生态系...

22300
来自专栏互扯程序

Linux常用Shell脚本,值得学习及收藏

在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运...

27410
来自专栏pythonlove

Linux防火墙iptables(二)

上一篇文章我们说了一些iptables/netfilter的基础知识,本文我们来介绍一下iptables的规则编写。Iptables的规则可以概括的分为两个方面...

44520
来自专栏北京马哥教育

DNS从入门到管理(一)

DNS概述 DNS(Domain Name System,域名系统),域名和IP地址相互映射的一个分布式数据库,通过主机名,最终得到该主机名对应的IP地址的过程...

68860
来自专栏云计算教程系列

如何在Ubuntu 16.04上设置时间同步

准确的计时已成为现代软件部署的关键组成部分。无论是确保以正确的顺序记录日志还是正确应用数据库更新,不同步的时间都可能导致错误,数据损坏和其他难以调试的问题。

38840
来自专栏Seebug漏洞平台

Struts2 REST 插件 XStream 远程代码执行漏洞 S2-052(CVE-2017-9805)

漏 洞 概 述 1. 漏洞信息: 2017年9月5日,Apache Struts 发布最新安全公告。Apache Struts2 的 REST 插件存在远程...

31460
来自专栏Java编程技术

Druid连接池原理学习

(1)、 如果设置了maxWait或者构造函数参数传入的为true,则创建的ReentrantLock为公平锁,否者为非公平锁 (2)、 如果设置了initi...

2.2K20
来自专栏北京马哥教育

万字长文带你OpenStack从入门到放弃

23240

扫码关注云+社区

领取腾讯云代金券