美文网首页
powerdns zone配置

powerdns zone配置

作者: 一瓶多先生 | 来源:发表于2020-10-28 11:19 被阅读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状态必须在 /etc/powerdns/pdns.conf 配置文件中指定
  • Master/Slave的状态存在数据库中的domains表中, 表中的type字段必须生命为Master 或者Slave, 如果type为Slave那么表中的Master字段需要存Master节点的IP地址
  • Nameserver必须设置为NS记录

主要工作原理如下:

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

  • 当区域的刷新间隔到期时
  • 当其Master服务器主动向Slave服务器通知区域更改时
  • 启动区域的Slave服务器时
  • 在区域的Slave服务器使用DNS控制台以便手动启动来自其master服务器的传送时

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

  • Slave像Master发出请求查询SOA
  • Master 响应请求并回复SOA资源记录的给Slave, Slave进行序列号对比如果这个number比当前存储的高那就说明master服务器存在改变
  • Slave服务器向Master DNS服务器发送初始“所有区域”传送(AXFR)区域传输请求。
  • Master服务器作出响应并将全量或者增量信息发送给Slave服务器
  • 根据SoA记录中refresh的间隔, slave服务器从新进行上面的操作

有关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
  • primary: default-soa-name 表示该Zone的解析服务器
  • hostmaster: hostmaster@domain-name 表示该域名的所有者, 该信息的第一个点表示为@
  • serial(序列号): 是域名记录的版本,每更改一次域名的任何DNS记录,版本号就会自动加一,这时secondary dns就会知道DNS记录发生更改,以便重新同步。
  • refresh(刷新时间): 告诉secondary dns多久应该查询primary dns,看看DNS记录是否有更新。每次查询时,secondary dns会向primary dns请求SOA记录。如果记录中的serial number跟secondary dns已有的序列号不一样,则会向primary dns请求传送域名的当前的DNS记录。
  • retry(重试时间): 如果想primary dns请求传送域名当前的DNS记录失败后,间隔重试时间后再次重试请求。一般来说,retry小于refresh。
  • expire:(过期时间): 在过期时间之前,secondary dns会继续请求DNS记录,并且在此时间里,secondary dns会根据已有的记录应答相关的DNS查询。如果到了过期时间后,secondary dns会停止应答该域名的DNS查询。
  • default_ttl 域名所有记录的最小生存时间值。当用户DNS查询到记录后,将存在缓存中,直到至少过了这个时间才将缓存刷新重新查询。

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

相关文章

  • powerdns zone配置

    Zone Settings 概述 根据10.1 PowerDNS安装部署[https://www.jianshu....

  • PDNS-Authoritative简介

    本文主要介绍PowerDNS的主要特性和初始化安装的配置方法。 1、PowerDNS简介 PowerDNS(PDN...

  • nginx limit_req && limit_req_zon

    limit_req zone=req_zone; 严格依照在limti_req_zone中配置的rate来处理请求...

  • nginx限流配置

    配置示例:http {limit_req_zone $binary_remote_addr zone=one:10...

  • Realm和Period

    在配置多个zongroup或者使用非默认zone名称时,需要手动创建Realm、Zonegroup、Zone信息,...

  • BIND编译安装

    安装 配置 rndc.conf named.conf 根解析-db.ca zone - 正向解析 zone - 反...

  • PowerDNS

    安装 pdns.sql web 管理 PowerDNS1.访问 powerdns服务器IP/pdns/instal...

  • SpringCloud Eureka进行服务分区

    一、通过配置文件创建eureka集群 如图所示,创建了有两个分区的Eureka集群。Zone2-1和Zone2-2...

  • 数据库配置

    1.时区配置 获取时区:show variables like '%time_zone%'; 设置为北京:set ...

  • android NITZ NTP

    NITZ:Network Identity and Time Zone(网络标识和时区),是一种用于自动配置本地的...

网友评论

      本文标题:powerdns zone配置

      本文链接:https://www.haomeiwen.com/subject/geqamktx.html