Начиная с версии 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
-
Установите обновления ПО:
dnf -y update
-
Отключите службу SELinux:
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
-
Установите MySQL:
dnf -y install mysql-server mysql
systemctl enable mysqld.service
systemctl start mysqld.service
-
Выполните начальную настройку безопасности MySQL:
mysql_secure_installation
-
Откройте консоль MySQL:
mysql -u root -p
-
Создайте в консоли базу данных (БД) и учётную запись powernds:
CREATE DATABASE powerdns;
CREATE USER 'powerdns' IDENTIFIED BY '<powernds_mysql_pass>';
Пояснения к командеGRANT ALL PRIVILEGES ON powerdns.* TO 'powerdns';
FLUSH PRIVILEGES;
-
Выйдите из консоли:
exit
- Импортируйте схему для источника данных:
-
Сохраните схему из документации PowerDNS в файл /root/powerdns.sql.
Каждой версии PowerDNS соответствует своя схема. -
Импортируйте сохранённый файл в базу данных:
mysql -u powerdns -p powerdns < /root/powerdns.sql
-
-
Если служба systemd-resolved включена, остановите и отключите её:
systemctl disable systemd-resolved.service
systemctl stop systemd-resolved.service
systemctl mask systemd-resolved.service
-
Установите PowerDNS:
dnf -y install pdns pdns-backend-mysql bind-utils
systemctl enable pdns.service
systemctl start pdns.service
-
Создайте конфигурационный файл /etc/pdns/pdns.conf:
Конфигурация для первичного DNSapi=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>
Конфигурация для вторичного DNSapi=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
Пояснения -
Откройте порты DNS и веб-сервера PowerDNS в файрволе:
firewall-cmd --permanent --zone=public --add-port=<pdns_port>/tcp
Пояснения к командеfirewall-cmd --permanent --zone=public --add-service=dns
firewall-cmd --reload
-
Если PowerDNS используется в качестве вторичного DNS:
-
Добавьте доменные зоны:
pdnsutil create-secondary-zone <zone> <primary_dns>
Пояснения к команде -
Откройте консоль MySQL:
mysql -u root -p
-
Добавьте в БД запись с настройками основного сервера:
INSERT INTO supermasters VALUES ('<primary_IP>', '<primary_domain>', 'powerdns') ;
Пояснения к команде -
Выйдите из консоли:
exit
-
В файле /etc/pdns/pdns.conf укажите для параметра autosecondary значение yes:
autosecondary=yes
-
-
Перезапустите PowerDNS:
systemctl restart pdns.service
Настройка VMmanager
-
Передайте в 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
Пояснения к командеЕсли в ответ вы получили сообщение "Instance is starting now", повторите команду.
-
Включите сервис dnsproxy на сервере с VMmanager. Этот сервис выполняет интеграцию с внешними DNS-серверами.
curl -X POST -H "x-xsrf-token: <token>" https://<vmmgr_ip>/ip/v3/plugin/dnsproxy/enable
Пояснения к команде -
Запустите синхронизацию данных с dnsproxy. После этого сервис dnsproxy передаст PTR-записи в PowerDNS:
curl -X POST -H "x-xsrf-token: <token>" https://<vmmgr_ip>/ip/v3/ip/dnsproxy/sync
Пояснения к команде
Проверка настроек
-
Проверьте, что 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
Пояснения к командеПример ответа -
Проверьте создание 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.
curl -v -H 'X-API-Key: <pdns_api_key>' http://<pdns_ip>:<pdns_port>/api/v1/servers/localhost/zones/ip6.arpa.
Пояснения к командеОтвет должен содержать PTR-записи для IP-адресов ВМ.
Пример ответа для зоны in-addr.arpa. -
Проверьте работу PowerDNS:
dig -x <IP> @<pdns_ip> +short
Пояснения к командеОтвет должен содержать информацию о 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 команду:
docker exec -it mysql bash -c "mysql isp -p\$MYSQL_ROOT_PASSWORD -e 'select * from dns_proxy_zone;' "
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)
Чтобы проверить настройки DNS-записей в VMmanager, выполните на сервере с VMmanager команду:
docker exec -it mysql bash -c "mysql isp -p\$MYSQL_ROOT_PASSWORD -e 'select * from dns_proxy_record;' "
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
При возникновении проблем с настройкой интеграции:
-
Отключите сервис dnsproxy:
curl -X POST -H "x-xsrf-token: <token>" https://<vmmgr_ip>/ip/v3/plugin/dnsproxy/disable
Пояснения к команде -
Удалите содержимое таблиц dns_proxy_record и dns_proxy_zone:
MySQLdocker exec -it mysql bash -c "mysql isp -p\$MYSQL_ROOT_PASSWORD -e 'delete from dns_proxy_record; delete from dns_proxy_zone;' "
PostgreSQLdocker exec -it pgsql bash -c "psql -d isp -c 'delete from dns_proxy_record; delete from dns_proxy_zone;' "
- Настройте интеграцию повторно.