在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错误日志的状态以获取提示)。

在Ubuntu 20.04上轻松安装和设置PowerDNS Admin创建PowerDNS Admin管理用户帐户

请点击 创建一个帐户 创建第一个PowerDNS Admin管理员用户。输入用户详细信息。

PowerDNS Admin创建用户帐户

请点击 寄存器 创建一个帐户。

之后,使用您提供的用户详细信息登录。成功登录后,您应该进入PowerDNS Admin界面。

在Ubuntu 20.04上轻松安装和设置PowerDNS Admin

为了使PowerDNS Admin能够连接到PowerDNS并对其进行管理,您需要提供API密钥URL(通常默认情况下为http://127.0.0.1:8081)以及在PowerDNS配置文件中定义的API密钥。

在Ubuntu 20.04上轻松安装和设置PowerDNS Admin

请点击 更新资料 错误应该消失了。

点击 仪表板 转到PowerDNS Admin仪表板。

PowerDNS管理控制台

如您所见,我们已经在上一指南中添加了DNS记录。如果您单击下面的域名 托管域名,您应该添加我们已经添加的记录;

在Ubuntu 20.04上轻松安装和设置PowerDNS Admin

那就是前区记录。

如果单击“仪表板”>“托管域中的in-addr”下的反向区域,则应看到反向区域记录。

在Ubuntu 20.04上轻松安装和设置PowerDNS Admin

这标志着我们的教程的结尾,该教程介绍了如何在Ubuntu 20.04上轻松安装PowerDNS Admin。在我们的下一个指南中,我们将讨论如何使用PowerDNS Admin管理DNS记录。请享用。

参考

在Ubuntu或Debian上运行PowerDNS Admin

Sidebar