Download PDF
Download page Модуль "Интеграция с PowerDNS".
Модуль "Интеграция с PowerDNS"
Начиная с версии 2023.08.1 установка и настройка модуля не поддерживается. Для интеграции с DNS-сервером в платформе используйте модуль "Интеграция с DNSmanager 6".
Если в платформе была настроена интеграция с PowerDNS, интеграция продолжит работу до момента установки модуля "Интеграция с DNSmanager 6".
Для работы некоторых интернет-сервисов (например, отправки электронной почты) на виртуальных машинах (ВМ) необходимо преобразование IP-адресов в доменные имена. Чтобы это преобразование выполнялось, нужно настроить интеграцию VMmanager c DNS-сервером.
VMmanager поддерживает интеграцию с PowerDNS Authoritative Server. PowerDNS — это высокопроизводительный бесплатный DNS-сервер с открытым исходным кодом. Подробнее о PowerDNS см. в официальной документации.
После интеграции на DNS-сервере будут созданы PTR-записи, преобразующие адреса ВМ в доменные имена.
Интеграция обеспечивает передачу:
- PTR-записей;
- NS-записей, если в настройках модуля указаны дополнительные серверы имён.
Передачу записей других типов нужно настраивать вручную.
Соответствие IP-адреса и обратного доменного имени
Для определения доменного имени по IP-адресу на DNS-сервере используется PTR-запись обратной доменной зоны. Для выполнения запроса адрес узла переводится в обратный вид, способ перевода зависит от версии протокола IP.
IPv4
IPv4-адрес записывается в виде четырёх десятичных чисел от 0 до 255, разделённых точками. Например, 192.168.0.1. Для поиска доменных имён по IPv4-адресам используется домен "in-addr.arpa.". IP-адрес записывается в доменном имени в обратном порядке. Например, адресу 195.161.72.28 соответствует доменное имя "28.72.161.195.in-addr.arpa.".
IPv6
IPv6-адрес записывается в виде восьми шестнадцатеричных чисел от 0 до ffff, разделённых двоеточиями. Например, 3107:0c38:0a67:0000:0000:e446:3925:0091. Для поиска доменных имён по IPv6-адресам используется домен "ip6.arpa.". IP-адрес записывается в доменном имени в обратном порядке. Например, адресу 3107:0c38:0a67:0000:0000:e446:3925:0091 соответствует доменное имя "1.9.0.0.5.2.9.3.6.4.4.e.0.0.0.0.0.0.0.0.7.6.a.0.8.3.c.0.7.0.1.3.ip6.arpa.".
Настройка интеграции
Установка и настройка PowerDNS
- В примеры указаны команды для ОС AlmaLinux 8. Для других ОС команды могут отличаться.
- В базовой конфигурации PowerDNS использует BIND в качестве источника данных (backend). BIND не поддерживает выполнение API-запросов на запись по HTTP, поэтому не подходит для настройки интеграции. В примере описана смена источника на Generic Mysql. Подробнее см. в официальной документации PowerDNS.
На сервере для PowerDNS:
Добавьте репозиторий epel-release:
dnf -y install epel-release
BASHУстановите обновления ПО:
dnf -y update
BASHОтключите службу SELinux:
setenforce 0
CODEsed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
CODEУстановите MySQL:
dnf -y install mysql-server mysql
BASHsystemctl enable mysqld.service
BASHsystemctl start mysqld.service
BASHВыполните начальную настройку безопасности MySQL:
mysql_secure_installation
BASHОткройте консоль MySQL:
mysql -u root -p
BASHСоздайте в консоли базу данных (БД) и учётную запись powernds:
CREATE DATABASE powerdns;
SQLCREATE USER 'powerdns' IDENTIFIED BY '<powernds_mysql_pass>';
SQL<powernds_mysql_pass> — пароль к учётной записи powerdns в MySQL
GRANT ALL PRIVILEGES ON powerdns.* TO 'powerdns';
SQLFLUSH PRIVILEGES;
SQLВыйдите из консоли:
exit
SQL- Импортируйте схему для источника данных:
Сохраните схему из документации PowerDNS в файл /root/powerdns.sql.
Каждой версии PowerDNS соответствует своя схема.
Импортируйте сохранённый файл в базу данных:
mysql -u powerdns -p powerdns < /root/powerdns.sql
BASH
Если служба systemd-resolved включена, остановите и отключите её:
systemctl disable systemd-resolved.service
BASHsystemctl stop systemd-resolved.service
BASHsystemctl mask systemd-resolved.service
BASHУстановите PowerDNS:
dnf -y install pdns pdns-backend-mysql bind-utils
BASHsystemctl enable pdns.service
BASHsystemctl start pdns.service
BASHСоздайте конфигурационный файл /etc/pdns/pdns.conf:
Конфигурация для первичного DNS
api=yes api-key=<pdns_api_key> webserver=yes webserver-port=<pdns_port> webserver-address=0.0.0.0 webserver-allow-from=0.0.0.0/0 launch=gmysql gmysql-host=127.0.0.1 gmysql-user=powerdns gmysql-password=<powernds_mysql_pass> gmysql-dbname=powerdns primary=yes allow-axfr-ips=<transfer_zone_allow>
CODEКонфигурация для вторичного DNS
api=yes api-key=<pdns_api_key> webserver=yes webserver-port=<pdns_port> webserver-address=0.0.0.0 webserver-allow-from=0.0.0.0/0 launch=gmysql gmysql-host=127.0.0.1 gmysql-user=powerdns gmysql-password=<powernds_mysql_pass> gmysql-dbname=powerdns secondary=yes
CODE<pdns_api_key> — ключ доступа к API PowerDNS. Минимальная длина — 6 символов
<pdns_port> — порт доступа к встроенному веб-серверу PowerDNS
<powernds_mysql_pass> — пароль к учётной записи powerdns в MySQL
<transfer_zone_allow> — IP-адреса DNS-серверов, которым разрешено запрашивать трансфер доменных зон
Откройте порты DNS и веб-сервера PowerDNS в файрволе:
firewall-cmd --permanent --zone=public --add-port=<pdns_port>/tcp
BASH<pdns_port> — порт доступа к встроенному веб-серверу PowerDNS
firewall-cmd --permanent --zone=public --add-service=dns
BASHfirewall-cmd --reload
BASHЕсли PowerDNS используется в качестве вторичного DNS:
Добавьте доменные зоны:
pdnsutil create-secondary-zone <zone> <primary_dns>
BASH<zone> — доменная зона
<primary_dns> — IP-адрес основного DNS-сервера
Откройте консоль MySQL:
mysql -u root -p
BASHДобавьте в БД запись с настройками основного сервера:
INSERT INTO supermasters VALUES ('<primary_IP>', '<primary_domain>', 'powerdns') ;
SQL<primary_IP> — IP-адрес основного DNS-сервера
<primary_domain> — доменное имя основного DNS-сервера
Выйдите из консоли:
exit
SQLВ файле /etc/pdns/pdns.conf укажите для параметра autosecondary значение yes:
autosecondary=yes
CODE
Перезапустите PowerDNS:
systemctl restart pdns.service
BASH
Настройка VMmanager
Начиная с версии 2023.08.1 настройка возможна только через API платформы.
Передайте в VMmanager данные для подключения к API PowerDNS:
curl -d '{"type":"powerdns", "params":{"address":"<pdns_ip>:<pdns_port>", "password":"<pdns_api_key>"}, "nameservers":["<ns1>","<ns2>"]}' -H "x-xsrf-token: <token>" -H "Host: instance-1" https://<vmmgr_ip>/dnsproxy/v3/settings/dns
CODE<pdns_ip>:<pdns_port> — IP-адрес и порт PowerDNS
<pdns_api_key> — ключ доступа к API PowerDNS
<token> — токен авторизации. Подробнее см. Как работать с API VMmanager
<vmmgr_ip> — IP-адрес или доменное имя сервера с VMmanager
<ns1>, <ns2> — IP-адреса или доменные имена NS
Если в ответ вы получили сообщение "Instance is starting now", повторите команду.
Включите сервис dnsproxy на сервере с VMmanager. Этот сервис выполняет интеграцию с внешними DNS-серверами.
curl -X POST -H "x-xsrf-token: <token>" https://<vmmgr_ip>/ip/v3/plugin/dnsproxy/enable
CODE<token> — токен авторизации
<vmmgr_ip> — IP-адрес или доменное имя сервера с VMmanager
Запустите синхронизацию данных с dnsproxy. После этого сервис dnsproxy передаст PTR-записи в PowerDNS:
curl -X POST -H "x-xsrf-token: <token>" https://<vmmgr_ip>/ip/v3/ip/dnsproxy/sync
CODE<token> — токен авторизации
<vmmgr_ip> — IP-адрес или доменное имя сервера с VMmanager
Проверка настроек
Проверьте, что DNS-зоны ip6.arpa. и in-addr.arpa. добавлены в PowerDNS:
curl -v -H 'X-API-Key: <pdns_api_key>' http://<pdns_ip>:<pdns_port>/api/v1/servers/localhost/zones
CODE<pdns_api_key> — ключ доступа к API PowerDNS
<pdns_ip>:<pdns_port> — IP-адрес и порт PowerDNS
[{ "account": "", "dnssec": false, "id": "ip6.arpa.", "kind": "Master", "last_check": 0, "masters": [], "name": "ip6.arpa.", "notified_serial": 0, "serial": 2020032801, "url": "/api/v1/servers/localhost/zones/ip6.arpa." }, { "account": "", "dnssec": false, "id": "in-addr.arpa.", "kind": "Master", "last_check": 0, "masters": [], "name": "in-addr.arpa.", "notified_serial": 0, "serial": 2020032812, "url": "/api/v1/servers/localhost/zones/in-addr.arpa." }]
CODEПроверьте создание DNS-записей в зонах ip6.arpa. и in-addr.arpa.:
curl -v -H 'X-API-Key: <pdns_api_key>' http://<pdns_ip>:<pdns_port>/api/v1/servers/localhost/zones/in-addr.arpa.
CODEcurl -v -H 'X-API-Key: <pdns_api_key>' http://<pdns_ip>:<pdns_port>/api/v1/servers/localhost/zones/ip6.arpa.
CODE<pdns_api_key> — ключ доступа к API PowerDNS
<pdns_ip>:<pdns_port> — IP-адрес и порт PowerDNS
Ответ должен содержать PTR-записи для IP-адресов ВМ.
{ "account": "", "api_rectify": false, "dnssec": false, "id": "in-addr.arpa.", "kind": "Master", "last_check": 0, "masters": [], "name": "in-addr.arpa.", "notified_serial": 0, "nsec3narrow": false, "nsec3param": "", "rrsets": [ { "comments": [], "name": "14.250.31.172.in-addr.arpa.", "records": [ { "content": "sunshine-ametrine.example.com.", "disabled": false } ], "ttl": 3600, "type": "PTR" }, { "comments": [], "name": "0.250.31.172.in-addr.arpa.", "records": [ { "content": "subnet.reserved.example.com.", "disabled": false } ], "ttl": 3600, "type": "PTR" }, ... ], "serial": 2020032717, "soa_edit": "", "soa_edit_api": "DEFAULT", "url": "/api/v1/servers/localhost/zones/in-addr.arpa." }
CODEПроверьте работу PowerDNS:
dig -x <IP> @<pdns_ip> +short
CODE<IP> — IP-адрес ВМ
<pdns_ip> — IP-адрес PowerDNS
Ответ должен содержать информацию о PTR-записи для запрашиваемого IP-адреса.
Диагностика
Интеграцию VMmanager с PowerDNS выполняет сервис dnsproxy. Вы можете проверить работу сервиса dnsproxy по лог-файлу /var/log/dns_proxy_service_1_writer.log в докер-контейнере vm_dns_proxy_1 на сервере с VMmanager.
В связи с поэтапным переходом платформы на использование СУБД PostgreSQL, разные экземпляры VMmanager могут использовать разные СУБД:
- VMmanager Hosting — MySQL;
- VMmanager Infrastructure:
- для новых установок на ОС Astra Linux, начиная с версии VMmanager 2023.06.1 — PostgreSQL;
- в остальных случаях — MySQL.
Чтобы определить тип СУБД, выполните на сервере с платформой команду:
docker ps --filter name=pgsql
Пример ответа
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3213c5dc94d0 postgres:12 "docker-entrypoint.s…" 5 days ago Up 4 days 5432/tcp pgsql
Если вывод команды содержит информацию о контейнере, платформа использует PostgreSQL, если ответ пустой — MySQL.
Чтобы проверить настройки DNS-зон в VMmanager, выполните на сервере с VMmanager команду:
MySQL
docker exec -it mysql bash -c "mysql isp -p\$MYSQL_ROOT_PASSWORD -e 'select * from dns_proxy_zone;' "
PostgreSQL
docker exec -it pgsql bash -c "psql -d isp -c 'select * from dns_proxy_zone;' "
Пример ответа
*************************** 1. row ***************************
id: 1
status: ok
status_info: null
name: in-addr.arpa
*************************** 2. row ***************************
id: 2
status: ok
status_info: null
name: ip6.arpa
2 rows in set (0.00 sec)
status_info — информация о статусе DNS-зоны. Сообщение null означает, что зона добавлена успешно.
Чтобы проверить настройки DNS-записей в VMmanager, выполните на сервере с VMmanager команду:
MySQL
docker exec -it mysql bash -c "mysql isp -p\$MYSQL_ROOT_PASSWORD -e 'select * from dns_proxy_record;' "
PostgreSQL
docker exec -it pgsql bash -c "psql -d isp -c 'select * from dns_proxy_record;' "
Пример вывода команды:
Пример ответа
*************************** 1. row ***************************
id: 1
status: ok
status_info: null
zone: 1
name: 172.31.255.254
content: gateway.reserved.example.com
type: ptr
*************************** 2. row ***************************
id: 2
status: ok
status_info: null
zone: 1
name: 172.31.240.0
content: subnet.reserved.example.com
type: ptr
status_info — информация о статусе DNS-записи. Сообщение null означает, что запись добавлена успешно.
При возникновении проблем с настройкой интеграции:
Отключите сервис dnsproxy:
curl -X POST -H "x-xsrf-token: <token>" https://<vmmgr_ip>/ip/v3/plugin/dnsproxy/disable
CODE<token> — токен авторизации
<vmmgr_ip> — IP-адрес или доменное имя сервера с VMmanager
Удалите содержимое таблиц dns_proxy_record и dns_proxy_zone:
MySQL
docker exec -it mysql bash -c "mysql isp -p\$MYSQL_ROOT_PASSWORD -e 'delete from dns_proxy_record; delete from dns_proxy_zone;' "
BASHPostgreSQL
docker exec -it pgsql bash -c "psql -d isp -c 'delete from dns_proxy_record; delete from dns_proxy_zone;' "
BASH- Настройте интеграцию повторно.