powerdns 系列之二 PowerDNS Authoritative Server

news2024/11/15 2:21:36

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_exists
  FOREIGN 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_exists
  FOREIGN 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.conf

vi /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 ps

netstat -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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/172039.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Alibaba微服务组件Nacos注册中心学习笔记

1. 什么是 Nacos 什么是 Nacos官方网站:什么是 Nacos 官方&#xff1a;一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台。 集 注册中心配置中心服务管理 平台 Nacos 的关键特性包括: 服务发现和服务健康监测 动态配置服…

Vue前端项目【尚品汇】

Vue前端项目【尚品汇】1. 说明2. 对项目创建3.结构4. 项目运行起来时&#xff0c;浏览器自动打开5.关闭ESLint校验功能1. 说明 学习完了Vue后并没有一个整体的项目&#xff0c;让我明白前端的工程化开发。因此在B站找了一个开源的项目进行练手&#xff0c;并在这里进行记录。 …

深度学习理论介绍

在机器学习理论介绍中说过&#xff0c;深度学习是机器学习的一种技术&#xff0c;下面我们具体来看下。 1、 定义 深度学习首先是一种机器学习。深度学习的基础&#xff0c;叫做神经网络&#xff0c;这本身就是一种机器学习算法。 深度神经网络&#xff08;Deep Neural Netwo…

产品小白如何从模仿开始学习Axure

​有一些小伙伴有这样的疑问&#xff0c;如果想学习产品经理的知识&#xff0c;但是从来对产品经理完全没有认识&#xff0c;该怎样去开始学习呢&#xff1f; 对于这种情况的小伙伴&#xff0c;有个建议是可以先从axure的学习入手。 那么问题又来了&#xff0c;应该如何开始axu…

只靠石墨烯电池,撑不起两轮电动车的“高端梦”

文|智能相对论作者|陈明涛在两轮电动车上&#xff0c;“石墨烯”电池已经成为品牌标配。雅迪、爱玛、台铃等都有搭载石墨烯电池的车型&#xff0c;雅迪的TTFAR石墨烯电池已经迭代到第4代&#xff0c;而第3代Plus电池搭载在冠能3 E9 PRO上完成量产上市&#xff1b;爱玛、台铃都和…

(侯捷C++)1.1面向对象高级编程(上)

一.C编程简介 1.C历史 B语言 → C语言 → C语言&#xff08;new C → C with Class → C&#xff09; 面向对象的语言&#xff1a;C、Java、C# 2.C演化 C 98(1.0) → C 03 → C 11(2.0) → C 14 Class两个经典分类&#xff1a;有指针&#xff08;Complex类为例&#xff0…

python经典例题

目录标题1&#xff0c;计算数字的阶乘2&#xff0c;区间内的所有素数3&#xff0c;求前n个数字的平方和4&#xff0c;移除列表中的多个元素5&#xff0c;列表去重6&#xff0c;对简单列表元素排序7&#xff0c;对复杂列表元素排序8&#xff0c;读取成绩问卷并排序-读取文件&…

在MySQL5基础上安装MySQL8解压版安装服务指向MySQL5的问题

Windows10在MySQL5解压版基础上安装MySQL8解压版后服务启动失败 1. 遇到的问题&#xff1a; MySQL8目录下没有生成data文件夹启动服务失败&#xff0c;右键服务属性&#xff0c;可执行文件的路径竟然是MySQL目录下的日志文件在MySQL5目录下&#xff0c;日志内容会提示读取了M…

【C语言】动态内存实现通讯录(malloc,calloc,realloc)

目录 一、为什么要存在动态内存开辟 二、动态内存函数 2.1 malloc 2.1.1 函数介绍 2.1.2 函数的使用 2.1.3 free 2.2 calloc 2.2.1 函数介绍 2.2.2 函数的使用 2.3 realloc 2.3.1 函数的介绍 2.3.2 函数的使用 三、改进通讯录 3.1 初始化 3.2 增加信息 3.3 排序&am…

R语言贝叶斯方法在生态环境领域中的高阶技术应用

贝叶斯统计已经被广泛应用到物理学、生态学、心理学、计算机、哲学等各个学术领域&#xff0c;其火爆程度已经跨越了学术圈&#xff0c;如促使其自成统计江湖一派的贝叶斯定理在热播美剧《The Big Bang Theory》中都要秀一把。贝叶斯统计学即贝叶斯学派是一门基本思想与传统基于…

从正则表达式到NFA

一、正则表达式到NFA的基本结构 1. 我们先回顾一下 RE 的三个基本操作&#xff1a; 可选&#xff08;alternative&#xff09;&#xff1a;对于给定的两个正则表达式 M 和 N&#xff0c;选择操作符&#xff08; | &#xff09;形成一个新的正则表达式 M|N &#xff0c;如果一…

28.Isaac教程--使用Sight的远程操纵杆

使用Sight的远程操纵杆 ISAAC教程合集地址: https://blog.csdn.net/kunhe0512/category_12163211.html 文章目录使用Sight的远程操纵杆设置 Isaac 应用程序以使用虚拟游戏手柄小部件关于虚拟游戏手柄小部件使用虚拟游戏手柄小部件运作模式手柄模式鼠标模式键盘模式控制机器人运…

设计模式_行为型模式 -《责任链模式》

设计模式_行为型模式 -《责任链模式》 笔记整理自 黑马程序员Java设计模式详解&#xff0c; 23种Java设计模式&#xff08;图解框架源码分析实战&#xff09; 概述 在现实生活中&#xff0c;常常会出现这样的事例&#xff1a;一个请求有多个对象可以处理&#xff0c;但每个对象…

windows最小化安装mysql8

第一步&#xff1a;下载 从官网下载&#xff0c;https://dev.mysql.com/downloads/mysql 第二步&#xff1a;安装 下载后解压到目录即可。 我这里解压到D:\MYSQL\mysql-8.0.32-winx64\mysql-8.0.32-winx64 第三步&#xff1a;初始化配置 1、添加系统变量 在系统变量PATH后…

【C++】从0到1入门C++编程学习笔记 - 基础入门篇:数组

文章目录一、概述二、一维数组2.1 一维数组定义方式2.2 一维数组数组名2.3 C 实现冒泡排序三、二维数组3.1 二维数组定义方式3.2 二维数组数组名3.3 二维数组应用案例一、概述 所谓数组&#xff0c;就是一个集合&#xff0c;里面存放了相同类型的数据元素 特点1&#xff1a;数…

(15)go-micro微服务main.go开发

文章目录一 导包二 配置中心三 注册中心四 zap日志初始化五 初始化Mysql数据库六 初始化Redis连接七 注册服务八 初始化服务九 注册 handle十 启动服务十一 main.go全部代码十二 最后一 导包 import (micro2 "account/common/micro""account/config/logger&quo…

day17|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

530.二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。差值是一个正数&#xff0c;其数值等于两值之差的绝对值。 示例 1&#xff1a; 输入&#xff1a;root [4,2,6,1,3] 输出&#xff1a;1 示例 2&#xff1…

Redis持久化——AOF机制详解

在运行情况下&#xff0c;Redis 以数据结构的形式将数据维持在内存中&#xff0c;为了让这些数据在 Redis 重启之后仍然可用&#xff0c;需要将数据写入持久存储 持久化是指将数据写入持久存储&#xff0c;例如固态磁盘(SSD) Redis 提供了一系列持久化选项。这些包括&#xff1…

[GYCTF2020]Blacklist(堆叠注入)

目录 信息收集 堆叠注入 payload 总结 信息收集 观察url变化是get请求的SQL注入题目 判断注入类型 1和1"回显一样 1回显报错 1 or 11# array(2) {[0]>string(1) "1"[1]>string(7) "hahahah" }array(2) {[0]>string(1) "2"[…

【C语言进阶】最常用的库函数大全——从入门到精通

目录 一.字符串函数 1.strlen——求字符串长度 2.长度不受限制的字符串函数 a.strcpy——字符串拷贝 b.strcat——追加字符串 c.strcmp——字符串比较 3.长度受限制的字符串函数——strncpy,strncat,strncmp 4.字符串查找 a.strstr——判断是否为子字符串 b.strtok—…