Документация VMmanager 6 (администратор)

Интеграция с PowerDNS

ISPSystem

Для работы некоторых интернет-сервисов (например, отправки электронной почты) на виртуальных машинах (ВМ) необходимо преобразование IP-адресов в доменные имена. Чтобы это преобразование выполнялось, нужно настроить интеграцию VMmanager c DNS-сервером.

VMmanager поддерживает интеграцию с PowerDNS. PowerDNS — это высокопроизводительный бесплатный DNS-сервер с открытым исходным кодом. Подробнее о PowerDNS см. в официальной документации.

После интеграции на DNS-сервере будут созданы PTR-записи, преобразующие адреса ВМ в доменные имена.

Соответствие 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

Обратите внимание!

  1. В примеры указаны команды для ОС AlmaLinux 8. Для других ОС команды могут отличаться.
  2. В базовой конфигурации PowerDNS использует BIND в качестве источника данных (backend). BIND не поддерживает выполнение API-запросов на запись по HTTP, поэтому не подходит для настройки интеграции. В примере описана смена источника на Generic Mysql. Подробнее см. в официальной документации PowerDNS.

На сервере для PowerDNS:

  1. Добавьте репозиторий epel-release:

    dnf -y install epel-release
  2. Установите обновления ПО:

    dnf -y update
  3. Установите MySQL:

    dnf -y install mysql-server mysql
    systemctl enable mysqld.service
    systemctl start mysqld.service
  4. Выполните начальную настройку безопасности MySQL:

    mysql_secure_installation
  5. Откройте консоль MySQL:

    mysql -u root -p
  6. Создайте в консоли базу данных и учётную запись powernds:

    CREATE DATABASE powerdns;
    CREATE USER 'powerdns' IDENTIFIED BY '<powernds_mysql_pass>';

    <powernds_mysql_pass> — пароль к учётной записи powerdns в MySQL

    GRANT ALL PRIVILEGES ON powerdns.* TO 'powerdns';
    FLUSH PRIVILEGES;
  7. Выйдите из консоли:

    exit
  8. Импортируйте схему для источника данных:
    1. Сохраните схему из документации PowerDNS в файл /root/powerdns.sql.

      Обратите внимание!

      Каждой версии PowerDNS соответствует своя схема.

    2. Импортируйте сохранённый файл в базу данных:

      mysql -u powerdns -p <powernds_mysql_pass> < /root/powerdns.sql

      <powernds_mysql_pass> — пароль к учётной записи powerdns в MySQL

  9. Если служба systemd-resolved включена, остановите и отключите её:

    systemctl disable systemd-resolved.service
    systemctl stop systemd-resolved.service
    systemctl mask systemd-resolved.service
  10. Установите PowerDNS:

    dnf -y install pdns pdns-backend-mysql bind-utils
    systemctl enable pdns.service
    systemctl start pdns.service
  11. Создайте конфигурационный файл /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>
    Конфигурация для вторичного 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

    <pdns_api_key> — ключ доступа к API PowerDNS. Минимальная длина — 6 символов

    <pdns_port> — порт доступа к встроенному веб-серверу PowerDNS

    <powernds_mysql_pass> — пароль к учётной записи powerdns в MySQL

    <transfer_zone_allow> — IP-адреса DNS-серверов, которым разрешено запрашивать трансфер доменных зон

  12. Откройте порты DNS и веб-сервера PowerDNS в файрволе:

    firewall-cmd --permanent --zone=public --add-port=8081/tcp

    <pdns_port> — порт доступа к встроенному веб-серверу PowerDNS

    firewall-cmd --permanent --zone=public --add-service=dns
    firewall-cmd --reload
  13. Если PowerDNS используется в качестве вторичного DNS, добавьте доменные зоны:

    pdnsutil create-slave-zone <zone> <primary_dns>

    <zone> — доменная зона

    <primary_dns> — IP-адрес основного DNS-сервера

  14. Перезапустите PowerDNS:

    systemctl restart pdns.service

Настройка VMmanager через интерфейс

На сервере с VMmanager:

  1. Установите модуль "Интеграция с PowerDNS": МодулиИнтеграция с PowerDNSУстановить.

  2. Нажмите Настроить и укажите настройки подключения к PowerDNS:
    1. Доменное имя или IP-адрес.

    2. Порт подключения.

    3. Ключ API.

    4. Серверы имен.

  3. Нажмите Применить.

Обратите внимание!

Если у вас настроена интеграция с платформой DCImanager через модуль "Интеграция с IPmanager 6", установите в DCImanager модуль "Интеграция с PowerDNS" с аналогичными настройками. Подробнее об установке см. в статье Модуль "Интеграция с PowerDNS" документации DCImanager.

Настройка VMmanager через API

  1. Передайте в VMmanager данные для подключения к API PowerDNS:
curl -d '{"type":"powerdns", "params":{"address":"<pdns_ip>:<pdns_port>", "password":"<pdns_api_key>"}}' -H "x-xsrf-token: <token>" -H "Host: instance-1" https://<vmmgr_ip>/dnsproxy/v3/settings/dns

<pdns_ip>:<pdns_port> — IP-адрес и порт PowerDNS

<pdns_api_key> — ключ доступа к API PowerDNS

<token> — токен авторизации. Подробнее см. Как работать с API VMmanager

<vmmgr_ip> — IP-адрес или доменное имя сервера с VMmanager

Если в ответ вы получили сообщение "Instance is starting now", повторите команду.

2. Включите сервис dnsproxy на сервере с VMmanager. Этот сервис выполняет интеграцию с внешними DNS-серверами

curl -X POST -H "x-xsrf-token: <token>" https://<vmmgr_ip>/ip/v3/plugin/dnsproxy/enable

<token> — токен авторизации

<vmmgr_ip> — IP-адрес или доменное имя сервера с VMmanager

3. Запустите синхронизацию данных с dnsproxy. После этого сервис dnsproxy передаст PTR-записи в PowerDNS:

curl -X POST -H "x-xsrf-token: <token>" https://<vmmgr_ip>/ip/v3/ip/dnsproxy/sync

<token> — токен авторизации

<vmmgr_ip> — IP-адрес или доменное имя сервера с VMmanager

Проверка настроек

  1. Проверьте, что 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

<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."
}]

2. Проверьте создание 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.

<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."
}

3. Проверьте работу PowerDNS:

dig -x <IP> @<pdns_ip> +short

<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.

Чтобы проверить настройки DNS-зон в VMmanager, выполните на сервере с VMmanager команду:

docker exec -it mysql bash -c "mysql isp -p\$MYSQL_ROOT_PASSWORD -e '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 команду:

docker exec -it mysql bash -c "mysql isp -p\$MYSQL_ROOT_PASSWORD -e '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 означает, что запись добавлена успешно.

При возникновении проблем с настройкой интеграции:

  1. Отключите сервис dnsproxy:

    curl -X POST -H "x-xsrf-token: <token>" https://<vmmgr_ip>/ip/v3/plugin/dnsproxy/disable

    <token> — токен авторизации

    <vmmgr_ip> — IP-адрес или доменное имя сервера с VMmanager

  2. Удалите содержимое таблиц dns_proxy_record и dns_proxy_zone:

    docker exec -it mysql bash -c "mysql isp -p\$MYSQL_ROOT_PASSWORD -e 'delete from dns_proxy_record; delete from dns_proxy_zone;' "
  3. Настройте интеграцию повторно.
Спасибо за ваш отзыв!
Была ли полезна статья?
Уточните, почему:

статья не соответствует названию

статью сложно понять

в статье нет ответа на мой вопрос

рекомендации из статьи не помогли

другая причина

Расскажите, что вам не понравилось в статье: