Как установить и настроить PowerDNS в Debian 10
0
14987
6 августа 2020 11:10
6/08/2020
Visitors have accessed this post 14987 times.
Автор — Максим Рязанов
Этот материал носит чисто прикладной характер. Поэтому мы не будем в нем останавливаться на том, чем PowerDNS лучше или хуже других DNS-серверов, и даже не будем сравнивать его с BIND. А сразу перейдем к решению нашей задачи — установка и настройка PowerDNS в Debian 10.
Master
Устанавливаем powerdns authoritative server и mariadb для хранения записей:
apt-get install -y pdns-server pdns-tools pdns-backend-mysql mariadb-server mariadb-client
Настраиваем mariadb — параметры, приведенные ниже, надо добавить или изменить, остальные — сохраняем в неизменном виде:
/etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld]
innodb_large_prefix = ON
innodb_file_format = Barracuda
innodb_file_per_table = ON
innodb_default_row_format = DYNAMIC
key_buffer_size = 32M
max_allowed_packet = 32M
thread_stack = 192K
thread_cache_size = 8
tmp_table_size = 32M
max_heap_table_size = 32M
myisam_recover_options = BACKUP
max_connections = 1000
query_cache_limit = 32M
query_cache_size = 64M
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
/etc/mysql/mariadb.conf.d/50-mysql-clients.cnf
[mysql]
default-character-set = utf8mb4
/etc/mysql/conf.d/mysqldump.cnf
[mysqldump]
max_allowed_packet = 16M
Создаем БД и схему в MySQL под pdns:
CREATE DATABASE pdns;
GRANT ALL PRIVILEGES ON pdns.* TO 'updns'@'localhost' IDENTIFIED BY 'Vrscpsswd';
FLUSH PRIVILEGES;
mysql -u updns -p pdns < /usr/share/pdns-backend-mysql/schema/schema.mysql.sql
При использовании механизма хранения есть возможность добавить в таблицы ограничения внешнего ключа, чтобы автоматизировать удаление записей, материала ключа и другой связанной информации при удалении домена из таблицы доменов:
ALTER TABLE records ADD CONSTRAINT records_domain_id_ibfk
FOREIGN KEY (domain_id
) REFERENCES domains
(id
) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE comments ADD CONSTRAINT comments_domain_id_ibfk
FOREIGN KEY (domain_id
) REFERENCES domains
(id
) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE domainmetadata ADD CONSTRAINT domainmetadata_domain_id_ibfk
FOREIGN KEY (domain_id
) REFERENCES domains
(id
) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE cryptokeys ADD CONSTRAINT cryptokeys_domain_id_ibfk
FOREIGN KEY (domain_id
) REFERENCES domains
(id
) ON DELETE CASCADE ON UPDATE CASCADE;
Конфигурируем powerdns authoritative master:
/etc/powerdns/pdns.conf
launch=gmysql
gmysql-host=localhost
gmysql-user=updns
gmysql-dbname=pdns
gmysql-password=Vrscpsswd
gmysql-dnssec=yes
setgid=pdns
setuid=pdns
Что происходит в базе и как заносить туда записи, разберемся на примере экспорта в базу правил bind:
/etc/named.conf
// vim:set ts=4 sw=4 et:
options {
directory "/var/named";
pid-file "/run/named/named.pid";
allow-recursion { 127.0.0.1; };
allow-transfer { none; };
allow-update { none; };
version none;
hostname none;
server-id none;
};
zone "localhost" IN {
type master;
file "/etc/named/localhost.zone";
};
zone "rpulse.locnet" IN {
type master;
file "/etc/named/rpulse.locnet.zone";
};
zone "ryazanov.locnet" IN {
type master;
file "/etc/named/ryazanov.locnet.zone";
};
zone "16.16.172.in-addr.arpa" IN {
type master;
file "/etc/named/rpulse.rev_locnet";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "/etc/named/127.0.0.zone";
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" {
type master;
file "/etc/named/localhost.ip6.zone";
};
Пример файлов зон:
/etc/named/rpulse.locnet.zone
$TTL 7200
; domain.tld@ IN SOA ns01.rpulse.locnet. ns01.rpulse.locnet. (
2018111117 ; Serial
28800 ; Refresh
1800 ; Retry
604800 ; Expire - 1 week
86400 ) ; Minimum
@ IN NS ns01
IN NS ns01
ns01 IN A 172.16.16.1
@ IN A 172.16.16.1
www IN A 172.16.16.1
gitlab IN A 172.16.16.132
ovirt-ng IN A 172.16.16.176
node01 IN A 172.16.16.175
@ IN MX 10 mx1
mx1 IN A 172.16.16.106
/etc/named/rpulse.rev_locnet
16.16.172.in-addr.arpa. 10800 IN SOA ns01.rpulse.locnet. ns01.rpulse.locnet. 2007012001 (
10h ; slave-server connection period
1h ; retry
1w ; life-time
1h ) ; negative ttl
NS ns01.rpulse.locnet.
6 PTR mx1.rpulse.locnet
Превращаем записи bind в sql для pdns и загружаем в базу:
zone2sql --named-conf=/etc/named.conf --gmysql > named2pdns.sql
mysql -u updns -p pdns < named2pdns.sql
Результат будет похож на этот:
⇒
Проверим, что pdns запускается. Выполним:
/usr/sbin/pdns_server --daemon=no --guardian=no --loglevel=9
Увидим примерно следующее:
(...)
15:31:30 PowerDNS 1.99.0 (Mar 12 2002, 15:00:28) starting up
15:31:30 About to create 3 backend threads
15:39:55 [gMySQLbackend] MySQL connection succeeded
15:39:55 [gMySQLbackend] MySQL connection succeeded
15:39:55 [gMySQLbackend] MySQL connection succeeded
Значит, все хорошо.
Можно защитить зоны DNSSEC:
pdnsutil secure-zone rpulse.locnet
Примерный вывод:
Apr 05 17:50:19 [bindbackend] Done parsing domains, 0 rejected, 0 new, 0 removed
Securing zone with default key size
Adding CSK (257) with algorithm ecdsa256
Zone rpulse.locnet secured
Adding NSEC ordering information
Настройка master-а завершена.
Устанавливаем recursor
apt-get install -y pdns-recursor
Правим конфигурационный файл /etc/powerdns/recursor.conf.
allow-from=0.0.0.0
config-dir=/etc/powerdns
forward-zones=locnet=172.16.16.11, .=212.49.103.2;212.49.118.2
forward-zones-recurse=locnet=172.16.16.11, .=212.49.103.2;212.49.118.2
hint-file=/usr/share/dns/root.hints
include-dir=/etc/powerdns/recursor.d
local-address=172.16.16.77
lua-config-file=/etc/powerdns/recursor.lua
quiet=yes
security-poll-suffix=
На этом настройку PowerDNS мы завершили. Надеюсь, у вас все получилось.
И напоследок о том, как работать с записями из командной строки.
Создание зоны и добавление записи для зоны:
pdnsutil add-record rpulse.locnet gate A 7200 172.16.16.11
Обновление новой зоны и включение в защиту DNSSEC новой записи:
pdnsutil rectify-zone rpulse.locnet
И наконец, другие возможности утилиты pdnsutil можно узнать, выполнив команду
pdnsutil --help
От редакции
Если вам интересно посещать бесплатные онлайн-мероприятия по DevOps, Kubernetes, Docker, GitlabCI и др. и задавать вопросы в режиме реального времени, подключайтесь к каналу DevOps by REBRAIN.
*Анонсы мероприятий каждую неделю
Практикумы для специалистов по инфраструктуре и разработчиков — https://rebrainme.com.
Наш Youtube-канал — https://www.youtube.com/channel/UC6uIx64IFKMVmj12gKtSgBQ.
Агентство Fevlake, проектируем и поддерживаем IT-инфраструктуры с 2012 года — https://fevlake.com.