PowerDNS — это бесплатное программное обеспечение с открытым исходным кодом для DNS-серверов. Его можно использовать в качестве авторитетного сервера имен и рекурсивного DNS-сервера. PowerDNS написан на языке C++ и поддерживает множество операционных систем, включая BSD, Linux и macOS.
PowerDNS — это высокопроизводительный DNS-сервер высокого уровня, поддерживающий различные типы бэкэндов, такие как BIND, а также бэкэнды RDBMS, например базы данных MySQL/MariaDB, PostgreSQL и Oracle.
Сервер PowerDNS отличается высокой производительностью, способен обрабатывать десятки тысяч одновременных запросов, поддерживает DNSSEC и обеспечивает широкие возможности для написания скриптов на языке Lua.
В этом руководстве мы покажем вам, как установить PowerDNS и PowerDNS-Admin в системе Rocky Linux. Мы запустим PowerDNS с бэкэндом базы данных MySQL/MariaDB и настроим PowerDNS-Admin, который будет использоваться в качестве веб-инструмента управления сервером PowerDNS.
В этом руководстве также показана установка пакетов Python для проектов на основе Flask и настройка Nginx и Gunicorn, которые будут использоваться в качестве обратного прокси для веб-приложения PowerDNS-Admin.
Необходимые условия
Для начала работы с этим руководством вам потребуется следующее:
- Сервер Rocky Linux — вы можете использовать Rocky Linux v8 или v9.
- Пользователь без прав root, обладающий правами администратора sudo/root.
Установка и настройка сервера базы данных MariaDB
PowerDNS — это масштабируемое программное обеспечение для DNS-серверов, поддерживающее несколько бэкендов, таких как PostgreSQL, MariaDB/MySQL и SQLite. Для крупных развертываний следует рассмотреть возможность использования PostgreSQL или MySQL/MariaDB в качестве бэкенда базы данных.
Теперь вы начнете с установки и настройки базы данных MariaDB на сервере Rocky Linux. Вы настроите PowerDNS с MariaDB в качестве бэкэнда базы данных.
Репозиторий Rocky Linux по умолчанию предоставляет несколько версий пакетов сервера MariaDB. Запустите приведенную ниже команду dnf, чтобы установить сервер базы данных MariaDB.
sudo dnf install mariadb-server
Когда появится запрос на подтверждение, введите y для подтверждения и нажмите ENTER, чтобы продолжить.

После установки сервера MariaDB выполните приведенную ниже команду systemctl, чтобы запустить и включить службу MariaDB.
sudo systemctl start mariadb sudo systemctl enable mariadb
Теперь сервер MariaDB должен работать и быть включен. Выполните приведенную ниже команду, чтобы проверить службу MariaDB и убедиться, что она работает.
sudo systemctl status mariadb
Вы увидите следующий вывод: служба MariaDB работает и включена, что означает, что она будет запускаться автоматически при загрузке системы.

Теперь, когда сервер MariaDB запущен, вам необходимо настроить и защитить установку MariaDB с помощью инструмента командной строки «mysql_secure_installation».
Выполните следующую команду, чтобы начать защиту развертывания сервера MariaDB.
sudo mysql_secure_installation
Затем вам будет предложено ввести некоторые настройки сервера MariaDB.
- Настроить пароль root для MariaDB? Введите y для подтверждения и введите новый пароль для вашего сервера MariaDB, затем повторите пароль.
- Отключить удаленный вход для пользователя root MariaDB? Введите y для подтверждения и отключения.
- Удалить анонимного пользователя по умолчанию из MariaDB? Введите y для подтверждения.
- Удалить базу данных test по умолчанию из MariaDB? Введите y еще раз для подтверждения.
- Наконец, перезагрузить привилегии таблиц, чтобы применить новые изменения? Введите y для подтверждения, и MariaDB перезагрузит все привилегии и применит новые настройки.
Теперь, когда вы обеспечили безопасность развертывания MariaDB, вам нужно настроить новую базу данных MariaDB и пользователя для PowerDNS.
Для начала выполните приведенную ниже команду mysql, чтобы войти в оболочку MariaDB от имени пользователя root.
sudo mysql -u root -p
Когда будет запрошен пароль, введите пароль пользователя root MariaDB.
Затем выполните следующие запросы, чтобы создать новую базу данных MariaDB и пользователя. В этом примере вы создадите новую базу данных pdns с пользователем pdnsadmin и паролем ‘password‘.
CREATE DATABASE pdns; GRANT ALL ON pdns.* TO pdnsadmin@localhost IDENTIFIED BY 'password'; FLUSH PRIVILEGES;

Теперь выполните следующие запросы, чтобы проверить привилегии пользователя MariaDB pdnsadmin@localhost. Это покажет вам список привилегий пользователя MariaDB pdnsadmin@localhost.
SHOW GRANTS FOR pdnsadmin@localhost;
Вы увидите следующий вывод: пользователь MariaDB pdnsadmin@localhost имеет привилегии к базе данных PowerDNS pdns.

Теперь введите ‘quit‘, чтобы выйти из оболочки MariaDB.
После запуска сервера MariaDB вам необходимо установить и настроить сервер PowerDNS с использованием бэкэнда базы данных MariaDB.
Установка и настройка PowerDNS
После установки сервера базы данных MariaDB вам предстоит установить сервер PowerDNS и настроить PowerDNS с использованием бэкэнда базы данных MariaDB.
Для операционных систем на базе RHEL PowerDNS доступен в репозитории EPEL. Поэтому перед установкой PowerDNS необходимо добавить репозиторий EPEL в вашу систему.
Выполните следующую команду dnf, чтобы установить репозиторий EPEL.
sudo dnf install epel-release -y
После добавления репозитория EPEL выполните следующую команду dnf, чтобы установить PowerDNS и бэкэнд PowerDNS MySQL.
sudo dnf install pdns pdns-backend-mysql
Когда появится запрос на подтверждение, введите y для подтверждения и нажмите ENTER, чтобы продолжить.

После завершения установки PowerDNS выполните следующую команду mysql, чтобы импортировать схему базы данных для PowerDNS. Следующая команда импортирует схему базы данных через пользователя MariaDB pdnsadmin в базу данных pdns.
sudo mysql -u pdnsadmin -p pdns
Input the password for the pdnsadmin user and press ENTER to confirm and proceed.

Next, edit the PowerDNS configuration ‘/etc/pdns/pdns.conf’ using the following nano editor command.
sudo nano /etc/pdns/pdns.conf
Снимите комментарий с конфигурации бэкэнда MariaDB и измените данные: имя базы данных, имя пользователя и пароль. Убедитесь, что вы используете правильные данные базы данных MariaDB, которую вы создали.
################################# # launch Which backends to launch and order to query them in # launch=gmysql
gmysql-host=localhost
gmysql-user=pdnsadmin
gmysql-password=password
gmysql-dbname=pdns
Далее, снимите комментарий с ‘api’ и измените значение на ‘yes». Затем раскомментируйте опцию ‘api-key‘ и измените ключ по умолчанию. Следующий API PowerDNS будет использоваться для управления сервером PowerDNS через веб-приложение PowerDNS-Admin.
################################# # api Enable/disable the REST API (including HTTP listener) # api=yes
#################################
# api-key Static pre-shared authentication key for access to the REST API
#
api-key=CHANGEME
Сохраните файл и закройте редактор, когда закончите.
После настройки сервера PowerDNS выполните следующую команду, чтобы проверить конфигурацию PowerDNS.
pdns_server --daemon=no --guardian=no --loglevel=9
Вы увидите вывод, подобный следующему — подключение PowerDNS к бэкэнду базы данных MariaDB прошло успешно, теперь вы можете нажать «Ctrl+c», чтобы завершить процесс.

Теперь выполните следующую команду systemctl, чтобы запустить и включить службу PowerDNS.
sudo systemctl start pdns sudo systemctl enable pdns
Наконец, проверьте службу PowerDNS, чтобы убедиться, что PowerDNS работает и включена.
sudo systemctl status pdns
В приведенном ниже выводе вы увидите, что служба PowerDNS работает и включена, что означает, что она будет запускаться автоматически при загрузке системы.

На этом этапе вы завершили установку сервера PowerDNS. Далее вы приступите к установке PowerDNS-Admin, который будет использоваться в качестве веб-интерфейса для управления сервером PowerDNS.
Установка PowerDNS-Admin
После запуска PowerDNS вы установите и настроите PowerDNS-Admin на сервере Rocky Linux. PowerDNS-Admin — это веб-приложение на базе Python Flask, поэтому его установка практически не отличается от установки веб-фреймворка Flask.
Ниже приведены шаги, которые необходимо выполнить для установки PowerDNS-Admin на Rocky Linux
- Установка зависимостей пакетов
- Настройка виртуальной среды Python
- Установка зависимостей Python
- Настройка PowerDNS-Admin с базой данных MariaDB
- Генерация схемы базы данных и сборка статических файлов
Теперь приступим к установке PowerDNS-Admin
Установка зависимостей пакетов
Первым шагом при установке PowerDNS-Admin является установка зависимостей пакетов, таких как Python3, Pip, Node.js и Yarn.
Прежде чем начать, выполните приведенную ниже команду dnf, чтобы включить репозиторий ‘powertools‘ в вашей системе Rocky Linux.
sudo dnf config-manager --set-enabled powertools
После включения репозитория ‘powertools’ установите пакеты Python с помощью приведенной ниже команды dnf.
sudo dnf install python3 python3-devel python3-pip python3-xmlsec gcc git mariadb-devel openldap-devel xmlsec1-devel xmlsec1-openssl libtool-ltdl-devel
Когда появится запрос на подтверждение, введите y и нажмите ENTER, чтобы продолжить.

Далее добавьте репозитории Node.js и Yarn в вашу систему с помощью приведенной ниже команды. Пакеты Node.js и Yarn будут использоваться для генерации статических файлов для веб-приложения PowerAdmin. В этом примере используется Node.js v16.
curl -sL https://rpm.nodesource.com/setup_16.x | bash - curl -sL https://dl.yarnpkg.com/rpm/yarn.repo -o /etc/yum.repos.d/yarn.repo

После добавления репозиториев запустите приведенную ниже команду dnf, чтобы установить Node.js и менеджер пакетов Yarn.
sudo dnf install nodejs yarn
Введите y и нажмите ENTER при появлении запроса на установку.

Кроме того, при запросе на подтверждение ключа GPG введите y и нажмите ENTER.

Далее выполните приведенную ниже команду pip3, чтобы обновить пакет Python pip и установить virtualenv в вашу систему.
pip3 install -U pip pip3 install -U virtualenv
Python pip и virtualenv теперь будут установлены в каталог ‘/usr/local/bin‘. Добавьте каталог ‘/usr/local/bin‘ к системной $PATH переменной среды с помощью приведенной ниже команды.
echo "export PATH="/usr/local/bin:$PATH"" >> ~/.bashrc
Теперь примените новые изменения в файле ‘~/.bashrc’ с помощью приведенной ниже команды. Теперь вам следует запустить команды ‘pip‘ и ‘virtualenv‘.
source ~/.bashrc
Настройка виртуальной среды Python
После установки зависимостей пакетов вам необходимо загрузить исходный код PowerDNS-Admin и настроить виртуальную среду Python для PowerDNS-Admin.
Склонируйте исходный код PowerDNS-Admin в каталог ‘/opt/powerdns-admin’ с помощью следующей команды git.
git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/powerdns-admin
После загрузки исходного кода перейдите в рабочий каталог ‘/opt/powerdns-admin‘ и создайте новую виртуальную среду Python ‘flask‘.
cd /opt/powerdns-admin virtualenv -p python3 flask
Теперь активируйте виртуальную среду Python ‘flask‘ с помощью приведенной ниже команды.
source flask/bin/activate
После активации вы должны увидеть, что командная строка стала выглядеть следующим образом: ‘(flask) [user@hostname /directory/path]#‘.

С этого момента ваша рабочая среда всегда должна находиться в виртуальной среде Python ‘flask‘.
Установка зависимостей Python
После настройки виртуальной среды Python и ее запуска вы установите зависимости Python с помощью команды pip.
Запустите следующую команду pip, чтобы установить зависимости Python для PowerDNS-Admin.
pip install python-dotenv pip install -r requirements.txt
Теперь начнется установка — будут установлены зависимости Python, необходимые для PowerDNS-Admin, которые хранятся в файле ‘requirements.txt‘.

Теперь, когда зависимости Python установлены, вы готовы к установке и настройке PowerDNS-Admin с базой данных MariaDB.
Настройка PowerDNS-Admin с базой данных MariaDB
После установки зависимостей Python вы можете настроить PowerDNS-Admin с базой данных MariaDB. Параметры базы данных для PowerDNS-Admin будут такими же, как и для сервера PowerDNS.
Теперь отредактируйте файл ‘/opt/powerdns-admin/powerdnsadmin/default_config.py‘ с помощью следующей команды редактора nano.
nano /opt/powerdns-admin/powerdnsadmin/default_config.py
Измените конфигурацию, как показано ниже.
SALT = 'RANDOM-GENERATED' SECRET_KEY = 'RANDOM-GENERATED' 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
Сохраните файл и закройте редактор, когда закончите.
Генерация схемы базы данных и создание статических файлов
После настройки базы данных MariaDB в PowerDNS-Admin вам необходимо перенести базу данных и сгенерировать статические файлы для PowerDNS-Admin.
Сначала выполните следующую команду для миграции базы данных PowerDNS-Admin. Это вставит в базу данных новую схему, которая будет использоваться для PowerDNS-Admin.
export FLASK_APP=powerdnsadmin/__init__.py flask db upgrade
Ниже приведен вывод, который вы получите по завершении миграции базы данных.

После завершения миграции базы данных выполните следующую команду для генерации статических файлов для PowerDNS-Admin.
yarn install --pure-lockfile flask assets build
Ниже вы можете увидеть установку некоторых зависимостей JavaScript через пакетный менеджер yarn и процесс генерации статических файлов для PowerDNS-Admin.

После генерации статических файлов выполните следующую команду, чтобы деактивировать виртуальную среду Python.
deactivate
На этом этапе вы завершили базовую установку PowerDNS-Admin с сервером базы данных MariaDB. Теперь вы можете запустить приложение PowerDNS-Admin через командную строку, а также запустить PowerDNS-Admin в качестве службы systemd.
Настройка службы systemd для PowerDNS-Admin
На этом этапе вы настроите новый файл службы systemd для приложения PowerDNS-Admin. Это позволит вам легко управлять и обслуживать PowerDNS-Admin с помощью команды systemd. Кроме того, это упростит настройку PowerDNS-Admin.
Для начала создайте новый файл службы systemd ‘/etc/systemd/system/powerdns-admin.service’ с помощью следующей команды редактора nano.
sudo nano /etc/systemd/system/powerdns-admin.service
Добавьте в файл приведенную ниже конфигурацию. С этой конфигурацией вы запустите приложение PowerDNS-Admin через gunicorn и запустите его от имени пользователя и группы ‘pdns‘. Кроме того, PowerDNS-Admin будет запущен с файлом сокета UNIX ‘/run/powerdns-admin/socket’.
[Unit] Description=PowerDNS-Admin Requires=powerdns-admin.socket After=network.target
[Service]
PIDFile=/run/powerdns-admin/pid
User=pdns
Group=pdns
WorkingDirectory=/opt/powerdns-admin
ExecStartPre=+mkdir -p /run/powerdns-admin/
ExecStartPre=+chown pdns:pdns -R /run/powerdns-admin/
ExecStart=/usr/local/bin/gunicorn —pid /run/powerdns-admin/pid —bind unix:/run/powerdns-admin/socket ‘powerdnsadmin:create_app()’
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Сохраните файл и закройте редактор, когда закончите.
Далее создайте новый файл сокета systemd для PowerDNS-Admin ‘/etc/systemd/system/powerdns-admin.socket’ с помощью редактора nano, как показано ниже.
sudo nano /etc/systemd/system/powerdns-admin.socket
Добавьте в файл следующую конфигурацию.
[Unit] Description=PowerDNS-Admin socket
[Socket]
ListenStream=/run/powerdns-admin/socket
[Install]
WantedBy=sockets.target
Сохраните файл и закройте редактор, когда закончите.
Теперь создайте новый файл конфигурации ‘/etc/tmpfiles.d/powerdns-admin.conf’ с помощью приведенной ниже команды редактора nano.
sudo nano /etc/tmpfiles.d/powerdns-admin.conf
Добавьте в файл следующую конфигурацию.
d /run/powerdns-admin 0755 pdns pdns -
Сохраните файл и закройте редактор, когда закончите.
После добавления нового файла службы systemd и новой конфигурации выполните следующую команду, чтобы перезагрузить менеджер systemd и применить новые файлы служб в systemd.
sudo systemctl daemon-reload
Теперь запустите и включите службу PowerDNS-Admin с помощью следующей команды systemctl. Теперь PowerDNS-Admin должен работать с gunicorn и открыть файл сокета, доступный в каталоге ‘/run/powerdns-admin/‘.
sudo systemctl start powerdns-admin.socket powerdns-admin.service sudo systemctl enable powerdns-admin.socket powerdns-admin.service

Наконец, выполните следующую команду, чтобы проверить службу PowerDNS-Admin и убедиться, что она работает.
sudo systemctl status powerdns-admin.service powerdns-admin.socket
В приведенном ниже выводе видно, что powerdns-admin.service и powerdns-admin.socket работают и оба включены. Обе службы будут запускаться автоматически при запуске системы.

Установка Nginx в качестве обратного прокси для PowerDNS-Admin
На этом этапе вы настроите Nginx в качестве обратного прокси для PowerDNS-Admin.
Выполните следующую команду dnf, чтобы установить Nginx на ваш сервер Rocky Linux. При появлении запроса введите y для подтверждения и нажмите ENTER, чтобы продолжить.
sudo dnf install nginx
Далее создайте новый блок сервера Nginx ‘/etc/nginx/conf.d/pdns.conf‘ с помощью редактора nano.
sudo nano /etc/nginx/conf.d/pdns.conf
Добавьте в файл следующую конфигурацию и не забудьте изменить доменное имя. В этом примере для PowerDNS-Admin используется домен ‘pdns.local’.
server {
listen 80;
server_name pdns.local;
return 301 https://$http_host$request_uri;
}
server {
listen 443 ssl http2;
server_name pdns.local;
index index.html index.htm;
error_log /var/log/nginx/error_powerdnsadmin.log error;
access_log off;
ssl_certificate /etc/letsencrypt/live/pdns.local/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pdns.local/privkey.pem;
#ssl_dhparam path_to_your_dhparam.pem;
ssl_prefer_server_ciphers on;
ssl_ciphers ‘EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH’;
ssl_session_cache shared:SSL:10m;
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 $http_host;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_headers_hash_bucket_size 64;
location ~ ^/static/ {
include mime.types;
root /opt/powerdns-admin/powerdnsadmin;
location ~* \.(jpg|jpeg|png|gif)$ { expires 365d; }
location ~* ^.+.(css|js)$ { expires 7d; }
}
location ~ ^/upload/ {
include mime.types;
root /opt/powerdns-admin;
location ~* \.(jpg|jpeg|png|gif)$ { expires 365d; }
location ~* ^.+.(css|js)$ { expires 7d; }
}
location / {
proxy_pass http://unix:/run/powerdns-admin/socket;
proxy_read_timeout 120;
proxy_connect_timeout 120;
proxy_redirect http:// $scheme://;
}
}
Сохраните файл и закройте редактор, когда закончите.
Далее, запустите следующую команду, чтобы проверить конфигурацию Nginx и убедиться, что она верна. Вы должны увидеть сообщение типа ‘syntax ok — test is successful‘.
sudo nginx -t
Теперь выполните следующую команду systemctl, чтобы запустить и включить службу Nginx.
sudo systemctl start nginx sudo systemctl enable nginx

Наконец, проверьте службу Nginx с помощью следующей команды, чтобы убедиться, что она работает.
sudo systemctl status nginx
Вы должны увидеть сообщение о том, что служба nginx работает и включена. Таким образом, служба Nginx будет запускаться автоматически при запуске системы.

Доступ к установке PowerDNS-Admin
Откройте веб-браузер и перейдите по доменному имени вашей установки PowerDNS-Admin (например: https://pdns.local), после чего должна открыться страница входа в PowerDNS-Admin.
Нажмите на ссылку ‘Создать учетную запись», чтобы настроить нового администратора для PowerDNS-Admin.

Теперь введите данные нового пользователя, адрес электронной почты и пароль. Затем нажмите «Зарегистрироваться», чтобы подтвердить.
После создания администратора вы снова будете перенаправлены на страницу входа в PowerDNS-Admin. Войдите с помощью нового имени пользователя admin и пароля, затем нажмите «Войти».
Теперь вы должны увидеть панель управления PowerDNS-Admin. PowerDNS-Admin запущен, но пока еще не подключен к серверу PowerDNS.
Чтобы настроить сервер PowerDNS с помощью PowerDNS-Admin, необходимо добавить в PowerDNS-Admin ключ API, который вы настроили через сервер PowerDNS.
Введите данные API сервера PowerDNS в раздел ‘Настройки PDNS» и нажмите «Обновить».

Когда PowerDNS-Admin и сервер PowerDNS подключены через API, ваша панель управления должна выглядеть как на следующем скриншоте.

Теперь вы можете легко добавлять новые записи DNS или изменять существующие через панель управления PowerDNS-Admin.
Заключение
В этом руководстве вы узнали, как установить сервер PowerDNS с базой данных MySQL/MariaDB на сервере Rocky Linux. Вы также изучили основы развертывания базы данных MariaDB на Rocky Linux. Наконец, вы узнали, как установить и настроить PowerDNS-Admin, который будет использоваться в качестве веб-инструмента управления сервером PowerDNS. PowerDNS-Admin работает с Nginx в качестве обратного прокси и базой данных MariaDB в качестве бэкэнда.
После запуска сервера PowerDNS и PowerDNS-Admin вы можете управлять своим DNS-сервером через веб-панель администрирования. Вы можете добавлять, редактировать или удалять записи DNS через панель администрирования PowerDNS-Admin.