15.01.2010

Налаштовуємо superslave dns-сервер

Налаштовуємо superslave dns-сервер

Якщо хтось не знає, 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-мережі.

Останні записи з блогу

Як встановити Postfix на CentOS Stream 10 і налаштувати сервер SMTP
18.03.2025
Як встановити Postfix на CentOS Stream 10 і налаштувати сервер SMTP
Встановлюємо Postfix на VPS/VDS або виділений сервер із ОС CentOS Stream 10 та налаштовуємо SMTP сервер.
Коронавірус 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 і налаштовуємо щоденне сканування сервера.