专栏首页云计算教程系列如何在Ubuntu 14.04上的从属PowerDNS服务器上配置DNS复制 ###
原创

如何在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 条评论
登录 后参与评论

相关文章

  • CentOS 7如何设置uWSGI和Nginx提供Python应用服务

    在本指南中,我们将设置一个由uWSGI提供服务的简单WSGI应用程序。我们将使用Nginx Web服务器作为应用程序服务器的反向代理,以提供强大的连接处理。我们...

    陈树丶
  • 如何在CentOS 7上使用Gunicorn和Nginx为Flask应用程序提供服务

    在本指南中,我们将使用CentOS 7上的Flask微框架设置一个简单的Python应用程序。本文的大部分内容将是关于如何设置Gunicorn应用程序服务器以启...

    陈树丶
  • 给你CVM服务器加把锁,如何使用SSH密钥

    SSH或安全shell是用于管理服务器和与服务器通信的加密协议。使用Ubuntu服务器时,您可能会将大部分时间花在通过SSH连接到服务器中。

    陈树丶
  • 主机安全(云镜)产品简介

    安全没有绝对的如何保护好企业的数据安全是摆在管理员面前的一道难题,根据个经历可以分以下两个方便来提升企业的安全等级。

    研究僧
  • linux curl 测试域名劫持

    -v 参数可以显示一次 http 通信的整个过程,包括端口连接和 http request 头信息。

    葫芦
  • 全球最大网络袭击——原来凶手就是你!

    [导语] 当地时间20日,白宫第一次正式宣布,确认今年早些时候造成全球计算机系统瘫痪的网络袭击Wanna-cry的幕后黑手是朝鲜政府,并对金正恩政权进行了严厉谴...

    企鹅号小编
  • 使用NGINX作为前端代理和软件负载均衡器

    NGINX Web服务器可以充当功能非常强大的软件负载平衡器,此外还有更传统的角色,通过HTTP使用FastCGI处理程序为脚本提供静态内容和动态内容。因为NG...

    Techeek
  • 网站性能优化——DNS预热与合并HTTP请求

    有人会很奇怪,现代浏览器都可以并发请求资源了,为什么还要这么做?我只能说你还too young too simple了。浏览器虽然可以并发,但是PC接入互联网的...

    前端博客 : alili.tech
  • 小师妹学JavaIO之:文件读取那些事

    小师妹最新对java IO中的reader和stream产生了一点点困惑,不知道到底该用哪一个才对,怎么读取文件才是正确的姿势呢?今天F师兄现场为她解答。

    程序那些事
  • 原创 | 使用wireshark+python邮件服务制作出自己的私人新闻助手

    爬虫这麽火爆,那麽我们如何获得一些比较不错手机APP中的数据呢?今天就来教下大家使用Wireshark进行手机抓包,当然方法是通用的,不论你是Fidder还是其...

    黄泽杰

扫码关注云+社区

领取腾讯云代金券