Протокол SSH (Secure SHell) - один из основных и очень важных инструментов работы с Linux (тут надо отметить, что он может использоваться и для других платформ - OpenBSD, Windows, macOS). SSH применяется для зашифрованного соединения сервера и клиента путем создания защищенного соединения на удаленном компьютере. Используется прежде всего для...
Как установить и настроить PowerDNS в Debian 10
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 CONSTRAINTrecords_domain_id_ibfk
FOREIGN KEY (domain_id
) REFERENCESdomains
(id
) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE comments ADD CONSTRAINTcomments_domain_id_ibfk
FOREIGN KEY (domain_id
) REFERENCESdomains
(id
) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE domainmetadata ADD CONSTRAINTdomainmetadata_domain_id_ibfk
FOREIGN KEY (domain_id
) REFERENCESdomains
(id
) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE cryptokeys ADD CONSTRAINTcryptokeys_domain_id_ibfk
FOREIGN KEY (domain_id
) REFERENCESdomains
(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.
Вам также может понравится
В Docker, как правило, работа с сетью не представляет из себя больших сложностей - она неплохо работает и по умолчанию. Но, как и в подавляющем большинстве случаев, полезно понимать, как все устроено «под капотом».
Разбираемся с сетью в Docker
Для начала давайте посмотрим, как настроена сетевая модель Docker по умолчанию. То есть, когда вы...
Автор - Юрий Изоркин
В предыдущей статье мы настроили управление одной удаленной системой с помощью утилиты nixops. Давайте теперь попробуем более сложный вариант — поднимем еще 3 удаленные системы и настроим кластер MariaDB Galera.
Установка удаленных систем
Устанавливаем на 3 удаленных системах OC NixOS с такой конфигурацией (используется...