如何在 Rocky Linux 上安装 PowerDNS 和 PowerAdmin
在此页
- 先决条件
- 安装和配置 MariaDB 数据库服务器
- 安装和配置 PowerDNS
- 安装 PowerDNS-Admin
- 安装包依赖
- 设置 Python 虚拟环境
- 安装 python 依赖项
- 使用 MariaDB 数据库配置 PowerDNS-Admin
- 生成数据库架构和构建静态文件
PowerDNS 是一个免费的开源 DNS 服务器软件。它可以用作权威名称服务器和 DNS 递归器。 PowerDNS 使用 C++ 编写,支持多种操作系统,包括 BSD、Linux 和 macOS。
PowerDNS是一款高端、高性能的DNS服务器,支持BIND等多种后端,以及MySQL/MariaDB、PostgreSQL、Oracle数据库等RDBMS后端。
PowerDNS 服务器是高性能的,可以处理数万个并发,支持 DNSSEC,并提供与 Lua 的高脚本化。
在本指南中,我们将向您展示如何在 Rocky Linux 系统上安装 PowerDNS 和 PowerDNS-Admin。我们将使用 MySQL/MariaDB 数据库后端运行 PowerDNS,并设置将用作 PowerDNS 服务器的基于 Web 的管理工具的 PowerDNS-Admin。
本指南还介绍了为基于 Flask 的项目安装 Python 包以及配置将用作 PowerDNS-Admin Web 应用程序反向代理的 Nginx 和 Gunicorn。
先决条件
要开始使用本指南,您需要满足以下要求:
- Rocky Linux 服务器 - 您可以使用 Rocky Linux v8 或 v9。
- 具有 sudo/root 管理员权限的非 root 用户。
安装和配置 MariaDB 数据库服务器
PowerDNS 是一款可扩展的 DNS 服务器软件,支持 PostgreSQL、MariaDB/MySQL 和 SQLite 等多种后端。对于大型部署,您应该考虑使用 PostgreSQL 或 MySQL/MariaDB 作为数据库后端。
您现在将开始在 Rocky Linux 服务器上安装和配置 MariaDB 数据库。您将使用 MariaDB 作为数据库后端来设置 PowerDNS。
默认的 Rocky Linux 存储库提供了多个版本的 MariaDB 服务器包。运行下面的 dnf 命令来安装 MariaDB 数据库服务器。
sudo dnf install mariadb-server
当提示确认时,输入 y 确认并按 ENTER 继续。
安装 MariaDB 服务器后,运行以下 systemctl 命令启动并启用 MariaDB 服务。
sudo systemctl start mariadb
sudo systemctl enable mariadb现在 MariaDB 服务器应该正在运行并且应该已启用。运行以下命令来验证 MariaDB 服务并确保该服务正在运行。
sudo systemctl status mariadb
您将看到以下输出 - MariaDB 服务正在运行并已启用,这意味着该服务将在启动时自动运行。
现在 MariaDB 服务器正在运行,您将通过命令行工具 mysql_secure_installation 设置和保护 MariaDB 安装。
运行以下命令以开始保护 MariaDB 服务器部署。
sudo mysql_secure_installation
然后,您将被要求提供 MariaDB 服务器的一些配置。
- 设置 MariaDB root 密码?输入 y 以确认并键入 MariaDB 服务器的新密码,然后重复密码。
- 禁用 MariaDB root 用户的远程登录?输入 y 确认并禁用它。
- 从 MariaDB 中删除默认的匿名用户?输入 y 确认。
- 从 MariaDB 中删除默认数据库测试?再次输入 y 确认。
- 最后,重新加载表权限以应用新更改?输入 y 确认,MariaDB 将重新加载所有权限并应用新设置。
现在您已经保护了 MariaDB 部署,接下来您将为 PowerDNS 设置一个新的 MariaDB 数据库和用户。
首先,运行下面的 mysql 命令以 MariaDB root 用户身份登录到 MariaDB shell。
sudo mysql -u root -p
当要求输入密码时,输入您的 MariaDB root 用户的密码。
接下来,运行以下查询以创建新的 MariaDB 数据库和用户。在此示例中,您将使用用户 pdnsadmin 创建一个新的数据库 pdns,密码为 password。
CREATE DATABASE pdns;
GRANT ALL ON pdns.* TO IDENTIFIED BY 'password';
FLUSH PRIVILEGES;现在运行以下查询来验证 MariaDB 用户 [email 的权限。
SHOW GRANTS FOR ;
您将看到以下输出 - MariaDB 用户 [email 具有访问 PowerDNS 数据库 pdns 的权限。
现在键入 quit 退出 MariaDB shell。
在 MariaDB 服务器运行的情况下,您将使用 MariaDB 数据库后端安装和配置 PowerDNS 服务器。
安装和配置 PowerDNS
安装 MariaDB 数据库服务器后,您现在将安装 PowerDNS 服务器并使用 MariaDB 数据库后端设置 PowerDNS。
对于基于 RHEL 的操作系统,PowerDNS 在 EPEL 存储库中可用。因此,在安装 PowerDNS 之前,您必须将 EPEL 存储库添加到您的系统中。
运行以下 dnf 命令来安装 EPEL 存储库。
sudo dnf install epel-release -y
添加 EPEL 存储库后,运行以下 dnf 命令安装 PowerDNS 和 PowerDNS MySQL 后端。
sudo dnf install pdns pdns-backend-mysql
当要求确认时,输入 y 确认并按 ENTER 继续。
PowerDNS 安装完成后,运行以下 mysql 命令导入 PowerDNS 的数据库架构。以下命令将通过 MariaDB 用户 pdnsadmin 将数据库模式导入到数据库 pdns。
sudo mysql -u pdnsadmin -p pdns < /usr/share/doc/pdns/schema.mysql.sql
输入 pdnsadmin 用户的密码,然后按 ENTER 确认并继续。
接下来,使用以下 nano 编辑器命令编辑 PowerDNS 配置 /etc/pdns/pdns.conf。
sudo nano /etc/pdns/pdns.conf
取消注释 MariaDB 后端配置并更改详细信息数据库名称、用户和密码。请务必使用您创建的正确 MariaDB 数据库详细信息。
#################################
# launch Which backends to launch and order to query them in
#
launch=gmysql
gmysql-host=localhost
gmysql-user=pdnsadmin
gmysql-password=password
gmysql-dbname=pdns接下来,取消注释 api 并将值更改为 yes。然后,取消注释 api-key 选项并更改默认密钥。以下 PowerDNS API 将用于通过 PowerDNS-Admin Web 应用程序管理 PowerDNS 服务器。
#################################
# api Enable/disable the REST API (including HTTP listener)
#
api=yes
#################################
# api-key Static pre-shared authentication key for access to the REST API
#
api-key=CHANGEME完成后保存文件并退出编辑器。
配置 PowerDNS 服务器后,运行以下命令来验证 PowerDNS 配置。
pdns_server --daemon=no --guardian=no --loglevel=9
您将看到如下输出 - PowerDNS 与 MariaDB 数据库后端的连接成功,您现在可以按 Ctrl+c 终止该过程。
现在运行以下 systemctl 命令来启动和启用 PowerDNS 服务。
sudo systemctl start pdns
sudo systemctl enable pdns最后,验证 PowerDNS 服务以确保 PowerDNS 正在运行并已启用。
sudo systemctl status pdns
在下面的输出中,您将看到 PowerDNS 服务的当前状态正在运行并已启用,这意味着它将在启动过程中自动运行。
此时,您已经完成了 PowerDNS 服务器的安装。接下来您将开始安装 PowerDNS-Admin,它将用作 PowerDNS 服务器的 Web 前端管理。
安装 PowerDNS-Admin
随着 PowerDNS 的运行,您现在将在 Rocky Linux 服务器上安装和配置 PowerDNS-Admin。 PowerDNS-Admin 是一个基于 Python Flask 的 Web 应用程序,因此 PowerDNS-Admin 的安装与 Flask Web 框架的安装完全相同。
以下是在 Rocky Linux 上安装 PowerDNS-Admin 必须执行的一些步骤
现在让我们开始 PowerDNS-Admin 安装
安装包依赖
安装 PowerDNS-Admin 的第一步是安装包依赖项,例如 Python3、Pip、Node.js 和 Yarn。
在开始之前,请运行下面的 dnf 命令以在您的 Rocky Linux 系统上启用 powertools 存储库。
sudo dnf config-manager --set-enabled powertools
启用 powertools 存储库后,通过下面的 dnf 命令安装 Python 包。
sudo dnf install python3 python3-devel python3-pip python3-xmlsec gcc git mariadb-devel openldap-devel xmlsec1-devel xmlsec1-openssl libtool-ltdl-devel
当提示确认时,输入 y 并按 ENTER 继续。
接下来,通过以下命令将 Node.js 和 Yarn 存储库添加到您的系统。 Node.js 和 Yarn 包将用于为 PowerAdmin Web 应用程序生成静态文件。此示例使用 Node.js v16。
curl -sL https://rpm.nodesource.com/setup_16.x | bash -
curl -sL https://dl.yarnpkg.com/rpm/yarn.repo -o /etc/yum.repos.d/yarn.repo添加存储库后,运行下面的 dnf 命令来安装 Node.js 和 Yarn 包管理器。
sudo dnf install nodejs yarn
输入 y 并在提示安装时按 ENTER。
此外,当提示确认 GPG 密钥时,输入 y 并按 ENTER。
接下来,运行下面的 pip3 命令更新 Python pip 包并将 virtualenv 安装到您的系统。
pip3 install -U pip
pip3 install -U virtualenvPython pip 和 virtualenv 现在将安装在 /usr/local/bin 目录中。通过以下命令将目录 /usr/local/bin 添加到系统 PATH 环境变量中。
echo "export PATH="/usr/local/bin:$PATH"" >> ~/.bashrc
现在使用以下命令在 ~/.bashrc 文件中应用新更改。您现在应该运行 pip 和 virtualenv 命令。
source ~/.bashrc
设置 Python 虚拟环境
安装包依赖项后,您现在将下载 PowerDNS-Admin 源代码并为 PowerDNS-Admin 设置 Python 虚拟环境。
使用以下 git 命令将 PowerDNS-Admin 源代码克隆到 /opt/powerdns-admin 目录。
git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/powerdns-admin
下载源代码后,将工作目录移动到/opt/powerdns-admin 并创建一个新的Python 虚拟环境flask。
cd /opt/powerdns-admin
virtualenv -p python3 flask现在通过以下命令激活 flask Python 虚拟环境。
source flask/bin/activate
激活后,您现在应该会看到提示变为 (flask) [[email /directory/path]#。
从这里开始,您的工作环境应该始终在 Python 虚拟环境 flask 中。
安装 python 依赖项
在设置 Python 虚拟环境并对其进行分类后,您将通过 pip 命令安装 Python 依赖项。
运行以下 pip 命令为 PowerDNS-Admin 安装 Python 依赖项。
pip install python-dotenv
pip install -r requirements.txt现在开始安装 - 这将安装 PowerDNS-Admin 所需的 Python 依赖项,这些依赖项存储在 requirements.txt 文件中。
现在您已经安装了 Python 依赖项,您已准备好使用 MariaDB 数据库设置和配置 PowerDNS-Admin。
使用 MariaDB 数据库配置 PowerDNS-Admin
安装 Python 依赖项后,您现在将使用 MariaDB 数据库设置 PowerDNS-Admin。 PowerDNS-Admin 的数据库详细信息将是与 PowerDNS 服务器相同的数据库。
现在使用以下 nano 编辑器命令编辑文件 /opt/powerdns-admin/powerdnsadmin/default_config.py。
nano /opt/powerdns-admin/powerdnsadmin/default_config.py
更改配置如下。
SALT = 'RANDOM-GENERATED'
SECRET_KEY = 'RANDOM-GENERATED'
BIND_ADDRESS = '0.0.0.0'
PORT = 9191
HSTS_ENABLED = False
OFFLINE_MODE = False
SQLA_DB_USER = 'pdnsadmin'
SQLA_DB_PASSWORD = 'password'
SQLA_DB_HOST = '127.0.0.1'
SQLA_DB_NAME = 'pdns'
SQLALCHEMY_TRACK_MODIFICATIONS = True完成后保存文件并退出编辑器。
生成数据库模式和构建静态文件
在 PowerDNS-Admin 上配置 MariaDB 数据库后,您将迁移数据库并为 PowerDNS-Admin 生成静态文件。
首先,运行以下命令迁移 PowerDNS-Admin 的数据库。这会将一个新的数据库模式插入到将用于 PowerDNS-Admin 的数据库中。
export FLASK_APP=powerdnsadmin/__init__.py
flask db upgrade以下是数据库迁移完成后您将获得的输出。
数据库迁移完成后,运行以下命令为PowerDNS-Admin生成静态文件。
yarn install --pure-lockfile
flask assets build您可以在下面看到通过 yarn 包管理器安装一些 JavaScript 依赖项以及为 PowerDNS-Admin 生成静态文件的过程。
生成静态文件后,运行以下命令停用Python虚拟环境。
deactivate
此时,您已经完成了带有 MariaDB 数据库服务器的 PowerDNS-Admin 的基本安装。您现在可以通过命令行启动 PowerDNS-Admin 应用程序,也可以将 PowerDNS-Admin 作为 systemd 服务运行。
为 PowerDNS-Admin 设置 Systemd 服务
在此步骤中,您将为 PowerDNS-Admin 应用程序设置一个新的 systemd 服务文件。这使您可以通过 systemd 命令轻松管理和维护 PowerDNS-Admin。此外,这将简化 PowerDNS-Admin 的配置。
首先,使用以下 nano 编辑器命令创建一个新的 systemd 服务文件 /etc/systemd/system/powerdns-admin.service。
sudo nano /etc/systemd/system/powerdns-admin.service
将以下配置添加到文件中。使用此配置,您将通过 gunicorn 运行 PowerDNS-Admin 应用程序并作为用户和组运行 pdns。此外,PowerDNS-Admin 将使用 UNIX 套接字文件 /run/powerdns-admin/socket 运行。
[Unit]
Description=PowerDNS-Admin
Requires=powerdns-admin.socket
After=network.target
[Service]
PIDFile=/run/powerdns-admin/pid
User=pdns
Group=pdns
WorkingDirectory=/opt/powerdns-admin
ExecStartPre=+mkdir -p /run/powerdns-admin/
ExecStartPre=+chown pdns:pdns -R /run/powerdns-admin/
ExecStart=/usr/local/bin/gunicorn --pid /run/powerdns-admin/pid --bind unix:/run/powerdns-admin/socket 'powerdnsadmin:create_app()'
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target完成后保存文件并退出编辑器。
接下来,使用以下 nano 编辑器为 PowerDNS-Admin /etc/systemd/system/powerdns-admin.socket 创建一个新的 systemd 套接字文件。
sudo nano /etc/systemd/system/powerdns-admin.socket
将以下配置添加到文件中。
[Unit]
Description=PowerDNS-Admin socket
[Socket]
ListenStream=/run/powerdns-admin/socket
[Install]
WantedBy=sockets.target完成后保存文件并退出编辑器。
现在使用以下 nano 编辑器命令创建一个新的配置文件 /etc/tmpfiles.d/powerdns-admin.conf。
sudo nano /etc/tmpfiles.d/powerdns-admin.conf
将以下配置添加到文件中。
d /run/powerdns-admin 0755 pdns pdns -
完成后保存文件并退出编辑器。
添加新的 systemd 服务文件和新配置后,运行以下命令重新加载 systemd 管理器并在 systemd 上应用新的服务文件。
sudo systemctl daemon-reload
现在通过以下 systemctl 命令启动并启用 PowerDNS-Admin 服务。 PowerDNS-Admin 现在应该与 gunicorn 一起运行并打开 /run/powerdns-admin/ 目录中可用的套接字文件。
sudo systemctl start powerdns-admin.socket powerdns-admin.service
sudo systemctl enable powerdns-admin.socket powerdns-admin.service最后,运行以下命令来验证 PowerDNS-Admin 服务并确保该服务正在运行。
sudo systemctl status powerdns-admin.service powerdns-admin.socket
在下面的输出中,powerdns-admin.service 和 powerdns-admin.socket 正在运行并且都已启用。两种服务都将在系统启动时自动运行。
安装 Nginx 作为 PowerDNS-Admin 的反向代理
在此步骤中,您将设置 Nginx 作为 PowerDNS-Admin 的反向代理。
运行以下 dnf 命令将 Nginx 安装到您的 Rocky Linux 服务器。出现提示时,输入 y 确认并按 ENTER 继续。
sudo dnf install nginx
接下来,使用以下 nano 编辑器创建一个新的 Nginx 服务器块 /etc/nginx/conf.d/pdns.conf。
sudo nano /etc/nginx/conf.d/pdns.conf
在文件中添加如下配置,并确保更改域名。此示例将域 pdns.hwdomain.io 用于 PowerDNS-Admin。
server {
listen 80;
server_name pdns.hwdomain.io;
return 301 https://$http_host$request_uri;
}
server {
listen 443 ssl http2;
server_name pdns.hwdomain.io;
index index.html index.htm;
error_log /var/log/nginx/error_powerdnsadmin.log error;
access_log off;
ssl_certificate /etc/letsencrypt/live/pdns.hwdomain.io/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pdns.hwdomain.io/privkey.pem;
#ssl_dhparam path_to_your_dhparam.pem;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
ssl_session_cache shared:SSL:10m;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_redirect off;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
proxy_buffer_size 8k;
proxy_set_header Host $http_host;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_headers_hash_bucket_size 64;
location ~ ^/static/ {
include mime.types;
root /opt/powerdns-admin/powerdnsadmin;
location ~* \.(jpg|jpeg|png|gif)$ { expires 365d; }
location ~* ^.+.(css|js)$ { expires 7d; }
}
location ~ ^/upload/ {
include mime.types;
root /opt/powerdns-admin;
location ~* \.(jpg|jpeg|png|gif)$ { expires 365d; }
location ~* ^.+.(css|js)$ { expires 7d; }
}
location / {
proxy_pass http://unix:/run/powerdns-admin/socket;
proxy_read_timeout 120;
proxy_connect_timeout 120;
proxy_redirect http:// $scheme://;
}
}完成后保存文件并退出编辑器。
接下来,运行以下命令来验证Nginx配置并确保配置正确。您应该会看到输出消息,例如 syntax ok - test is successful。
sudo nginx -t
现在运行以下 systemctl 命令来启动和启用 Nginx 服务。
sudo systemctl start nginx
sudo systemctl enable nginx最后,通过以下命令验证 Nginx 服务以确保该服务正在运行。
sudo systemctl status nginx
您应该看到 nginx 服务正在运行并已启用的输出。这样,Nginx 服务将在系统启动时自动运行。
访问 PowerDNS-Admin 安装
打开 Web 浏览器并访问 PowerDNS-Admin 安装的域名(即:https://pdns.hwdomain.io),您应该会看到 PowerDNS-Admin 登录页面。
单击链接创建一个帐户,为 PowerDNS-Admin 设置一个新的管理员用户。
现在输入新用户、电子邮件和密码的详细信息。然后单击注册以确认。
创建管理员用户后,您将再次被重定向到 PowerDNS-Admin 登录页面。使用您的新用户管理员和密码登录,然后单击登录。
您现在应该获得 PowerDNS-Admin 仪表板。 PowerDNS-Admin 正在运行,但仍未连接到 PowerDNS 服务器。
要使用 PowerDNS-Admin 设置 PowerDNS 服务器,您必须将通过 PowerDNS 服务器配置的 API 密钥添加到 PowerDNS-Admin。
在 PDNS 设置部分输入 PowerDNS 服务器的详细信息 API,然后单击更新。
当 PowerDNS-Admin 和 PowerDNS 服务器通过 API 连接时,您的仪表板应类似于以下屏幕截图。
从这里,您现在可以通过 PowerDNS-Admin 仪表板轻松添加新的 DNS 记录或修改现有的 DNS 记录。
结论
在本指南中,您学习了如何在 Rocky Linux 服务器上安装带有 MySQL/MariaDB 数据库的 PowerDNS 服务器。您还了解了 MariaDB 数据库在 Rocky Linux 上的基本部署。最后,您学习了安装和配置 PowerDNS-Admin,它将用作 PowerDNS 服务器的基于 Web 的管理工具。 PowerDNS-Admin 以 Nginx 作为反向代理和 MariaDB 数据库后端运行。
随着 PowerDNS 服务器和 PowerDNS-Admin 的运行,您现在可以通过 Web 管理仪表板管理您的 DNS 服务器。您可以通过 PowerDNS-Admin 管理仪表板添加、编辑或删除 DNS 记录。