Установка DNS · 8 min read · Oct 01, 2025

Как установить PowerDNS и Poweradmin на CentOS 7

PowerDNS (pdns) — это сервер DNS с открытым исходным кодом, написанный на C++ и выпущенный под лицензией GPL. Он стал хорошей альтернативой традиционному серверу DNS Bind, разработанному с лучшей производительностью и низкими требованиями к памяти. PowerDNS предоставляет два продукта: авторитетный сервер и рекурсор. Авторитетный сервер PowerDNS можно настроить через различные бэкенды, включая обычные файлы зон Bind, RDBMS, такие как MySQL, PostgreSQL, SQLite3 или LDAP.

В этом руководстве я покажу вам, как установить и настроить авторитетный сервер PowerDNS с сервером баз данных MariaDB в качестве бэкенда и использовать Poweradmin для простого управления DNS.

Предварительные требования

  • Сервер CentOS 7
  • Привилегии root

Что мы будем делать:

  1. Установить репозитории EPEL и Remi
  2. Установить и настроить MariaDB
  3. Установить PowerDNS
  4. Установить Poweradmin
  5. Постустановка Poweradmin
  6. Создать образец зоны

Шаг 1 - Установить репозитории EPEL и Remi

Прежде всего, нам нужно установить зависимости для установки PowerDNS. Мы собираемся установить репозиторий EPEL и REMI для установки PHP 7.2.

Установите репозиторий EPEL и PHP Remi с помощью следующих команд.

yum -y install epel-release  
 yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm

После добавления этих репозиториев в систему установите пакет ‘yum-utils’.

yum -y install yum-utils

И активируйте репозиторий PHP 7.2 Remi с помощью следующей команды.

yum-config-manager --enable remi-php72

Шаг 2 - Установить и настроить MariaDB

Авторитетный сервер PowerDNS поддерживает различные бэкенды, включая сервер баз данных MySQL/MariaDB. Термин ‘бэкенд’ — это хранилище данных, к которому сервер будет обращаться и которое содержит DNS записи (и некоторые метаданные). В этом руководстве мы будем использовать MariaDB в качестве бэкенда.

Установите MariaDB с помощью следующей команды yum.

yum -y install mariadb mariadb-server

После завершения установки запустите службу MariaDB и добавьте ее в автозагрузку.

systemctl start mariadb  
 systemctl enable mariadb

Далее мы собираемся настроить пароль root для MariaDB с помощью интерактивного инструмента под названием ‘mysql_secure_installation’.

Запустите команду ниже.

mysql_secure_installation

И вам будет предложено настроить пароль root для сервера баз данных. Введите ‘Y’, чтобы установить пароль root, и введите надежный пароль.

Set root password? [Y/n] Y  
New password:   
Re-enter new password: 

Для остальных просто введите ‘Y’, чтобы подтвердить.

Remove anonymous users? [Y/n] Y  
Disallow root login remotely? [Y/n] Y  
Remove test database and access to it? [Y/n] Y  
Reload privilege tables now? [Y/n] Y

В результате вы установили сервер баз данных MariaDB и настроили пароль root для аутентификации.

Далее мы создадим новую базу данных и пользователя для установки PowerDNS. Войдите в оболочку MySQL с пользователем root и вашим паролем.

Запустите команду MySQL ниже.

mysql -u root -p  
 PASSWORD

Теперь создайте новую базу данных с именем ‘powerdns’ и предоставьте все привилегии базы данных новому пользователю с именем ‘pdns’ с паролем ‘pdnspassword2018’.

create database powerdns;  
 grant all privileges on powerdns.* to pdns@localhost identified by 'pdnspassword2018';  
 flush privileges;

Установить базу данных PowerDNS

После этого создайте структуры таблиц для базы данных PowerDNS, запустив следующие запросы MySQL ниже.

use powerdns;  
   
 CREATE TABLE domains (  
   id                    INT AUTO_INCREMENT,  
   name                  VARCHAR(255) NOT NULL,  
   master                VARCHAR(128) DEFAULT NULL,  
   last_check            INT DEFAULT NULL,  
   type                  VARCHAR(6) NOT NULL,  
   notified_serial       INT DEFAULT NULL,  
   account               VARCHAR(40) DEFAULT NULL,  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE UNIQUE INDEX name_index ON domains(name);  
   
   
 CREATE TABLE records (  
   id                    BIGINT AUTO_INCREMENT,  
   domain_id             INT DEFAULT NULL,  
   name                  VARCHAR(255) DEFAULT NULL,  
   type                  VARCHAR(10) DEFAULT NULL,  
   content               VARCHAR(64000) DEFAULT NULL,  
   ttl                   INT DEFAULT NULL,  
   prio                  INT DEFAULT NULL,  
   change_date           INT DEFAULT NULL,  
   disabled              TINYINT(1) DEFAULT 0,  
   ordername             VARCHAR(255) BINARY DEFAULT NULL,  
   auth                  TINYINT(1) DEFAULT 1,  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE INDEX nametype_index ON records(name,type);  
 CREATE INDEX domain_id ON records(domain_id);  
 CREATE INDEX recordorder ON records (domain_id, ordername);  
   
   
 CREATE TABLE supermasters (  
   ip                    VARCHAR(64) NOT NULL,  
   nameserver            VARCHAR(255) NOT NULL,  
   account               VARCHAR(40) NOT NULL,  
   PRIMARY KEY (ip, nameserver)  
 ) Engine=InnoDB;  
   
   
 CREATE TABLE comments (  
   id                    INT AUTO_INCREMENT,  
   domain_id             INT NOT NULL,  
   name                  VARCHAR(255) NOT NULL,  
   type                  VARCHAR(10) NOT NULL,  
   modified_at           INT NOT NULL,  
   account               VARCHAR(40) NOT NULL,  
   comment               VARCHAR(64000) NOT NULL,  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE INDEX comments_domain_id_idx ON comments (domain_id);  
 CREATE INDEX comments_name_type_idx ON comments (name, type);  
 CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);  
   
   
 CREATE TABLE domainmetadata (  
   id                    INT AUTO_INCREMENT,  
   domain_id             INT NOT NULL,  
   kind                  VARCHAR(32),  
   content               TEXT,  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);  
   
   
 CREATE TABLE cryptokeys (  
   id                    INT AUTO_INCREMENT,  
   domain_id             INT NOT NULL,  
   flags                 INT NOT NULL,  
   active                BOOL,  
   content               TEXT,  
   PRIMARY KEY(id)  
 ) Engine=InnoDB;  
   
 CREATE INDEX domainidindex ON cryptokeys(domain_id);  
   
   
 CREATE TABLE tsigkeys (  
   id                    INT AUTO_INCREMENT,  
   name                  VARCHAR(255),  
   algorithm             VARCHAR(50),  
   secret                VARCHAR(255),  
   PRIMARY KEY (id)  
 ) Engine=InnoDB;  
   
 CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);  
   
 quit;

В результате была создана база данных MySQL/MariaDB и пользователь для установки PowerDNS.

Шаг 3 - Установить PowerDNS

Установите PowerDNS и все необходимые пакеты с помощью следующей команды.

yum -y install pdns pdns-backend-mysql bind-utils

После установки пакетов PowerDNS перейдите в директорию ‘/etc/pdns/‘ и отредактируйте файл конфигурации ‘pdns.conf’ с помощью редактора vim.

cd /etc/pdns/  
 vim pdns.conf

По умолчанию PowerDNS использует ‘bind’ в качестве бэкенда. Поэтому введите комментарий ‘#’ перед конфигурацией ‘launch=bind’ и вставьте конфигурацию MySQL бэкенда, как показано ниже.

#launch=bind  
  
launch=gmysql  
gmysql-host=localhost  
gmysql-user=pdns  
gmysql-password=pdnspassword2018  
gmysql-dbname=powerdns

Сохраните и закройте.

Установить PowerDNS

Теперь запустите службу pdns и добавьте ее в автозагрузку.

systemctl start pdns  
 systemctl enable pdns

После этого добавьте службу DNS в брандмауэр.

firewall-cmd --add-service=dns --permanent  
 firewall-cmd --reload

Настроить брандмауэр

И служба PowerDNS работает, проверьте с помощью следующей команды.

netstat -tap | grep pdns  
 netstat -tulpn | grep 53  
 dig @10.9.9.10

В результате вы получите, что служба pdns работает на порту 53 и получаете ответ от сервера PowerDNS.

Проверить статус PowerDNS

Шаг 4 - Установить Poweradmin

На этом этапе мы собираемся установить управление DNS для PowerDNS, называемое ‘Poweradmin’. Это веб-приложение на основе PHP, поэтому нам нужно установить PHP и веб-сервер, чтобы запустить приложение.

Установите веб-сервер httpd и пакеты PHP с помощью следующей команды.

yum -y install httpd php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext

После установки нам нужно установить дополнительные пакеты PHP Pear. Запустите следующую команду.

yum -y install php-pear-DB php-pear-MDB2-Driver-mysqli

После завершения установки httpd и PHP запустите службу httpd и добавьте ее в автозагрузку.

systemctl start httpd  
 systemctl enable httpd

Далее перейдите в директорию ‘/var/www/html’ и загрузите исходный код poweradmin.

cd /var/www/html/  
 wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz

Извлеките сжатый файл poweradmin и переименуйте его.

tar xvf poweradmin-2.1.7.tgz  
 mv poweradmin-2.1.7/ poweradmin/

После этого добавьте протоколы HTTP и HTTPS в брандмауэр.

firewall-cmd --add-service={http,https} --permanent  
 firewall-cmd --reload

И мы готовы к постустановке poweradmin.

Шаг 5 - Постустановка Poweradmin

Откройте веб-браузер и введите IP-адрес сервера плюс URL-адрес /poweradmin/install/ для установки. Мой адрес:

http://10.9.9.10/poweradmin/install/

Выберите предпочитаемый язык и нажмите кнопку ‘Перейти к шагу 2’.

Теперь просто нажмите кнопку ‘Перейти к шагу 3’.

И вам будет показана конфигурация базы данных. Введите данные базы данных PowerDNS, которые мы создали, и пароль администратора для PowerDNS.

Настройка базы данных PowerAdmin

Нажмите кнопку ‘Перейти к шагу 4’.

После этого вам нужно будет создать нового пользователя с ограниченными правами. Введите данные, как показано ниже, и измените пользователя, пароль и т. д. на свои собственные.

Теперь нажмите кнопку ‘Перейти к шагу 5’.

И вам будет показана страница, как ниже.

Откройте снова терминал сервера, войдите с пользователем root и паролем. Затем выполните запросы MySQL, как на странице.

mysql -u root -p  
 PASSWORD  
   
 GRANT SELECT, INSERT, UPDATE, DELETE  
 ON powerdns.*  
 TO 'hakase'@'localhost'  
 IDENTIFIED BY 'hakase-labs123';

Команды Mysql

Теперь вернитесь в веб-браузер и нажмите кнопку ‘Перейти к шагу 6’.

И вам будет показана страница, как ниже.

Шаг установки 6

Установщик не смог создать новую конфигурацию ‘../inc/config.inc.php’. Поэтому нам нужно создать ее вручную.

Вернитесь в терминал сервера, перейдите в директорию ‘/var/www/html/poweradmin’ и создайте новый файл конфигурации ‘inc/config.inc.php’.

cd /var/www/html/poweradmin  
 vim inc/config.inc.php

Теперь вставьте PHP-скрипт со страницы в него.

Сохраните и закройте, затем вернитесь в браузер и нажмите кнопку.

Файл конфигурации базы данных

И установка завершена.

Опционально:

Если вы хотите поддерживать URL-адреса, используемые другими динамическими провайдерами, скопируйте файл htaccess.

cd /var/www/html/poweradmin  
 cp install/htaccess.dist .htaccess

После этого вы ДОЛЖНЫ удалить директорию ‘install’.

rm -rf /var/www/html/poweradmin/install

Вернитесь в веб-браузер и войдите в панель управления Poweradmin, используя URL-адрес ниже.

http://10.9.9.10/poweradmin/

Войдите с помощью пользователя по умолчанию ‘admin’ и пароля, нажмите кнопку ‘Перейти’.

И в результате вам будет показана панель управления Poweradmin, и установка завершена.

Шаг 6 - Создать образец зоны и DNS записи

На этом этапе мы собираемся протестировать установку PowerDNS и Poweradmin, создав новую DNS-зону для домена с именем ‘emma.io’.

На панели управления Poweradmin нажмите меню ‘Добавить мастер-зону’.

Установите имя зоны с именем домена ‘emaa.io’ и нажмите кнопку ‘Добавить зону’.

Нажмите меню ‘Список зон’, чтобы получить все доступные зоны. И нажмите кнопку ‘редактировать’ для зоны ‘emma.io’.

Нажмите меню ‘Список зон’, чтобы получить все доступные зоны. И нажмите кнопку ‘редактировать’ для зоны ‘emma.io’.

Список зон

Теперь нажмите кнопку ‘Добавить запись’, и мы успешно добавили DNS-зону и DNS-запись для домена с именем ‘emma.io’.

Далее мы собираемся протестировать домен ‘emma.io’ с помощью команды утилиты DNS ‘dig’.

Проверьте запись имен сервера или ns для домена ‘emma.io’.

dig NS emma.io @10.9.9.10

Проверить зону с помощью команды dig

Проверьте A DNS запись домена ‘emma.io’.

dig A emma.io @10.9.9.10

Результат команды dig

И вам будет показано, что домен ‘emma.io’ имеет nameserver от нашего DNS-сервера ‘ns1.hakase-labs.io’, и ‘A’ этого доменного имени соответствует нашей конфигурации выше с IP-адресом сервера ‘10.9.9.11’.

В конечном итоге установка и настройка PowerDNS и Poweradmin на CentOS 7 были успешно завершены.

Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.