如何在 Ubuntu 22.04 上安装 PowerDNS 和 PowerDNS-Admin如何在 Ubuntu 22.04 上安装 PowerDNS 和 PowerDNS-Admin如何在 Ubuntu 22.04 上安装 PowerDNS 和 PowerDNS-Admin如何在 Ubuntu 22.04 上安装 PowerDNS 和 PowerDNS-Admin
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

如何在 Ubuntu 22.04 上安装 PowerDNS 和 PowerDNS-Admin

本教程适用于这些操作系统版本

  • Ubuntu 22.04(Jammy Jellyfish)
  • Ubuntu 20.04(Focal Fossa)

在此页

  1. 先决条件
  2. 安装和配置 MariaDB 服务器
  3. 安装 PowerDNS
  4. 配置 PowerDNS
  5. 安装 PowerDNS 管理
    1. 安装所需的依赖项

    1. 配置数据库连接
    2. 启用 PowerDNS 管理 API

    PowerDNS 是一个用 C++ 编写的免费开源权威名称服务器。它是跨平台的,可以在 Unix、Linux 和 macOS 操作系统上运行。它支持 MySQL、MariaDB、PostgreSQL 和 Oracle 等多种数据库来存储区域文件和记录。

    PowerDNS Admin 是一个基于 Web 的应用程序,可用于通过 Web 浏览器管理 PowerDNS。它允许您使用 PowerDNS Web 界面创建和管理 DNS 区域。它提供了非常有用的功能,包括 IPv4 和 IPv6 支持、批量域、DNSSec 支持、AD、LDAP、SAML 身份验证等。

    在这篇文章中,我们将解释如何在 Ubuntu 22.04 服务器上安装 PowerDNS 和 PowerDNS admin。

    先决条件

    • 一台运行 Ubuntu 22.04 的服务器。
    • 用您的服务器 IP 指向的有效域名。
    • 在服务器上配置了根密码。

    安装和配置 MariaDB 服务器

    首先,您需要在您的系统上安装 MariaDB 数据库服务器。

    apt-get install mariadb-server -y

    安装 MariaDB 后,您需要为 PowerDNS 创建数据库和用户。

    首先,使用以下命令登录 MariaDB:

    mysql

    登录后,使用以下命令创建数据库和用户:

    MariaDB [(none)]> create database pdns;
    MariaDB [(none)]> grant all on pdns.* to identified by 'password';

    接下来,使用以下命令刷新权限并退出 MariaDB shell:

    MariaDB [(none)]> flush privileges;
    MariaDB [(none)]> exit;

    安装 PowerDNS

    在开始之前,您需要从系统中禁用 systemd-resolved 服务。您可以使用以下命令禁用它:

    systemctl disable --now systemd-resolved

    接下来,删除默认的 resolv.conf 文件并创建一个新文件:

    rm -rf /etc/resolv.conf
    echo "nameserver 8.8.8.8" > /etc/resolv.conf

    接下来,使用以下命令安装 PowerDNS 服务器:

    apt-get install pdns-server pdns-backend-mysql -y

    安装 PowerDNS 后,您可以继续下一步。

    配置 PowerDNS

    首先,使用以下命令将 PowerDNS 数据库模式导入 PowerDNS 数据库:

    mysql -u pdnsadmin -p pdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql

    接下来,您需要创建 PowerDNS 配置文件并定义 PowerDNS 数据库连接详细信息:

    nano /etc/powerdns/pdns.d/pdns.local.gmysql.conf

    添加以下行:

    # MySQL Configuration
    #
    # Launch gmysql backend
    launch+=gmysql
    
    # gmysql parameters
    gmysql-host=127.0.0.1
    gmysql-port=3306
    gmysql-dbname=pdns
    gmysql-user=pdnsadmin
    gmysql-password=password
    gmysql-dnssec=yes
    # gmysql-socket=
    

    保存并关闭文件,然后为文件 pdns.local.gmysql.conf 设置适当的权限:

    chmod 640 /etc/powerdns/pdns.d/pdns.local.gmysql.conf
    chown pdns:pdns /etc/powerdns/pdns.d/pdns.local.gmysql.conf

    接下来,停止 PowerDNS 服务器并使用以下命令测试 PowerDNS:

    systemctl stop pdns
    pdns_server --daemon=no --guardian=no --loglevel=9

    如果一切正常,您应该得到以下输出:

    Aug 06 10:43:47 gmysql Connection successful. Connected to database 'pdns' on '127.0.0.1'.
    Aug 06 10:43:47 gmysql Connection successful. Connected to database 'pdns' on '127.0.0.1'.
    Aug 06 10:43:47 gmysql Connection successful. Connected to database 'pdns' on '127.0.0.1'.
    Aug 06 10:43:47 Done launching threads, ready to distribute questions
    

    接下来,使用以下命令启动 PowerDNS 服务器:

    systemctl start pdns

    您现在可以使用以下命令检查 PowerDNS 的状态:

    systemctl status pdns

    您应该看到以下输出:

    ? pdns.service - PowerDNS Authoritative Server
         Loaded: loaded (/lib/systemd/system/pdns.service; enabled; vendor preset: enabled)
         Active: active (running) since Sat 2022-08-06 10:37:28 UTC; 8s ago
           Docs: man:pdns_server(1)
                 man:pdns_control(1)
                 https://doc.powerdns.com
       Main PID: 93982 (pdns_server)
          Tasks: 8 (limit: 2242)
         Memory: 43.1M
            CPU: 166ms
         CGroup: /system.slice/pdns.service
                 ??93982 /usr/sbin/pdns_server --guardian=no --daemon=no --disable-syslog --log-timestamp=no --write-pid=no
    
    Aug 06 10:37:28 ubuntu2204 pdns_server[93982]: UDP server bound to [::]:53
    Aug 06 10:37:28 ubuntu2204 pdns_server[93982]: TCP server bound to 0.0.0.0:53
    Aug 06 10:37:28 ubuntu2204 pdns_server[93982]: TCP server bound to [::]:53
    Aug 06 10:37:28 ubuntu2204 pdns_server[93982]: PowerDNS Authoritative Server 4.5.3 (C) 2001-2021 PowerDNS.COM BV
    Aug 06 10:37:28 ubuntu2204 pdns_server[93982]: Using 64-bits mode. Built using gcc 11.2.0.
    Aug 06 10:37:28 ubuntu2204 pdns_server[93982]: PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redi>
    Aug 06 10:37:28 ubuntu2204 pdns_server[93982]: Creating backend connection for TCP
    Aug 06 10:37:28 ubuntu2204 systemd[1]: Started PowerDNS Authoritative Server.
    Aug 06 10:37:28 ubuntu2204 pdns_server[93982]: About to create 3 backend threads for UDP
    Aug 06 10:37:29 ubuntu2204 pdns_server[93982]: Done launching threads, ready to distribute questions

    此时PowerDNS已经启动并监听53端口,可以通过以下命令查看:

    ss -alnp4 | grep pdns

    您应该得到以下输出:

    udp   UNCONN 0      0             0.0.0.0:53         0.0.0.0:*    users:(("pdns_server",pid=93982,fd=5))
    tcp   LISTEN 0      128           0.0.0.0:53         0.0.0.0:*    users:(("pdns_server",pid=93982,fd=7))

    安装 PowerDNS 管理员

    在本节中,我们将向您展示如何使用 Nginx 安装 PowerDNS admin。

    安装所需的依赖项

    首先,使用以下命令安装 PowerDNS admin 所需的所有依赖项:

    apt-get install nginx python3-dev 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

    安装所有依赖项后,使用以下命令添加 Node.js 存储库:

    curl -sL https://deb.nodesource.com/setup_16.x | bash -

    接下来,使用以下命令安装 Node.js:

    apt-get install nodejs -y

    接下来,使用以下命令添加 yarn 存储库:

    curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
    echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list

    接下来,更新存储库并使用以下命令安装 Yarn:

    apt-get update -y
    apt-get install yarn -y

    此时,所有必需的依赖项都已安装,您现在可以继续下一步。

    下载 PowerDNS 管理员

    接下来,从 Git 存储库下载最新版本的 PowerDNS admin 到 Nginx 根目录:

    git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /var/www/html/pdns

    接下来,将目录更改为下载的目录并使用以下命令创建 Python 虚拟环境:

    cd /var/www/html/pdns/
    virtualenv -p python3 flask

    接下来,激活虚拟环境并使用以下命令安装所有 Python 依赖项:

    source ./flask/bin/activate
    pip install -r requirements.txt

    接下来,使用以下命令停用虚拟环境:

    deactivate

    配置数据库连接

    接下来,您需要将 PowerDNS 数据库连接详细信息定义到 default_config.py 文件:

    nano /var/www/html/pdns/powerdnsadmin/default_config.py

    更改以下行:

    SALT = 'yoursecretekey'
    SECRET_KEY = 'yoursecretekey'
    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
    

    保存并关闭文件,然后将目录更改为 pdns 并激活虚拟环境:

    cd /var/www/html/pdns/
    source ./flask/bin/activate

    接下来,使用以下命令更新数据库:

    export FLASK_APP=powerdnsadmin/__init__.py
    flask db upgrade
    yarn install --pure-lockfile
    flask assets build

    接下来,使用以下命令停用虚拟环境:

    deactivate

    启用 PowerDNS 管理 API

    PowerDNS 管理员使用 JSON API 读取统计信息和修改区域内容、元数据和 DNSSEC 密钥材料。您可以通过编辑文件 pdns.conf 来启用它:

    nano /etc/powerdns/pdns.conf

    更改以下行:

    api=yes
    api-key=yoursecretekey
    

    保存并关闭文件,然后重新启动 PowerDNS 服务以应用更改:

    systemctl restart pdns

    将 Nginx 配置为 PowerDNS Admin 的反向代理

    接下来,您需要将 Nginx 配置为 PowerDNS 管理员的反向代理。为此,请使用以下命令创建 Nginx 虚拟主机配置文件:

    nano /etc/nginx/conf.d/pdns-admin.conf

    添加以下行:

    server {
      listen	*:80;
      server_name               pdnsadmin.example.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 是否有任何语法错误:

    nginx -t

    您应该得到以下输出:

    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    

    接下来,将 pdns 的所有权更改为 www-data:

    chown -R www-data:www-data /var/www/html/pdns

    最后,重启 Nginx 服务以应用更改:

    systemctl restart nginx

    为 PowerDNS Admin 创建系统服务文件

    接下来,您需要创建一个 systemd 服务文件来管理 PowerDNS 服务。

    首先,使用以下命令创建一个 pdns 服务文件:

    nano /etc/systemd/system/pdnsadmin.service

    添加以下行:

    [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
    

    保存并关闭文件,然后使用以下命令创建 pdnsadmin sockt 文件:

    nano /etc/systemd/system/pdnsadmin.socket

    添加以下行:

    [Unit]
    Description=PowerDNS-Admin socket
    
    [Socket]
    ListenStream=/run/pdnsadmin/socket
    
    [Install]
    WantedBy=sockets.target
    

    保存并关闭文件,然后使用以下命令创建所需的文件和目录:

    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/

    接下来,使用以下命令重新加载 systemd 守护进程:

    systemctl daemon-reload

    接下来,使用以下命令启用 pdnsadmin 服务以在系统重启时启动:

    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 2022-08-06 10:52:44 UTC; 9s ago
    TriggeredBy: ? pdnsadmin.socket
       Main PID: 98696 (gunicorn)
          Tasks: 2 (limit: 2242)
         Memory: 63.1M
            CPU: 913ms
         CGroup: /system.slice/pdnsadmin.service
                 ??98696 /var/www/html/pdns/flask/bin/python /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdns>
                 ??98697 /var/www/html/pdns/flask/bin/python /var/www/html/pdns/flask/bin/gunicorn --pid /run/pdnsadmin/pid --bind unix:/run/pdns>
    
    Aug 06 10:52:44 ubuntu2204 systemd[1]: Started PowerDNS-Admin.
    Aug 06 10:52:44 ubuntu2204 gunicorn[98696]: [2022-08-06 10:52:44 +0000] [98696] [INFO] Starting gunicorn 20.0.4
    Aug 06 10:52:44 ubuntu2204 gunicorn[98696]: [2022-08-06 10:52:44 +0000] [98696] [INFO] Listening at: unix:/run/pdnsadmin/socket (98696)
    Aug 06 10:52:44 ubuntu2204 gunicorn[98696]: [2022-08-06 10:52:44 +0000] [98696] [INFO] Using worker: sync
    Aug 06 10:52:44 ubuntu2204 gunicorn[98697]: [2022-08-06 10:52:44 +0000] [98697] [INFO] Booting worker with pid: 98697
    
    ? pdnsadmin.socket - PowerDNS-Admin socket
         Loaded: loaded (/etc/systemd/system/pdnsadmin.socket; enabled; vendor preset: enabled)
         Active: active (running) since Sat 2022-08-06 10:52:44 UTC; 9s ago
       Triggers: ? pdnsadmin.service
         Listen: /run/pdnsadmin/socket (Stream)
         CGroup: /system.slice/pdnsadmin.socket
    
    Aug 06 10:52:44 ubuntu2204 systemd[1]: Listening on PowerDNS-Admin socket.
    
    

    访问 PowerDNS 管理员

    您现在可以打开 Web 浏览器并使用 URL http://pdnsadmin.example.com 访问 PowerDNS 管理 Web 界面。您将被重定向到以下页面:

    单击创建帐户按钮。您应该看到以下屏幕:

    提供您的管理员用户详细信息,然后单击“注册”按钮创建一个帐户。您应该会在以下屏幕上看到 PowerDNS 管理 Web 界面:

    提供 PowerDNS API URL 以连接到 PowerDNS 并对其进行管理。然后,单击“更新”按钮以保存更改。您应该会看到以下页面:

    单击仪表板按钮。您应该会在以下屏幕上看到 PowerDNS 管理仪表板:

    结论

    恭喜!您已经在 Ubuntu 22.04 服务器上使用 Nginx 成功安装并配置了 PowerDNS 和 PowerDNS admin。您现在可以通过 PowerDNS 管理 Web 界面创建区域和添加记录,然后对其进行测试。如果您有任何问题,请随时问我

©2015-2025 艾丽卡 support@alaica.com