PowerDNS Authoritative Server
权威服务器,直接查询数据库去尝试解析,数据库中若不存在此记录,则直接返回空结果。

os: centos 7.8.2003
pnds: 4.7.3

安装 pdns

安装 pdns auth

yum install epel-release yum-plugin-priorities
curl -o /etc/yum.repos.d/powerdns-auth-47.repo https://repo.powerdns.com/repo-files/el-auth-47.repo
yum install pdns

安装 pdns backend

使用 postgresql 作为存储数据库,需要安装 pdns-backend-postgresql

这里有个小细节需要注意下

依赖安装 postgresql-libs 的版本较低,登录 pgsql 10 及以上会提示 SCRAM authentication requires libpq version 10 or above 。

需要 postgresql-libs 最低为 10 版本,可提前下载这两个 rpm 包 。

postgresql10.x86_64                     10.23-1PGDG.rhel7              @pgdg10
postgresql10-libs.x86_64                10.23-1PGDG.rhel7              @pgdg10

安装 pdns backend

yum install pdns-backend-geoip \
pdns-backend-ldap \
pdns-backend-lmdb \
pdns-backend-lua2 \
pdns-backend-mysql \
pdns-backend-odbc \
pdns-backend-pipe \
pdns-backend-postgresql \
pdns-backend-remote \
pdns-backend-sqlite \
pdns-backend-tinydns

登录数据库 创建 user、database,参考 https://doc.powerdns.com/authoritative/backends/generic-postgresql.html#settings

create user pdns with password 'xxxxx';
create database pdns_db with owner='pdns';

创建表,参考 https://doc.powerdns.com/authoritative/backends/generic-postgresql.html#settings

CREATE TABLE domains (id                    SERIAL PRIMARY KEY,name                  VARCHAR(255) NOT NULL,master                VARCHAR(128) DEFAULT NULL,last_check            INT DEFAULT NULL,type                  TEXT NOT NULL,notified_serial       BIGINT DEFAULT NULL,account               VARCHAR(40) DEFAULT NULL,options               TEXT DEFAULT NULL,catalog               TEXT DEFAULT NULL,CONSTRAINT c_lowercase_name CHECK (((name)::TEXT = LOWER((name)::TEXT)))
);CREATE UNIQUE INDEX name_index ON domains(name);
CREATE INDEX catalog_idx ON domains(catalog);CREATE TABLE records (id                    BIGSERIAL PRIMARY KEY,domain_id             INT DEFAULT NULL,name                  VARCHAR(255) DEFAULT NULL,type                  VARCHAR(10) DEFAULT NULL,content               VARCHAR(65535) DEFAULT NULL,ttl                   INT DEFAULT NULL,prio                  INT DEFAULT NULL,disabled              BOOL DEFAULT 'f',ordername             VARCHAR(255),auth                  BOOL DEFAULT 't',CONSTRAINT domain_existsFOREIGN KEY(domain_id) REFERENCES domains(id)ON DELETE CASCADE,CONSTRAINT c_lowercase_name CHECK (((name)::TEXT = LOWER((name)::TEXT)))
);CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX recordorder ON records (domain_id, ordername text_pattern_ops);CREATE TABLE supermasters (ip                    INET NOT NULL,nameserver            VARCHAR(255) NOT NULL,account               VARCHAR(40) NOT NULL,PRIMARY KEY(ip, nameserver)
);CREATE TABLE comments (id                    SERIAL PRIMARY KEY,domain_id             INT NOT NULL,name                  VARCHAR(255) NOT NULL,type                  VARCHAR(10) NOT NULL,modified_at           INT NOT NULL,account               VARCHAR(40) DEFAULT NULL,comment               VARCHAR(65535) NOT NULL,CONSTRAINT domain_existsFOREIGN KEY(domain_id) REFERENCES domains(id)ON DELETE CASCADE,CONSTRAINT c_lowercase_name CHECK (((name)::TEXT = LOWER((name)::TEXT)))
);CREATE INDEX comments_domain_id_idx ON comments (domain_id);
CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);CREATE TABLE domainmetadata (id                    SERIAL PRIMARY KEY,domain_id             INT REFERENCES domains(id) ON DELETE CASCADE,kind                  VARCHAR(32),content               TEXT
);CREATE INDEX domainidmetaindex ON domainmetadata(domain_id);CREATE TABLE cryptokeys (id                    SERIAL PRIMARY KEY,domain_id             INT REFERENCES domains(id) ON DELETE CASCADE,flags                 INT NOT NULL,active                BOOL,published             BOOL DEFAULT TRUE,content               TEXT
);CREATE INDEX domainidindex ON cryptokeys(domain_id);CREATE TABLE tsigkeys (id                    SERIAL PRIMARY KEY,name                  VARCHAR(255),algorithm             VARCHAR(50),secret                VARCHAR(255),CONSTRAINT c_lowercase_name CHECK (((name)::TEXT = LOWER((name)::TEXT)))
);CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

配置

cp /etc/pdns/pdns.conf /etc/pdns/pdns.conf.bak
> /etc/pdns/pdns.confvi /etc/pdns/pdns.conf
#启用 rest api
api=yes
api-key=aabbccdd112233009988#默认配置
daemon=no
guardian=no
setgid=pdns
setuid=pdns#数据库设置
launch=gpgsql
gpgsql-host=xxx.xxx.xxx.xxx
gpgsql-port=5432
gpgsql-dbname=pdns_db
gpgsql-user=pdns
gpgsql-password=xxxxx#DNS服务监听设置
local-address=0.0.0.0
local-port=53  #启用 webserver 监控
webserver=yes
webserver-address=0.0.0.0
webserver-allow-from=0.0.0.0/0
webserver-port=8081#域名动态解析
enable-lua-records=yes

启动

chmod -R 755 /etc/pdns/pdns.conf
systemctl enable pdns
systemctl start pdns
systemctl status pdns

如果碰到启动错误,是端口 53 被占用的话,可以参考这篇文章处理下
<<CentOS 7 中关闭删除 virbr0 虚拟网>>

日常配置

建议通过 PowerDNS-Admin 来完成

安装UI界面

如果全部使用命令行,操作缺失比较麻烦,可以通过第三方 PowerDNS-Admin 实现界面管理。参考 https://github.com/PowerDNS-Admin/PowerDNS-Admin

安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl enable docker
systemctl start docker
docker run -d \-e SECRET_KEY='a-very-secret-key' \-v pda-data:/data \-p 9191:80 \ngoduykhanh/powerdns-admin:latest

查看启动效果

docker psnetstat -natp

访问 http://localhost:9191/login
第一次访问需要创建个账号

按照操作一步步进行。

日常配置

登录PowerDNS-Admin,左侧选择 +New Domain,即可添加新的域,点击提交

点击域名 Action 的 Manage

增加两条记录后,点击右上 Apply Changes 生效。

参考:
https://repo.powerdns.com/
https://doc.powerdns.com/
https://doc.powerdns.com/authoritative/backends/generic-postgresql.html#settings

powerdns 系列之二 PowerDNS Authoritative Server相关推荐

  1. Microsoft Hyper-V Server 2008 R2和SCVMM2012部署XenDesktop 5.6桌面虚拟化系列之二准备虚拟桌面模板...

    Microsoft Hyper-V Server 2008 R2和SCVMM2012 部署XenDesktop 5.6桌面虚拟化系列 之二准备虚拟桌面模板 接着上一篇文章内容<Microsoft ...

  2. Debezium报错处理系列之二十九:Make sure that an instance of SQL Server is running on the host and accepting TCP

    Debezium报错处理系列之二十九:Make sure that an instance of SQL Server is running on the host and accepting TCP ...

  3. Skype for business混合部署系列之二自定义拓扑信息

    Skype for business混合部署系列之二自定义拓扑信息 此次部署前端服务器共3台,后端数据库2台采用always on方式,2台SQL Server服务器已经安装完成,在这里不做文档,本章 ...

  4. BizTalk学习笔记系列之二:实例说明如何使用BizTalk

    BizTalk学习笔记系列之二:实例说明如何使用BizTalk --.BizTalk学习笔记系列之二<?XML:NAMESPACE PREFIX = O /> Aaron.Gao,2006 ...

  5. zookeeper系列(二)实战master选举

    2019独角兽企业重金招聘Python工程师标准>>> master选举 考虑7*24小时向外提供服务的系统,不能有单点故障,于是我们使用集群,采用的是Master+Slave.集群 ...

  6. spring配置文件_SpringBoot入门建站全系列(二十三)配置文件优先级及自定义配置文件...

    SpringBoot入门建站全系列(二十三)配置文件优先级及自定义配置文件 一.概述 Spring Boot允许多种配置来源,官网是这样说的: Spring Boot使用一种非常特殊的Property ...

  7. 邮箱的创建及配置:Exchange2003系列之二

                  Exchange2003学习系列之二:邮箱的创建及配置 我们在上一篇文章中介绍了如何进行Exchange2003的安装,本文中我们介绍如何在Exchange2003中进行邮 ...

  8. .net 面试题系列文章二(附答案)

    .net 面试题系列文章二(附答案) 内容摘要:本文是.net 面试题系列的第二篇,该系列文章是对网上所有.net面试题的收重新集整理後的系列文章,囊括了c#面试题,vb.net面试题,asp.net ...

  9. 《解剖PetShop》系列之二

    PetShop数据访问层之数据库访问设计 <解剖PetShop>系列之二 二.PetShop数据访问层之数据库访问设计 在系列一中,我从整体上分析了PetShop的架构设计,并提及了分层的 ...

最新文章

  1. linux主机怎么建站,linux主机建站
  2. CSharpGL(42)借助帧缓存实现渲染到纹理(RenderToTexture)
  3. 【数组】Find Peak Element
  4. sdut 3345 哈夫曼编码 优先队列
  5. [html] 请说说你在写布局时对于浏览器兼容性的感受或总结
  6. Java基础:把对象作为参数
  7. @OneToOne or @ManyToOne on references an unknown entity:
  8. 基于Auto.js的自动脚本
  9. 梦网云科技的短信接口怎么样,真实体验
  10. 教你win7免费升级到win10系统教程
  11. centos设置自动开关机
  12. lubuntu输入法设置_Ubuntu 设置中文输入法
  13. Codeforces - F. Dominant Indices
  14. 模拟电路64(滤波电路)
  15. gwr模型用什么做_迷你世界微缩模型还能这样用,玩家自己就能做皮肤
  16. 双摄测距原理_双摄像头系列原理深度剖析
  17. Vue项目使用百度地图api
  18. 一个小垃圾的成长笔记
  19. 指定Jboss的JDK
  20. oracle显示上午下午,如何把时间转换成带有上下午字样的格式?

热门文章

  1. CSS 盒子模型box-sizing
  2. 锤子便签V2.5产品体验报告
  3. 电脑连不上网络, 并且宽带连接是灰色的
  4. Html5面试问题总结(精华)
  5. HashMap为什么是2倍扩容
  6. 【c++篇】c++常见容器中list的模拟实现
  7. 树莓派与win10主机传输文件方式(未完,占坑)
  8. 通过OpenSSL解析X509证书基本项
  9. 宜早不宜晚,使用思维导图训练孩子的逻辑思维!
  10. edg击败we视频_edg击败we视频_LPL夏季赛:EDG零封V5获三连胜 OMG2-1击败WE