Установка PowerDNS · 13 min read · Sep 08, 2025
Как установить PowerDNS и PowerAdmin на Rocky Linux

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.
- Непривилегированный пользователь с правами администратора 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 для подтверждения.
- Удалить тестовую базу данных по умолчанию из MariaDB? Введите y снова для подтверждения.
- Наконец, перезагрузить привилегии таблиц, чтобы применить новые изменения? Введите y для подтверждения, и MariaDB перезагрузит все привилегии и применит новые настройки.
Теперь, когда вы защитили развертывание MariaDB, вы настроите новую базу данных MariaDB и пользователя для PowerDNS.
Для начала выполните команду mysql ниже, чтобы войти в оболочку MariaDB как пользователь root MariaDB.
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 < /usr/share/doc/pdns/schema.mysql.sqlВведите пароль для пользователя pdnsadmin и нажмите ENTER, чтобы подтвердить и продолжить.
Затем отредактируйте конфигурацию PowerDNS ‘/etc/pdns/pdns.conf’ с помощью следующей команды редактора nano.
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, поэтому установка PowerDNS-Admin довольно похожа на установку веб-фреймворка 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 virtualenvPython 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Добавьте следующую конфигурацию в файл и убедитесь, что вы изменили имя домена. В этом примере используется домен ‘pdns.howtoforge.local’ для PowerDNS-Admin.
server {
listen 80;
server_name pdns.howtoforge.local;
return 301 https://$http_host$request_uri;
}
server {
listen 443 ssl http2;
server_name pdns.howtoforge.local;
index index.html index.htm;
error_log /var/log/nginx/error_powerdnsadmin.log error;
access_log off;
ssl_certificate /etc/letsencrypt/live/pdns.howtoforge.local/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/pdns.howtoforge.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 и убедиться, что конфигурация правильная. Вы должны увидеть сообщение о выводе, например ‘ синтаксис в порядке - тест успешен ‘.
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.howtoforge.local), и вы должны увидеть страницу входа PowerDNS-Admin.
Нажмите на ссылку ‘ Создать учетную запись ‘, чтобы настроить нового администратора для PowerDNS-Admin.

Теперь введите данные нового пользователя, адрес электронной почты и пароль. Затем нажмите ‘ Зарегистрироваться ‘, чтобы подтвердить.

После создания учетной записи администратора вы будете перенаправлены обратно на страницу входа PowerDNS-Admin. Войдите с помощью вашего нового пользователя администратора и пароля, затем нажмите ‘ Войти ‘.

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

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

Отсюда вы теперь можете легко добавлять новые DNS-записи или изменять существующие 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.
Get new posts in your inbox
No spam. Unsubscribe anytime.