更新升级 专属应用 系统故障 硬件故障 电脑汽车 鸿蒙刷机 鸿蒙开发Linux教程 鸿蒙开发Linux命令
当前位置:HMXT之家 > 鸿蒙开发Linux教程 > 在Debian 11/10上安装PowerDNS和PowerDNS Admin

在Debian 11/10上安装PowerDNS和PowerDNS Admin

更新时间:2023-02-06 16:12:48浏览次数:727+次

本文介绍如何在Debian 11/10系统上安装配置PowerDNS和PowerDNS Admin的方法。PowerDNS是用C++语言编写的DNS服务器,提供权威服务器和递归DNS产品。PowerDNS Admin是一个web管理界面,允许您使用PowerDNS创建和管理DNS区域。在安装之前请先运行sudo apt update && sudo apt upgrade命令更新系统,并运行sudo apt install curl vim git -y命令安装所需的工具。

安装PowerDNS和PowerDNS Admin的方法

步骤1、安装PowerDNS关系数据库

PowerDNS支持无数数据库后端,如MySQL、PostgreSQL、Oracle。这里,我们将使用MariaDB作为PowerDNS区域文件的后端存储。使用以下步骤在Debian 11/Debian 10上安装MariaDB。

首先,安装所需的工具:

sudo apt install software-properties-common gnupg2 -y

然后继续,在系统上安装MariaDB 10.6存储库:

curl -LsS -O https://downloads.mariadb.com/MariaDB/mariadb_repo_setup

sudo bash mariadb_repo_setup

更新包索引并安装MariaDB:

sudo apt update

sudo apt install mariadb-server mariadb-client

安装完成后,启动并启用MariaDB:

sudo systemctl start mariadb

sudo systemctl enable mariadb

使用root用户登录shell:

sudo mysql -u root

现在创建一个PowerDNS数据库:

CREATE DATABASE powerdns;

GRANT ALL ON powerdns.* TO 'powerdns_user'@'%' IDENTIFIED BY 'Strongpassword';

FLUSH PRIVILEGES;

EXIT

请记住,为用户设置的密码不应包含特殊字符,因为PowerDNS不喜欢这样,并且会导致错误“Access denied for user ‘powerdns_user’@’localhost’ (using password: YES)”。

步骤2、在Debian 11/Debian 10上安装PowerDNS

我们将首先禁用systemd解析服务。该服务在端口53上运行,提供用于加载应用程序的网络名称解析,但现在我们希望使用PowerDNS。

停止并禁用使用以下命令解析的systemd:

sudo systemctl stop systemd-resolved

sudo systemctl disable systemd-resolved

继续并删除文件的符号链接:

$ ls -lh /etc/resolv.conf 

-rw-r--r-- 1 root root 49 Feb 06 04:53 /etc/resolv.conf

$ sudo unlink /etc/resolv.conf

更新resolv.conf文件:

echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

完成以上调整后,您可以使用以下命令从默认APT存储库安装PowerDNS:

sudo apt install pdns-server pdns-backend-mysql

在官方PowerDNS发布页面上安装最新版本的PowerDNS,地址在https://doc.powerdns.com/authoritative/changelog/。也可以安装需要的版本,比如可安装4.6版本,此版本的存储库可以添加到系统中,如下所示:

sudo vim /etc/apt/sources.list.d/pdns.list

对于Debian 11:

deb [arch=amd64] http://repo.powerdns.com/debian bullseye-auth-46 main

对于Debian 10:

deb [arch=amd64] http://repo.powerdns.com/debian buster-auth-46 main

导入存储库的GPG密钥签名:

curl -fsSL https://repo.powerdns.com/FD380FBB-pub.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/pdns.gpg

设置APT首选项:

$ sudo vim /etc/apt/preferences.d/pdns

Package: pdns-*

Pin: origin repo.powerdns.com

Pin-Priority: 600

更新APT包索引:

sudo apt update

现在安装PowerDNS服务器和MySQL后端,如下所示:

sudo apt install pdns-server pdns-backend-mysql

步骤3、配置PowerDNS数据库

现在我们已经在MariaDB上创建了PowerDNS数据库,我们将继续并将数据库模式导入其中。这通常保存在/usr/share/pdns-backend-mysql/schema/下,作为schema.mysql.sql文件。

现在,在步骤1中将此模式导入到创建的数据库(powerdns)中:

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

然后,您可以验证模式导入,如下所示:

sudo mysql -u root

use powerdns;

show tables;

导入模式后,我们现在将配置数据库的PowerDNS连接详细信息。

这可以通过创建下面的文件来完成:

sudo vim /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=powerdns

gmysql-user=powerdns_user

gmysql-password=Strongpassword

gmysql-dnssec=yes

# gmysql-socket=

为文件设置适当的权限:

sudo chown pdns: /etc/powerdns/pdns.d/pdns.local.gmysql.conf

sudo chmod 640 /etc/powerdns/pdns.d/pdns.local.gmysql.conf

现在可以验证数据库连接:

sudo systemctl stop pdns.service

sudo pdns_server --daemon=no --guardian=no --loglevel=9

可以通过输出信息,查看数据库是否连接成功。如在成功后,请重新启动并启用PowerDNS服务:

sudo systemctl restart pdns

sudo systemctl enable pdns

验证端口53是否为DNS打开,可用sudo ss -alnp4 | grep pdns命令,会看到udp   UNCONN 0      0            0.0.0.0:53         0.0.0.0:*    users:(("pdns_server",pid=18530,fd=5))之类的返回信息。

您还可以检查PowerDNS是否响应请求:

$ dig @127.0.0.1

; <<>> DiG 9.16.22-Debian <<>> @127.0.0.1

; (1 server found)

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: REFUSED, id: 4882

;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp: 1232

;; QUESTION SECTION:

;. IN NS

;; Query time: 4 msec

;; SERVER: 127.0.0.1#53(127.0.0.1)

;; MSG SIZE  rcvd: 28

步骤4、在Debian 11/Debian 10上安装PowerDNS Admin

使用这个基于Web的管理工具,我们可以轻松地管理PowerDNS服务器。要安装PowerDNS admin,首先安装Python开发包:

sudo apt install python3-dev

安装所需的生成工具:

sudo apt install libsasl2-dev libldap2-dev libssl-dev libxml2-dev libxslt1-dev libxmlsec1-dev libffi-dev pkg-config apt-transport-https virtualenv python3-venv build-essential libmariadb-dev git python3-flask -y

在Debian上安装Node.js。首先,添加存储库:

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

然后使用命令安装Nodejs:

sudo apt install -y nodejs

你还需要yarn。添加其存储库和GPG密钥,如下所示:

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

使用以下命令安装Yarn:

sudo apt update

sudo apt install yarn -y

现在克隆PowerDNS管理源代码:

sudo su -

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

创建虚拟环境:

cd /var/www/html/pdns/

virtualenv -p python3 flask

激活环境并安装requirements.txt中指定的库:

source ./flask/bin/activate

pip install --upgrade pip

pip install -r requirements.txt

现在配置到数据库的PowerDNS管理连接。首先,停用虚拟环境:

deactivate

编辑下面的文件:

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

在文件中,编辑以下行:

### DATABASE CONFIG

SQLA_DB_USER = 'powerdns_user'

SQLA_DB_PASSWORD = 'Strongpassword'

SQLA_DB_HOST = '127.0.0.1'

SQLA_DB_NAME = 'powerdns'

SQLALCHEMY_TRACK_MODIFICATIONS = True

现在创建一个数据库模式:

cd /var/www/html/pdns/

source ./flask/bin/activate

export FLASK_APP=powerdnsadmin/__init__.py

flask db upgrade

如果您发现错误“ImportError: cannot import name ‘json’ from ‘itsdangerous’”,请按以下步骤操作:

pip uninstall itsdangerous

pip install  itsdangerous==2.0.1

flask db upgrade

样本输出:

Add view column to setting table

INFO  [alembic.runtime.migration] Running upgrade 59729e468045 -> 1274ed462010, Change setting.value data type

INFO  [alembic.runtime.migration] Running upgrade 1274ed462010 -> 4a666113c7bb, Adding Operator Role

INFO  [alembic.runtime.migration] Running upgrade 4a666113c7bb -> 31a4ed468b18, Remove all setting in the DB

INFO  [alembic.runtime.migration] Running upgrade 31a4ed468b18 -> 654298797277, Upgrade DB Schema

INFO  [alembic.runtime.migration] Running upgrade 654298797277 -> 0fb6d23a4863, Remove user avatar

INFO  [alembic.runtime.migration] Running upgrade 0fb6d23a4863 -> 856bb94b7040, Add comment column in domain template record table

INFO  [alembic.runtime.migration] Running upgrade 856bb94b7040 -> b0fea72a3f20, Update domain serial columns type

INFO  [alembic.runtime.migration] Running upgrade b0fea72a3f20 -> 3f76448bb6de, Add user.confirmed column

INFO  [alembic.runtime.migration] Running upgrade 3f76448bb6de -> 0d3d93f1c2e0, Add domain_id to history table

INFO  [alembic.runtime.migration] Running upgrade 0d3d93f1c2e0 -> 0967658d9c0d, add apikey account mapping table

成功后,使用Yarn生成asset文件:

yarn install --pure-lockfile

flask assets build

停用虚拟环境:

deactivate

1]、启用PowerDNS API访问

随着REST API的公开,人们可以控制多个活动、读取统计信息、修改区域内容等。通过编辑下面的配置文件来启用它:

sudo 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=3ce1af6c-981d-4190-a559-1e691d89b90e #You can generate one from https://codepen.io/corenominal/pen/rxOmMJ

保存文件并重新启动PowerDNS:

sudo systemctl restart pdns

2]、创建PowerDNS虚拟主机文件

首先,安装Nginx web服务器:

sudo apt install nginx

创建虚拟主机文件:

vim /etc/nginx/conf.d/powerdns-admin.conf

添加以下内容:

server {

  listen *:80;

  server_name               pdnsadmin.computingforgeeks.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

设置文件的正确所有权:

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

重新启动Nginx以应用更改:

systemctl restart nginx

3]、为PowerDNS Admin创建系统服务文件

为了能够像其他系统服务一样管理PowerDNS Admin,我们需要为其创建一个服务文件。

按如下所示创建文件:

vim /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

此外,创建套接字文件:

sudo vim /etc/systemd/system/pdnsadmin.socket

添加lines:

[Unit]

Description=PowerDNS-Admin socket

[Socket]

ListenStream=/run/pdnsadmin/socket

[Install]

WantedBy=sockets.target

创建环境文件:

mkdir /run/pdnsadmin/

echo "d /run/pdnsadmin 0755 pdns pdns -" >> /etc/tmpfiles.d/pdnsadmin.conf

设置所需的权限:

chown -R pdns: /run/pdnsadmin/

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

重新加载系统守护程序:

systemctl daemon-reload

启动并启用PowerDNS Admin服务:

systemctl enable --now pdnsadmin.service pdnsadmin.socket

检查服务状态:

systemctl status pdnsadmin.service pdnsadmin.socket

步骤5、访问PowerDNS管理Web UI

此时,应该可以使用URL访问PowerDNS web UI,地址格式为http://domain_name或者http://IP_address:

\

首先创建管理员用户帐户:

\

提供所需的详细信息后,单击注册以创建帐户。现在使用创建的用户凭据登录到PowerDNS Admin界面。

现在,为了能够管理PowerDNS服务器,请提供API密钥URL地址http://127.0.0.1:8081以及PowerDNS配置文件(/etc/powerdns/pdns.conf)中定义的API密钥:

\

单击更新以使错误消失。然后就可以管理PowerDNS了,即进入到控制中心里面就可以进行相应的配置了:

\

比如在+新建域选项卡下创建新域,也可以使用PowerDNS管理web UI对服务器进行许多其他配置,例如编辑域模板、删除域、管理用户帐户等。您还可以查看执行的活动的历史记录:

\

至此,您已经在Debian 11/Debian 10系统上成功安装并配置了PowerDNS和PowerDNS Admin。