powerdns zone配置

2020-10-28  本文已影响0人  一瓶多先生

Zone Settings

概述

根据10.1 PowerDNS安装部署 中内容进行配置zone, 建立好powerdns集群后根据需要的域名进行如下配置, 下文的测试域名为example.com, 根据节点的状态分别进行配置。 配置DNS之前需要明白[DNS Modes of Operation](#DNS Modes of Operation) [SOA and NS记录区别](#SOA and NS记录区别) 还有powerdns私用zone递归查询

DNS Modes of Operation

Powerdns总体来说有Master/SlaveNative replication 两个模式, 其中Native replication 数据库主从复制。 考虑使用数据库主从复制的维护成本比较高, 所以使用Master/Slave模式, 当启用Master/Slave模式时需要注意如下配置:

主要工作原理如下:

​ 提到Master和Slave的记录同步就不得不说到SOA记录中的序列号记录和dns的全量更新协议(AXFR)/dns的增量更新协议(IXFR) 。 DNS的区域复制只会发生在如下的情况:

区域复制的主要流程如下:

有关DNS Notify的更多内容请查看https://tools.ietf.org/html/rfc1996.html

SOA and NS记录区别

​ 在任何 DNS 记录文件(Domain Name System (DNS) Zone file)中, 都是以SOA(Start of Authority)记录开始。SOA 资源记录表明此 DNS 名称服务器是为该 DNS 域中的数据的信息的最佳来源。SOA 记录与 NS 记录的区别:简单讲,NS记录表示域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析;SOA记录设置一些数据版本和更新以及过期时间的信息.

SOA

​ SOA记录表明了DNS服务器之间的关系。SOA记录表明了谁是这个区域的所有者。比如51CTO.COM这个区域。一个DNS服务器安装后,需要创建一个区域,以后这个区域的查询解析,都是通过DNS服务器来完成的。现在来说一下所有者,我这里所说的所有者,就是谁对这个区域有修改权利。常见的DNS服务器只能创建一个标准区域,然后可以创建很多个辅助区域。标准区域是可以读写修改的。而辅助区域只能通过标准区域复制来完成,不能在辅助区域中进行修改。而创建标准区域的DNS就会有SOA记录,或者准确说SOA记录中的主机地址一定是这个标准区域的服务器IP地址。

存储格式为:

primary hostmaster serial refresh retry expire default_ttl

dig查询出的格式如下

ns1.a.shifen.com. baidu_dns_master.baidu.com. 2003200012 5 5 2592000 3600

powerdns私用zone递归查询

如下图所示当使用powerdns做为私有zone解析时, recursor将私有zone的转发到authoritative Server, 将不是私有zone的转发到其它dns服务器上, recursor的配置请看 [Recursor Node](#Recursor Node)

zone配置实例

Master Node

建立zone与解析

本文Master node的backend为Mysql,可以直接执行如下SQL建立zone与records, 也另外一种方法使用Powerdns-admin进行相关配置,还有一种方式使用pdnsutil 命令行工具, 建立完成后使用dig验证解析是否生效

mysql> INSERT INTO domains (name, type) values ('example.com', 'Master');
mysql> INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'example.com','localhost admin.example.com 1 10380 3600 604800 3600','SOA',86400,NULL);
mysql> INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'example.com','dns-us1.powerdns.net','NS',86400,NULL);
mysql>  INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'example.com','dns-eu1.powerdns.net','NS',86400,NULL);
mysql>  INSERT INTO records (domain_id, name, content, type,ttl,prio) VALUES (1,'www.example.com','192.0.2.10','A',120,NULL);

以上SQL的主要内容解析如下:

  • 第1行为建立example.com的zone, 由于为Master使用所以type=Master
  • 第2行设置example.com的SOA记录
  • 第3,4行设置zone的nameserver, 一般为powerdns_slave地址
  • 第5行为设置·www.example.com的A记录

pdnsutil

创建zone, 但是创建出来的zone的类型为native,要求为master
# pdnsutil create-zone example.com ns1.example.com.    
添加A 记录record
# pdnsutil add-record example.com www  A '10.40.58.153'
New rrset:
www  example.com. 3600 IN A 10.40.58.153
添加NS的A记录
# pdnsutil add-record example.com ns1  A '10.40.58.153'
New rrset:
www  example.com. 3600 IN A 10.40.58.153

设置zone的metadata

登录Master节点使用powerdns的命令行工具设置metadata, 由于/etc/powerdns/pdns.conf没有设置default notify

# pdnsutil set-meta example.com ALSO-NOTIFY 10.40.58.153
  • 其中example.com为zone的名称, 实际情况根据建立zone与解析 SQL中第一行插入的zone为准
  • ALSO-NOTIFY 10.40.58.153 当这个zone发生通知时通知到10.40.58.15310.40.58.153为Slave节点的IP地址

查看zone的metadata

pdnsutil get-meta example.com

验证解析是否生效

dig A www.example.com @127.0.0.1   #验证A记录是否正常
dig SOA example.com  @127.0.0.1    #验证SOA记录是否正常
dig NS example.com @127.0.0.1      #验证NS记录是否正常

Slave Node

创建slave zone

# pdnsutil create-slave-zone example.com 10.40.58.116
Creating slave zone 'example.com', with master(s) '10.40.58.116:53'

从master上拉取所有的record
# pdns_control retrieve example.com

删除slave zone
# pdnsutil delete-zone example.com

从master从新拉取记录

Recursor Node

编辑/etc/powerdns/recursor.conf 添加如下信息

forward-zones=example.com.=10.40.58.153:53
forward-zones-recurse=.=100.100.2.136:53;100.100.2.138:53
  • 其中forward-zones=example.com 表示将所有该zone的解析交给10.40.58.153这个地址进行解析
  • forward-zones-recurse 表示将不是example.com zone的解析全部交给这两个IP地址解析

配置完成后重新启动recursor根据解析进行测试, 请参考 验证解析是否生效

Q&A

  1. Unable to AXFR zone 'example.com' from remote '10.40.61.116:53' (PDNSException): GSQLBackend unable to feed record: CANTOPEN error in sqlite3, often caused by unwritable sqlite3 db _directory_: unable to open database file

    是因为 /var/lib/powerdbns 目录所属用户和组为root, 执行chown -R pdns:pdns /var/lib/powerdns可以解决此问题

  2. pdns_server: Notification for example.com to 10.40.58.154:53 failed after retries

    查看10.40.58.154主机发现没有任何的日志输出, 也没有触发AXFR, 查看example.com 的metadata发现没有配置also-notify, NS记录也配置错误

  3. Request to queue notification for domain 'example.com' was processed, but no valid nameservers or ALSO-NOTIFYs found. Not notifying!

    zone不存在有效的NS记录也没有配置ALSO-NOTIFYs

上一篇下一篇

猜你喜欢

热点阅读