Visitors have accessed this post 15019 times.

Как установить и настроить PowerDNS в Debian 10

0
0
15019
6 августа 2020 11:10
Автор: Rebrain Me
Linux

Visitors have accessed this post 15019 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.

Комментарии (3)
Введено символов из возможных
Не отвечать

Вам также может понравится

Протокол SSH
array(1) { [0]=> object(WP_Term)#11542 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(28) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(28) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Протокол SSH (Secure SHell) - один из основных и очень важных инструментов работы с Linux (тут надо отметить, что он может использоваться и для других платформ - OpenBSD, Windows, macOS). SSH применяется для зашифрованного соединения сервера и клиента путем создания защищенного соединения на удаленном компьютере. Используется прежде всего для...

3
0
25 мая 2020
Работа с сетью в Docker
array(1) { [0]=> object(WP_Term)#988 (16) { ["term_id"]=> int(8) ["name"]=> string(6) "Docker" ["slug"]=> string(6) "docker" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(8) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(8) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(8) ["category_count"]=> int(8) ["category_description"]=> string(0) "" ["cat_name"]=> string(6) "Docker" ["category_nicename"]=> string(6) "docker" ["category_parent"]=> int(0) } } Docker

В Docker, как правило, работа с сетью не представляет из себя больших сложностей - она неплохо работает и по умолчанию. Но, как и в подавляющем большинстве случаев, полезно понимать, как все устроено «под капотом».
Разбираемся с сетью в Docker
Для начала давайте посмотрим, как настроена сетевая модель Docker по умолчанию. То есть, когда вы...

14
0
6 ноября 2020
Углубленная работа с nixops — настраиваем кластер mariadb galera
array(1) { [0]=> object(WP_Term)#11543 (16) { ["term_id"]=> int(6) ["name"]=> string(5) "Linux" ["slug"]=> string(5) "linux" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(6) ["taxonomy"]=> string(8) "category" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(28) ["filter"]=> string(3) "raw" ["cat_ID"]=> int(6) ["category_count"]=> int(28) ["category_description"]=> string(0) "" ["cat_name"]=> string(5) "Linux" ["category_nicename"]=> string(5) "linux" ["category_parent"]=> int(0) } } Linux

Автор - Юрий Изоркин

В предыдущей статье мы настроили управление одной удаленной системой с помощью утилиты nixops. Давайте теперь попробуем более сложный вариант — поднимем еще 3 удаленные системы и настроим кластер MariaDB Galera.
Установка удаленных систем
Устанавливаем на 3 удаленных системах OC NixOS с такой конфигурацией (используется...

4
0
15 января 2021