PowerDNS: установка и настройка на CentOS + MySQL/MariaDB + Poweradmin

Автор: | 27/03/2015
 

PDNS-Admin-thumbДомашняя страница PowerDNSтут>>>.

Установка выполняется на CentOS 6.6.

Установка MariaDB полностью описана тут>>>.

Устанавливаем MariaDB:

# yum install MariaDB-client MariaDB-common MariaDB-compat MariaDB-devel MariaDB-server MariaDB-shared

Запускаем:

# service mysql start

Выполняем первоначальную настройку:

# /usr/bin/mysql_secure_installation

Добавляем в автозагрузку:

# chkconfig mysql on

Настраиваем MariaDB для работы PowerDNS:

# mysql -u root -p

Создаём базу:

MariaDB [(none)]> CREATE DATABASE powerdns;
Query OK, 1 row affected (0.01 sec)

Создаём пользователя:

MariaDB [(none)]> GRANT ALL ON powerdns.* TO 'power_admin'@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

Создаём файл pdns_mysql.sql с таким содержимым:

DROP TABLE IF EXISTS domains;

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)
);

CREATE UNIQUE INDEX name_index ON domains(name);

DROP TABLE IF EXISTS records;

CREATE TABLE records (
  id INT auto_increment,
  domain_id INT DEFAULT NULL,
  name VARCHAR(255) DEFAULT NULL,
  type VARCHAR(6) DEFAULT NULL,
  content VARCHAR(255) DEFAULT NULL,
  ttl INT DEFAULT NULL,
  prio INT DEFAULT NULL,
  change_date INT DEFAULT NULL,
  primary key(id)
);

CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);

DROP TABLE IF EXISTS supermasters;

create table supermasters (
  ip VARCHAR(25) NOT NULL,
  nameserver VARCHAR(255) NOT NULL,
  account VARCHAR(40) DEFAULT NULL
);

Запускаем создание таблиц:

# mysql -u root -p -D powerdns < pdns_mysql.sql
Enter password:

Устанавливаем PowerDNS:

# yum install pdns pdns-backend-pipe pdns-backend-mysql pdns-backend-geo

Редактируем /etc/pdns/pdns.conf:

setuid=pdns
setgid=pdns

launch=gmysql
gmysql-host=localhost
gmysql-user=power_admin
gmysql-password=password
gmysql-dbname=powerdns

local-address=10.***.***.164

Добавляем в автозагрузку:

# chkconfig pdns on

Запускаем:

# service pdns start
Starting PowerDNS authoritative nameserver: started

Для работы Poweradmin – нам потребуется NGINX + PHP-FPM. Их настройка описана в посте CentOS: установка NGINX + PHP-FPM, поэтому описывать её не будем.

Устанавливаем PHP:

# yum install 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

Создаём файл /etc/php-fpm.d/poweradmin.conf:

[poweradmin]
listen = 127.0.0.1:9001
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

user=nginx
group=nginx

slowlog = /var/log/nginx/pwadmin-slow.log

php_admin_value[error_log] = /var/log/nginx/pwadmin-error.log
php_admin_flag[log_errors] = on

Для Poweradmin создаём виртуалхост в файле настроек NGINX /etc/nginx/nginx.conf:

server {

        listen       80;
        server_name  pwadmin.domain.local;
        root /usr/share/poweradmin;

        access_log /var/log/nginx/pwadmin-access.log;
        error_log /var/log/nginx/pwadmin-error.log;

        location / {
            index index.html index.htm index.php;
        }

        location ~ .php$ {
            include /etc/nginx/fastcgi_params;
                fastcgi_pass  127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME /var/www/vhosts/pwadmin.domain.local$fastcgi_script_name;
            }
        }

Проверяем:

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

Запускаем:

# service nginx start
Starting nginx:                                            [  OK  ]

Запускаем PHP-FPM:

# service php-fpm start
Starting php-fpm:                                          [  OK  ]

Добавляем их в автозапуск:

# chkconfig nginx on
# chkconfig php-fpm on

Открываем фаервол:

# iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT

Создадим каталог для витртуалхоста с Poweradmin:

# mkdir -p /var/www/vhosts/pwadmin.domain.local

Переходим в него и со страницы загрузок загружаем Poweradmin:

# git clone https://github.com/poweradmin/poweradmin .

Создаём файл настроек:

# cp inc/config-me.inc.php inc/config.inc.php

Переходим в браузере на http://pwadmin.domain.local/install:

Выбираем язык:

pwadmin_1.

Installation step 2 – просто жмём Go to step 3.

Далее настраиваем подключение к базе данных (ВАЖНО: последнее поле – пароль пользователя admin):

pwadmin_2

Можно (не обязательно) заполнить данные по умолчанию для зон:

pwadmin_6

Шаг 5 – кликаем Next.

Шаг 6 – записываем $session_key в файл /var/www/vhosts/pwadmin.domain.local/inc/config.inc.php.

После шага Installation step 7 – удаляем директорию install:

# rm -rf /var/www/vhosts/pwadmin.domain.local/install/

Переходим на главную – и логинимся в Poweradmin с логином admin и паролем, который указали ранее:

pwadmin_7

Готово.

Добавим зону local.

Переходим в Add master zone, и заполняем поля:

pwadmin_8

pwadmin_9

Для редактирования переходим в List zones, слева от домена жмём “Редактировать“:

pwadmin_10

Добавляем домен domain.local:

pwadmin_11

pwadmin_12

Проверяем:

# dig @10.***.***.164 domain.local +short
10.***.***.164

Готово.

Последнее – открыть порт 53 для UDP:

# iptables -I INPUT 2 -p udp --dport 53 -j ACCEPT
# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

Проверяем с удалённого сервера.

Редактируем /etc/resolv.conf, первой строкой добавляем IP нового DNS:

# cat /etc/resolv.conf | grep name
nameserver 10.***.***.164

И выполняем поиск:

# dig domain.local +short
10.***.***.164

Работает.

Ссылки по теме

https://www.digitalocean.com

https://plone.lucidsolutions.co.nz

https://www.howtoforge.com