1.安装mariaDB

apt update
apt install mariadb-server -y

2.创建数据库表与用户

mysql -u root -p

CREATE DATABASE powerdns;
GRANT ALL ON powerdns.* TO 'powerdns'@'localhost' IDENTIFIED BY 'CHANGEME';
FLUSH PRIVILEGES;
USE powerdns;
CREATE TABLE domains (
id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT UNSIGNED DEFAULT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE UNIQUE INDEX name_index ON domains(name);

CREATE TABLE records (
id BIGINT AUTO_INCREMENT,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(64000) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
disabled TINYINT(1) DEFAULT 0,
ordername VARCHAR(255) BINARY DEFAULT NULL,
auth TINYINT(1) DEFAULT 1,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX ordername ON records (ordername);

CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' NOT NULL,
PRIMARY KEY (ip, nameserver)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE TABLE comments (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) CHARACTER SET 'utf8' DEFAULT NULL,
comment TEXT CHARACTER SET 'utf8' NOT NULL,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

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 INT AUTO_INCREMENT,
domain_id INT NOT NULL,
kind VARCHAR(32),
content TEXT,
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);

CREATE TABLE cryptokeys (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
content TEXT,
PRIMARY KEY(id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE INDEX domainidindex ON cryptokeys(domain_id);

CREATE TABLE tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
PRIMARY KEY (id)
) Engine=InnoDB CHARACTER SET 'latin1';

CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

ALTER table cryptokeys add column published BOOL DEFAULT 1 after active;

3.关闭可能回影响占用端口的系统应用

systemctl disable systemd-resolved
systemctl stop systemd-resolved

4.开始安装后端

Debian 10:

echo "deb [arch=amd64] http://repo.powerdns.com/debian buster-auth-master main" | sudo tee /etc/apt/sources.list.d/pdns.list
apt install curl wget apt-transport-https gnupg2 -y
curl https://repo.powerdns.com/CBC8B383-pub.asc | sudo apt-key add -
apt-get update
apt-get install pdns-server pdns-backend-mysql
echo '
# MySQL Configuration
# Launch gmysql backend
launch+=gmysql
gmysql-host=localhost
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=powerdns
gmysql-password=CHANGEME
gmysql-dnssec=yes
' > /etc/powerdns/pdns.d/pdns.local.gmysql.conf

systemctl restart pdns
systemctl enable pdns

5.关于主从的配置

master ip : 10.1.1.1 master domain:ns1.eqblog.com
slave ip : 10.1.1.2 slave domain:ns2.eqblog.com

master pdns.conf:

allow-axfr-ips=10.1.1.2/32
api=yes #用于开启weeb api
api-key=CHANGEMEAPIKEY #用于开启weeb api
daemon=yes
guardian=yes
include-dir=/etc/powerdns/pdns.d
loglevel=7
master=yes #主从配置
slave=no #主从配置
webserver=yes #用于开启weeb api
webserver-address=0.0.0.0 #用于开启weeb api
webserver-allow-from=0.0.0.0/0 #用于开启weeb api
xfr-cycle-interval=3 #4.5以上需要使用此选项

slave pdns.conf

allow-notify-from=10.1.1.1/32
autosecondary=yes #4.5以上需要使用此选项
daemon=yes
disable-axfr=yes
include-dir=/etc/powerdns/pdns.d
loglevel=7
slave=yes
slave-cycle-interval=3 #4.5以下需要使用此选项
xfr-cycle-interval=5 #4.5以上需要使用此选项

slave和master安装方式相同,只有pdns.conf不同与数据库需要插入新的表。

mysql -u root -p
USE powerdns;
insert into supermasters values ('10.1.1.1', 'ns2.eqblog.com', 'admin');
eixt;
service pdns restart

至此你可以使用powerdns admin进行管理服务,添加域名选择master即可,注意域名需要增加相应的NS解析。