在本教程中,您将学习如何在 Debian 11/Debian 10 上轻松安装 PowerDNS Admin。PowerDNS Admin 是PowerDNS的 Web 管理界面。它使您能够从 Web 浏览器轻松创建和管理 DNS 区域。
PowerDNS Admin 提供用于管理 PowerDNS 的高级功能。这些包括;
- 多域管理
- 域模板
- 用户管理
- 基于域的用户访问管理
- 用户活动记录
- 支持本地 DB / SAML / LDAP / Active Directory 用户认证
- 支持 Google / Github / Azure / OpenID OAuth
- 支持双因素认证(TOTP)
- 仪表板和 pdns 服务统计信息
- DynDNS 2 协议支持
- 直接使用 IPv6 地址编辑 IPv6 PTR(不再编辑文字地址!)
- 用于操作区域和记录的有限 API
在 Debian 11/Debian 10 上轻松安装 PowerDNS Admin
在 Debian 11/Debian 10 上安装和设置 PowerDNS
按照以下链接在 Debian 11/Debain 10 上安装 PowerDNS:
在 Debian 11/Debian 10 上轻松安装和设置 PowerDNS
注意:我们在已安装 PowerDNS 的同一台服务器上安装了 PowerDNS Admin。
安装所需的软件包依赖项
安装 Python 3 库和开发工具
apt install python3-dev
安装各种必需的构建工具和包依赖项。
apt install libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https virtualenv build-essential libmariadb-dev git python3-flask -y
在 Debian 10/Debian 11 上安装 NodeJS;
apt install curl sudo git -y
curl -sL https://deb.nodesource.com/setup_17.x | sudo -E bash -
apt install -y nodejs
在 Debian 11/Debian 10 上安装 Yarn
curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | sudo tee /usr/share/keyrings/yarnkey.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
apt update
apt install yarn -y
安装 Nginx HTTP 服务器 Debian 10/Debian 11
apt install nginx -y
将 PowerDNS 管理源代码克隆到 Web 根目录
将 PowerDNS Admin git 源代码克隆到您的 Nginx Web 根目录。
在此设置中,我们使用 , /var/www/html/pdns
作为我们的 PowerDNS Admin Web 根目录。您的情况可能有所不同。
git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /var/www/html/pdns
创建 PowerDNS 管理 Virtualenv
导航到 PowerDNS Admin Web 根目录并创建一个 virtualenv。
cd /var/www/html/pdns/
virtualenv -p python3 flask
接下来,激活您的 Python 3 虚拟环境并安装所需的 Python 3 库
source ./flask/bin/activate
pip install -r requirements.txt
配置 PowerDNS 管理数据库连接
退出虚拟环境。
deactivate
编辑默认的 PowerDNS 管理配置文件$WEB_ROOT/powerdnsadmin/default_config.py
,以定义数据库连接详细信息。
将 $WEB_ROOT 替换为您的 Web 根目录的路径。
vim /var/www/html/pdns/powerdnsadmin/default_config.py
在基本的App configs上,您可以替换SALT和SECRET_KEY键,设置绑定地址和端口;
### BASIC APP CONFIG
SALT = 'xohDoozee8Zuneekooch9ohrieghei'
SECRET_KEY = 'hohru1aethaeyahpheH7Gaathaikah'
BIND_ADDRESS = '192.168.58.22'
PORT = 9191
HSTS_ENABLED = False
OFFLINE_MODE = False
在数据库配置上,配置您的 PowerDNS 数据库连接详细信息。请注意,我们正在使用在设置 PowerDNS 时已创建的详细信息 ,如我们的指南中所定义。
### DATABASE CONFIG
SQLA_DB_USER = 'pdnsadmin'
SQLA_DB_PASSWORD = 'PdnSPassW0rd'
SQLA_DB_HOST = '127.0.0.1'
SQLA_DB_NAME = 'kifarunixdemopdns'
SQLALCHEMY_TRACK_MODIFICATIONS = True
保存并退出配置。
接下来,重新激活 virtualenv 运行数据库迁移;
cd /var/www/html/pdns/
source ./flask/bin/activate
export FLASK_APP=powerdnsadmin/__init__.py
flask db upgrade
上述命令完成后,使用yarn生成资产文件;
yarn install --pure-lockfile
flask assets build
退出虚拟环境。
deactivate
运行 PowerDNS 管理员
设置完成后,您可以在独立模式下运行 PowerDNS admin,方法是run.py
在 Web 根目录中执行 。
在此设置中,我们将使用 Nginx Web 服务器访问 PowerDNS Admin。
启用 PowerDNS API 访问
“ PowerDNS 权威服务器具有一个公开 JSON/REST API 的内置网络服务器。该 API 允许控制多个功能、读取统计数据和修改区域内容、元数据和 DNSSEC 密钥材料“。
- 打开 PowerDNS 配置文件
- 启用 API
- 生成并设置API Key;
vim /etc/powerdns/pdns.conf
#################################
# api Enable/disable the REST API (including HTTP listener)
#
# api=no
api=yes
#################################
# api-key Static pre-shared authentication key for access to the REST API
#
# api-key=
api-key=ahqu4eiv2vaideep8AQu9nav5Aing0
保存退出文件,重启PowerDNS;
systemctl restart pdns
创建 PowerDNS 管理 Nginx 站点
使用以下内容创建 PowerDNS Admin Nginx 站点。相应地替换 web 根目录。
vim /etc/nginx/conf.d/pdns-admin.conf
server {
listen *:80;
server_name pdnsadmin.kifarunix-demo.com;
index index.html index.htm index.php;
root /var/www/html/pdns;
access_log /var/log/nginx/pdnsadmin_access.log combined;
error_log /var/log/nginx/pdnsadmin_error.log;
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 $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_headers_hash_bucket_size 64;
location ~ ^/static/ {
include /etc/nginx/mime.types;
root /var/www/html/pdns/powerdnsadmin;
location ~* \.(jpg|jpeg|png|gif)$ {
expires 365d;
}
location ~* ^.+.(css|js)$ {
expires 7d;
}
}
location / {
proxy_pass http://unix:/run/pdnsadmin/socket;
proxy_read_timeout 120;
proxy_connect_timeout 120;
proxy_redirect off;
}
}
保存并退出文件。
删除默认的 Nginx 默认站点。
mv /etc/nginx/sites-enabled/default{,.old}
运行配置语法检查。
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
将 Pdns Admin web 根目录的所有权设置为 web 用户;
chown -R www-data: /var/www/html/pdns
重启Nginx;
systemctl restart nginx
创建 PowerDNS Admin Systemd 服务单元
为了能够将 PowerDNS Admin 作为 systemd 服务运行,请通过运行以下命令创建一个单元文件;
cat > /etc/systemd/system/pdnsadmin.service << 'EOL'
[Unit]
Description=PowerDNS-Admin
Requires=pdnsadmin.socket
After=network.target
[Service]
PIDFile=/run/pdnsadmin/pid
User=pdns
Group=pdns
WorkingDirectory=/var/www/html/pdns
ExecStart=/var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsadmin/socket 'powerdnsadmin:create_app()'
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOL
cat > /etc/systemd/system/pdnsadmin.socket << 'EOL'
[Unit]
Description=PowerDNS-Admin socket
[Socket]
ListenStream=/run/pdnsadmin/socket
[Install]
WantedBy=sockets.target
EOL
echo "d /run/pdnsadmin 0755 pdns pdns -" >> /etc/tmpfiles.d/pdnsadmin.conf
mkdir /run/pdnsadmin/
chown -R pdns: /run/pdnsadmin/
chown -R pdns: /var/www/html/pdns/powerdnsadmin/
重新加载系统配置并启动并启用 PowerDNS Admin 服务以在系统启动时运行;
systemctl enable --now pdnsadmin.service pdnsadmin.socket
检查状态;
systemctl status pdnsadmin.service pdnsadmin.socket
● pdnsadmin.service - PowerDNS-Admin
Loaded: loaded (/etc/systemd/system/pdnsadmin.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-11-28 02:00:51 EST; 10s ago
Main PID: 13859 (gunicorn)
Tasks: 2 (limit: 2359)
Memory: 65.7M
CGroup: /system.slice/pdnsadmin.service
├─13859 /var/www/html/pdns/flask/bin/python3 /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsadmin/socket powerdnsadmin:creat
└─13862 /var/www/html/pdns/flask/bin/python3 /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsadmin/socket powerdnsadmin:creat
Nov 28 02:00:51 debian systemd[1]: Started PowerDNS-Admin.
Nov 28 02:00:51 debian gunicorn[13859]: [2021-11-28 02:00:51 -0500] [13859] [INFO] Starting gunicorn 20.0.4
Nov 28 02:00:51 debian gunicorn[13859]: [2021-11-28 02:00:51 -0500] [13859] [INFO] Listening at: unix:/run/pdnsadmin/socket (13859)
Nov 28 02:00:51 debian gunicorn[13859]: [2021-11-28 02:00:51 -0500] [13859] [INFO] Using worker: sync
Nov 28 02:00:51 debian gunicorn[13859]: [2021-11-28 02:00:51 -0500] [13862] [INFO] Booting worker with pid: 13862
● pdnsadmin.socket - PowerDNS-Admin socket
Loaded: loaded (/etc/systemd/system/pdnsadmin.socket; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-11-28 02:00:51 EST; 10s ago
Listen: /run/pdnsadmin/socket (Stream)
CGroup: /system.slice/pdnsadmin.socket
Nov 28 02:00:51 debian systemd[1]: Listening on PowerDNS-Admin socket.
访问 PowerDNS 管理 Web 界面
在防火墙上打开 Nginx 以允许外部访问;
ufw allow "Nginx Full"
根据我们上面的配置,您可以通过地址访问 PowerDNS Admin Web 界面 http://server-hostname
. 您应该能够看到 PowerDNS Admin 登录屏幕。 ( 如果没有,请检查 PowerDNS 管理服务的状态或 Nginx 错误日志以获取提示 )。
创建 PowerDNS Admin 管理用户帐户
单击 创建帐户 以创建第一个 PowerDNS Admin 管理员用户。 输入用户详细信息。
单击 注册 以创建一个帐户。
之后,使用您提供的用户详细信息登录。 成功登录后,您应该登陆 PowerDNS 管理界面。
您将看到一条错误消息,要求您完成 API 设置。
为了让 PowerDNS Admin 能够连接到 PowerDNS 并对其进行管理,您需要提供:
- API 密钥 URL,通常,
http://127.0.0.1:8081
默认情况下 - 您在 PowerDNS 配置文件中定义的 API 密钥。
单击 更新 ,错误应该就会消失。
单击 仪表板 以转到 PowerDNS 管理仪表板。
如您所见,我们已经在之前的指南中添加了 DNS 记录。
如果您单击 下的 Hosted Domains 域名 (在上面的屏幕截图中突出显示),您应该是我们已经添加的记录;
那是前向区域记录。
如果您单击 Dashboard > Hosted Domains in-addr 下 的反向区域,您应该会看到反向区域记录。
您现在可以轻松管理您的 DNS 记录。
我们关于如何在 Debian 11/Debian 10 上轻松安装 PowerDNS Admin 的教程到此结束。