15.01.2010

Настраиваем superslave dns-сервер PowerDNS

Настраиваем superslave dns-сервер PowerDNS

Если кто не знает, superslave - это dns-сервер, который по axfr-запросам получает зону и создает у себя ее автоматически. Таким образом не нужно синхронизировать зонные файлы по rsync или каким-либо образом обеспечивать передачу зонных файлов на slave-сервер.

Установка PowerDNS

Ставим powerdns:

yum install pdns pdns-backend-mysql

Редактируем pdns.conf, оставляя там только:

setuid=pdns # Пользователь pdns
setgid=pdns # Группа pdns
allow-axfr-ips=11.22.33.44 # Диапазон IP-адресов, откуда мы можем обслуживать axfr-запросы
allow-recursion=11.22.33.44 # Диапазон IP-адресов, которым мы являемся forwarder-ом
default-soa-name=ns2.hostinghutor.com # SOA NS для нашей slave-зоны.
launch=gmysql # mysql-бэкенд
gmysql-socket=/var/lib/mysql/mysql.sock # Используем unix-сокет, так как tcp медленнее
gmysql-user=pdns # Пользователь mysql для pdns
gmysql-password=passWorD # Пароль пользователя mysql для pdns
gmysql-dbname=pdns # Название БД pdns
local-address=55.66.77.77 # IP-адрес нашего dns-сервера
recursor=77.77.77.77 # IP-адрес forwarder-а, которому будут передаваться запросы не на наши зоны
slave=yes # Включаем поддержку slave dns
logging-facility=0 # Канал syslog, в который писать логи pdns

Можно, конечно, поднастроить кеши и т.п. но приведенного выше конфига вполне хватит для нормальной работы нашего dns-сервера.

Создаем пользователя и базу pdns, для чего выполняем команды:

mysql -uroot -p
CREATE DATABASE pdns;
GRANT ALL ON pdns.* TO 'pdns'@'localhost' IDENTIFIED BY 'passWorD';
FLUSH PRIVILEGES; 

Далее, создаем нужные нам таблицы:

mysql -updns -ppassWorD
USE pdns;
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)
)type=InnoDB;
 
CREATE UNIQUE INDEX name_index ON domains(name);
 
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)
)type=InnoDB;
 
CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
 
create table supermasters (
  ip VARCHAR(25) NOT NULL, 
  nameserver VARCHAR(255) NOT NULL, 
  account VARCHAR(40) DEFAULT NULL
);
 
GRANT SELECT ON supermasters TO pdns;
GRANT ALL ON domains TO pdns;
GRANT ALL ON records TO pdns;

Логи pdns ведем в /var/log/pdns/pdns.log:

mkdir -p /var/log/pdns
touch /var/log/pdns/pdns.log
chown -R pdns:pdns /var/log/pdns
echo "local0.* /var/log/pdns/pdns.log" >>/etc/syslog.conf
service syslog restart

Запускаем и прописываем powerdns в стартовые скрипты:

chkconfig pdns on
service pdns start

Для прописывания supermaster-а в pdns запускаем следующие команды:

mysql -updns -ppassWorD pdns
INSERT INTO supermasters ( ip, nameserver, account ) VALUES ( 'IP.IP.IP.IP', 'ns1.example.com', 'example' );

IP.IP.IP.IP - это IP-адрес нашего supermaster-а
ns1.example.com - SOA NS master-сервера
example - идентификатор, того, кому принадлежит домен.

В named.conf bind-а на master-е необходимо добавить наш superslave:

allow-transfer { IP.IP.IP.IP; };

IP.IP.IP.IP - это IP-адрес нашего superslave-сервера.

Удаление доменов в PowerDNS

Powerdns сам не удаляет домены, которые были удалены с master-а. Для удаления используем скрипт rmzones.sh, который будет запускаться раз в сутки и чистить с базы pdns удаленные с master-сервера зоны:

#!/bin/bash
 
for dom in `grep 'produced a NS record' /var/log/pdns/pdns.log |awk '{print $10}' | cut -d\' -f2 | sort | uniq |grep -v NS`
do
    echo "Delete domain $dom"
    echo "DELETE FROM records WHERE name='$dom';" | mysql -updns -ppassWorD pdns
    echo "DELETE FROM domains WHERE name='$dom';" | mysql -updns -ppassWorD pdns
done
echo -n >/var/log/pdns/pdns.log
service syslog restart

Прописываем его в crontab:

crontab -e
0 2 * * * /usr/local/bin/rmzones.sh

Последние новости

Скидка на все домены Украины до 21.10.2022!
14.10.2022
Скидка на все домены Украины до 21.10.2022!
Уважаемые пользователи! Целую неделю у нас скидка -15% на регистрацию всех украинских доменов по промокоду defendersday22!
Подорожание ряда украинских доменов UA ccTLD!
28.09.2022
Подорожание ряда украинских доменов UA ccTLD!
Уважаемые пользователи! С 1 октября 2022 нас ждет подорожание в ряде украинских доменов - in.ua, od.ua, mk.ua!
Важные изменения в работе ряда украинских доменных имен!
09.03.2022
Важные изменения в работе ряда украинских доменных имен!
Уважаемые пользователи! В некоторых украинских доменных зонах увеличен срок периода Redemption с 30 до 60 дней.
Существенное подорожание выделенных IP-адресов (IPv4) в Германии!
09.08.2021
Существенное подорожание выделенных IP-адресов (IPv4) в Германии!
Уважаемые пользователи! В Германии существенно подорожали дополнительные выделенные IP-адреса (IPv4) и IP-сети.

Последнее в блоге

Коронавирус Coronavirus (COVID-19) и кибермошенники в сети Интернет
02.03.2020
Коронавирус Coronavirus (COVID-19) и кибермошенники в сети Интернет
Паника вокруг коронавируса COVID-19 используется кибермошенниками в сети Интернет - фишинг, продажа масок, вакцин и тестов.
Не отправляется почта - проверяем не блокирует ли провайдер 25 порт
11.01.2020
Не отправляется почта - проверяем не блокирует ли провайдер 25 порт
Проверяем блокирует ли провайдер 25 порт с помощью командной строки в ОС Windows. Как отправлять почту если 25 порт заблокирован.
Как установить Clam AntiVirus (ClamAV) на VPS или сервер с ОС CentOS
11.11.2019
Как установить Clam AntiVirus (ClamAV) на VPS или сервер с ОС CentOS
Устанавливаем Clam AntiVirus (ClamAV) на VPS / VDS или выделенный сервер с ОС CentOS и настраиваем ежедневное сканирование сервера.
ISPmanager больше не поддерживает резервное копирование в Яндекс.Диск
20.10.2019
ISPmanager больше не поддерживает резервное копирование в Яндекс.Диск
В течении недели Яндекс.Диск исчезнет из списка хранилища для резервного копирования в панеле ISPmanager и других продуктах ISPsystem.