如何在 CentOS 7 上安装 PowerDNS 和 Poweradmin
在此页
- 先决条件
- 我们将做什么:
- 第 1 步 - 安装 EPEL 和 Remi 存储库
- 第 2 步 - 安装和配置 MariaDB
- 第 3 步 - 安装 PowerDNS
- 第 4 步 - 安装 Poweradmin
- 第 5 步 - Poweradmin 安装后
- 第 6 步 - 创建示例区域和 DNS 记录
- 参考资料
PowerDNS (pdns) 是一个用 C++ 编写并在 GPL 许可下发布的开源 DNS 服务器。它已经成为传统 DNS 服务器 Bind 的一个很好的替代品,具有更好的性能和更低的内存需求。 PowerDNS 提供了两种产品,Authoritative server 和 Recursor。 PowerDNS 权威服务器可以通过不同的后端进行配置,包括普通的绑定区域文件、MySQL、PostgreSQL、SQLite3 或 LDAP 等 RDBMS。
在本教程中,我将向您展示如何安装和配置以 MariaDB 数据库服务器为后端的 PowerDNS 权威服务器,并使用 Poweradmin 轻松管理 DNS。
先决条件
- CentOS 7 服务器
- 根权限
我们将要做什么:
- 安装 EPEL 和 Remi 存储库
- 安装和配置 MariaDB
- 安装 PowerDNS
- 安装 Poweradmin
- Poweradmin 安装后
- 创建示例区
第 1 步 - 安装 EPEL 和 Remi 存储库
首先,我们需要为 PowerDNS 安装安装依赖项。我们要为 PHP 7.2 安装安装 EPEL 存储库和 REMI。
使用以下命令安装 EPEL 和 PHP Remi 存储库。
yum -y install epel-release
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
将这些存储库添加到系统后,安装 yum-utils 包。
yum -y install yum-utils
并使用以下命令启用 PHP 7.2 Remi 存储库。
yum-config-manager --enable remi-php72
第 2 步 - 安装和配置 MariaDB
PowerDNS 权威服务器支持不同的后端,包括 MySQL/MariaDB 数据库服务器。后端术语是服务器将查询的数据存储区,其中包含 DNS 记录(和一些元数据)。对于本指南,我们将使用 MariaDB 作为后端。
使用以下 yum 命令安装 MariaDB。
yum -y install mariadb mariadb-server
安装完成后,启动MariaDB服务并将其添加到启动引导时间。
systemctl start mariadb
systemctl enable mariadb
接下来,我们将使用名为 mysql_secure_installation 的交互式工具为 MariaDB 配置 root 密码。
运行下面的命令。
mysql_secure_installation
系统将提示您配置数据库服务器的根密码。输入 Y 设置 root 密码并输入一个强密码。
Set root password? [Y/n] Y
New password:
Re-enter new password:
对于其他人,只需键入 Y 即可。
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
因此,您已经安装了 MariaDB 数据库服务器并设置了用于身份验证的 root 密码。
接下来,我们将为 PowerDNS 安装创建一个新的数据库和用户。使用用户 root 和密码登录到 MySQL shell。
运行下面的 MySQL 命令。
mysql -u root -p
PASSWORD
现在创建一个名为 powerdns 的新数据库,并将所有数据库权限授予一个名为 pdns 且密码为 pdnspassword2018 的新用户。
create database powerdns;
grant all privileges on powerdns.* to identified by 'pdnspassword2018';
flush privileges;

之后,通过运行下面的 MySQL 查询为 PowerDNS 数据库创建表结构。
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 DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
PRIMARY KEY (id)
) Engine=InnoDB;
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;
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX recordorder ON records (domain_id, ordername);
CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) NOT NULL,
PRIMARY KEY (ip, nameserver)
) Engine=InnoDB;
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) NOT NULL,
comment VARCHAR(64000) NOT NULL,
PRIMARY KEY (id)
) Engine=InnoDB;
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 INT AUTO_INCREMENT,
domain_id INT NOT NULL,
kind VARCHAR(32),
content TEXT,
PRIMARY KEY (id)
) Engine=InnoDB;
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;
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;
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
quit;
因此,已创建 MySQL/MariaDB 数据库和用于安装 PowerDNS 的用户。
第 3 步 - 安装 PowerDNS
使用以下命令安装 PowerDNS 和所有需要的包。
yum -y install pdns pdns-backend-mysql bind-utils
安装 PowerDNS 包后,进入 /etc/pdns/ 目录并使用 vim 编辑器编辑配置文件 pdns.conf。
cd /etc/pdns/
vim pdns.conf
默认情况下,PowerDNS 使用绑定作为后端。因此,在 launch=bind 配置前面键入注释 # 并粘贴 MySQL 后端配置,如下所示。
#launch=bind
launch=gmysql
gmysql-host=localhost
gmysql-user=pdns
gmysql-password=pdnspassword2018
gmysql-dbname=powerdns
保存并关闭。

现在启动pdns服务,并将其添加到启动引导时间。
systemctl start pdns
systemctl enable pdns
之后,将 DNS 服务添加到防火墙。
firewall-cmd --add-service=dns --permanent
firewall-cmd --reload

并且 PowerDNS 服务已启动并正在运行,使用以下命令进行检查。
netstat -tap | grep pdns
netstat -tulpn | grep 53
dig @10.9.9.10
结果,您将获得 pdns 服务在端口 53 上启动并运行,并从 PowerDNS 服务器获得响应。

第 4 步 - 安装 Poweradmin
在此步骤中,我们将为名为 Poweradmin 的 PowerDNS 安装 DNS 管理。它是一个基于 PHP 的 Web 应用程序,因此我们需要安装 PHP 和 Web 服务器才能运行该应用程序。
使用以下命令安装 httpd Web 服务器和 PHP 包。
yum -y install httpd php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext
安装后,我们需要安装额外的 PHP Pear 包。运行以下命令。
yum -y install php-pear-DB php-pear-MDB2-Driver-mysqli
httpd 和 PHP 安装完成后,启动 httpd 服务并将其添加到启动引导时间。
systemctl start httpd
systemctl enable httpd
接下来,转到 /var/www/html 目录并下载 poweradmin 源代码。
cd /var/www/html/
wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz
提取 poweadmin 压缩文件并重命名它。
tar xvf poweradmin-2.1.7.tgz
mv poweradmin-2.1.7/ poweradmin/
之后,将 HTTP 和 HTTPS 协议添加到防火墙。
firewall-cmd --add-service={http,https} --permanent
firewall-cmd --reload
并为 poweradmin 后安装做好准备。
第 5 步 - Poweradmin 安装后
打开您的网络浏览器并输入服务器 IP 地址以及安装的 /poweradmin/install/ 路径 URL。我的是:
http://10.9.9.10/poweradmin/install/
选择您的首选语言,然后单击转到第 2 步按钮。

现在只需单击转到第 3 步按钮。

并且您将显示数据库配置。键入我们创建的 PowerDNS 数据库详细信息和 PowerDNS 的管理员密码。

单击转到步骤 4 按钮。
之后,您将需要创建一个新用户,其权限将受到限制。按以下方式键入详细信息,并使用您自己的用户名、密码等进行更改。

现在单击转到步骤 5 按钮。
您将看到如下页面。

再次打开您的终端服务器,使用 root 用户和密码登录。然后运行页面上的 MySQL 查询。
mysql -u root -p
PASSWORD
GRANT SELECT, INSERT, UPDATE, DELETE
ON powerdns.*
TO 'hakase'@'localhost'
IDENTIFIED BY 'hakase-labs123';

现在返回 Web 浏览器并单击 Go to Step 6 按钮。
您将看到如下页面。

安装程序无法创建新配置 ../inc/config.inc.php。所以,我们需要手动创建它。
回到终端服务器,进入/var/www/html/poweradmin目录,新建配置文件inc/config.inc.php。
cd /var/www/html/poweradmin
vim inc/config.inc.php
现在将页面上的 PHP 脚本粘贴到其中。
<?php
$db_host = 'localhost';
$db_user = 'hakase';
$db_pass = 'hakase-labs123';
$db_name = 'powerdns';
$db_type = 'mysql';
$db_layer = 'PDO';
$session_key = '=uetwJeD2#uApgO)2Ekj+S#oN1Khhoj';
$iface_lang = 'en_EN';
$dns_hostmaster = 'server.hakase-labs.io';
$dns_ns1 = 'ns1.hakase-labs.io';
$dns_ns2 = 'ns2.hakase-labs.io';
保存并关闭,然后返回浏览器并单击按钮。

并且安装完成。
可选:
如果您想支持其他动态提供程序使用的 URL,请复制 htaccess 文件。
cd /var/www/html/poweradmin
cp install/htaccess.dist .htaccess
之后,您必须删除安装目录。
rm -rf /var/www/html/poweradmin/install

再次返回您的 Web 浏览器并使用以下 URL 登录 Poweradmin 仪表板。
http://10.9.9.10/poweradmin/
使用默认用户 admin 和密码登录,单击 Go 按钮。

结果,您将看到 Poweradmin 仪表板并且安装已完成。

第 6 步 - 创建示例区域和 DNS 记录
在此阶段,我们将通过为名为 emma.io 的域创建一个新的 DNS 区域来测试 PowerDNS 和 Poweradmin 安装。
在 Poweradmin 仪表板上,单击“添加主区域”菜单。

使用域名 emaa.io 设置区域名称,然后单击添加区域按钮。

单击列表区域菜单以获取所有可用区域。然后单击区域 emma.io 的编辑按钮。

单击列表区域菜单以获取所有可用区域。然后单击区域 emma.io 的编辑按钮。

现在单击“添加记录”按钮,我们成功为名为 emma.io 的域添加了 DNS 区域和 DNS 记录。
接下来,我们将使用 dig DNS 实用命令测试域 emma.io。
检查域emma.io的名称服务器或ns记录。
dig NS emma.io @10.9.9.10

查看emma.io域名的A DNS记录。
dig A emma.io @10.9.9.10

您将看到域 emma.io 有一个来自我们的 DNS 服务器 ns1.hakase-labs.io 的名称服务器,并且该域名的 A 与我们在顶部的配置相匹配,服务器 IP 地址为 10.9.9.11。
至此,PowerDNS和Poweradmin在CentOS 7上的安装配置已经顺利完成。
参考
- <李>
- https://github.com/poweradmin/poweradmin