在Ubuntu 20.04上轻松安装和设置PowerDNS Admin
在本教程中,您将学习如何在Ubuntu 20.04上轻松安装和设置PowerDNS Admin。 PowerDNS管理员 是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
在Ubuntu 20.04上轻松安装和设置PowerDNS Admin
目录
- 在Ubuntu 20.04上轻松安装和设置PowerDNS Admin
- 在Ubuntu 20.04上安装和设置PowerDNS
- 安装必需的软件包依赖项
- 将PowerDNS Admin源代码克隆到Web根目录
- 创建PowerDNS Admin Virtualenv
- 配置PowerDNS Admin数据库连接
- 运行PowerDNS Admin
- 启用PowerDNS API访问
- 创建PowerDNS Admin Nginx网站
- 创建PowerDNS Admin Systemd服务单元
- 访问PowerDNS Admin Web界面
- 创建PowerDNS Admin管理用户帐户
- 参考
- 其他相关教程
在Ubuntu 20.04上安装和设置PowerDNS
为了在Ubuntu 20.04上轻松地安装和设置PowerDNS Admin,您需要已经使用一些关系数据库来安装和设置PowerDNS名称服务器。
在之前的指南中,我们讨论了如何在Ubuntu 20.04上使用MariaDB配置PowerDNS名称服务器。请点击以下链接进行设置。
在Ubuntu 20.04上轻松安装和设置PowerDNS
注意:我们将PowerDNS Admin安装在已安装PowerDNS的同一服务器上。
安装必需的软件包依赖项
安装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
安装NodeJS
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - sudo apt install -y nodejs
安装纱
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
apt update apt install yarn
安装Nginx HTTP服务器
apt install nginx
将PowerDNS Admin源代码克隆到Web根目录
将PowerDNS Admin git源代码克隆到您的Nginx Web根目录中。在此设置中,我们使用 /var/www/html/pdns
,作为我们的PowerDNS Admin网络根目录。您的情况可能会有所不同。
git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /var/www/html/pdns
创建PowerDNS Admin 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 Admin数据库连接
退出virtualenv并编辑默认的PowerDNS管理员配置文件$ WEB_ROOT / powerdnsadmin / default_config.py,以定义数据库连接详细信息。将$ WEB_ROOT替换为Web根目录的路径。
deactivate
vim /var/www/html/pdns/powerdnsadmin/default_config.py
在基本的应用程序配置上,您可以替换SALT和SECRET_KEY密钥,设置绑定地址和端口;
### BASIC APP CONFIG
SALT = 'xohDoozee8Zuneekooch9ohrieghei'
SECRET_KEY = 'hohru1aethaeyahpheH7Gaathaikah'
BIND_ADDRESS = '192.168.57.3'
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
运行PowerDNS Admin
PowerDNS Admin现在已设置并准备就绪。可以通过执行以下命令以独立模式运行 run.py
在Web根目录中。
在此设置中,我们将使用Nginx Web服务器访问PowerDNS Admin。
启用PowerDNS API访问
“ PowerDNS授权服务器具有内置的Web服务器,该服务器公开了JSON / REST API。 该API允许控制多个功能,读取统计信息并修改区域内容,元数据和DNSSEC密钥材料”。
打开PowerDNS配置文件,启用API并设置API密钥;
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 Admin 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默认站点并运行config语法检查。
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
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 Sat 2020-10-10 17:18:50 UTC; 2s ago
TriggeredBy: ● pdnsadmin.socket
Main PID: 5646 (gunicorn)
Tasks: 2 (limit: 2282)
Memory: 61.5M
CGroup: /system.slice/pdnsadmin.service
├─5646 /var/www/html/pdns/flask/bin/python /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsadmin/socket powerdnsadmin:crea>
└─5663 /var/www/html/pdns/flask/bin/python /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdnsadmin/socket powerdnsadmin:crea>
Oct 10 17:18:50 ubuntu20 systemd[1]: Started PowerDNS-Admin.
Oct 10 17:18:51 ubuntu20 gunicorn[5646]: [2020-10-10 17:18:51 +0000] [5646] [INFO] Starting gunicorn 20.0.4
Oct 10 17:18:51 ubuntu20 gunicorn[5646]: [2020-10-10 17:18:51 +0000] [5646] [INFO] Listening at: unix:/run/pdnsadmin/socket (5646)
Oct 10 17:18:51 ubuntu20 gunicorn[5646]: [2020-10-10 17:18:51 +0000] [5646] [INFO] Using worker: sync
Oct 10 17:18:51 ubuntu20 gunicorn[5663]: [2020-10-10 17:18:51 +0000] [5663] [INFO] Booting worker with pid: 5663
● pdnsadmin.socket - PowerDNS-Admin socket
Loaded: loaded (/etc/systemd/system/pdnsadmin.socket; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-10-10 17:18:50 UTC; 2s ago
Triggers: ● pdnsadmin.service
Listen: /run/pdnsadmin/socket (Stream)
CGroup: /system.slice/pdnsadmin.socket
Oct 10 17:18:50 ubuntu20 systemd[1]: Listening on PowerDNS-Admin socket.
访问PowerDNS Admin Web界面
在防火墙上打开Nginx以允许外部访问;
ufw allow "Nginx Full"
根据上述配置,您可以通过以下地址访问PowerDNS Admin Web界面 http://server-hostname
。您应该能够看到PowerDNS Admin登录屏幕。 (如果不是,请检查PowerDNS管理员服务或Nginx错误日志的状态以获取提示)。
创建PowerDNS Admin管理用户帐户
请点击 创建一个帐户 创建第一个PowerDNS Admin管理员用户。输入用户详细信息。
请点击 寄存器 创建一个帐户。
之后,使用您提供的用户详细信息登录。成功登录后,您应该进入PowerDNS Admin界面。
为了使PowerDNS Admin能够连接到PowerDNS并对其进行管理,您需要提供API密钥URL(通常默认情况下为http://127.0.0.1:8081)以及在PowerDNS配置文件中定义的API密钥。
请点击 更新资料 错误应该消失了。
点击 仪表板 转到PowerDNS Admin仪表板。
如您所见,我们已经在上一指南中添加了DNS记录。如果您单击下面的域名 托管域名,您应该添加我们已经添加的记录;
那就是前区记录。
如果单击“仪表板”>“托管域中的in-addr”下的反向区域,则应看到反向区域记录。
这标志着我们的教程的结尾,该教程介绍了如何在Ubuntu 20.04上轻松安装PowerDNS Admin。在我们的下一个指南中,我们将讨论如何使用PowerDNS Admin管理DNS记录。请享用。
参考
在Ubuntu或Debian上运行PowerDNS Admin
。