Перейти к основному контенту

DNSmanager. Работа с API

intro-DNSmanager-API-planetahost.png

Введение

В работе с инфраструктурой часто возникает необходимость автоматизации DNS-записей.

Пользователи регулярно используют API для:

  • автоматического выпуска SSL-сертификатов (включая DNS-01 challenge для Let's Encrypt)
  • настройки балансировщиков нагрузки
  • управления поддоменами и сервисами

Для этих задач в панели DNSmanager реализован полноценный HTTP API, позволяющий управлять DNS-записями программно.

Инструкция

Получение реквизитов

Для работы с API необходимо сначала подключить услугу DNS-хостинг (если она ещё не активирована).

Услуга доступна для заказа, если у Вас есть активные сервера или находится у нас домен.

изображение.png

После создания услуги выберите ее и нажмите сверху кнопку Изменить. Откроется окно, где Вы сможете найти логин и пароль от DNSmanager.

изображение.png

Описание команд

В командах используются реквизиты LOGIN:PASSWORD и домен tex-lab.ru. Вам надо заменить их на свои.

Далее разберем команды для добавления, редактирования и удаления записей.

Создание TXT записи:

https://dns1.planetahost.ru/dnsmgr?func=domain.record.edit&authinfo=LOGIN:PASSWORD&out=json&plid=tex-lab.ru&name=_acme-challenge&rtype=txt&value=hello&sok=ok

Параметры:

  • plid - домен (зона)
  • name - имя записи
  • rtype - тип записи (TXT, A, CNAME и т.д.)
  • value - значение записи

Получение списка записей

https://dns1.planetahost.ru/dnsmgr?authinfo=LOGIN:PASSWORD&out=json&func=domain.record&elid=tex-lab.ru

Используется для:

  • получения всех DNS записей зоны
  • получения rkey для удаления

Удаление DNS записи

https://dns1.planetahost.ru/dnsmgr?func=domain.record.delete&authinfo=LOGIN:PASSWORD&out=json&plid=tex-lab.ru&elid=_acme-challenge.tex-lab.ru.%20TXT%20%20hello&sok=ok

Важно: elid - это идентификатор записи (rkey) включает имя, тип и значение. Его мы получили выше.

Обновление DNS записи

https://dns1.planetahost.ru/dnsmgr?func=domain.record.edit&authinfo=LOGIN:PASSWORD&out=json&plid=tex-lab.ru&elid=_acme-challenge.tex-lab.ru.%20TXT%20%20hello&value=NEW_TOKEN&sok=ok

Особенность:

  • обновление работает через тот же elid
  • позволяет менять значение записи без удаления

Практический пример

На базе этого API можно полностью автоматизировать выпуск SSL-сертификатов через DNS-01 challenge.

Для этого используется готовый интеграционный скрипт для acme.sh.

Установка ACME

curl https://get.acme.sh | sh -s email=you@example.com

Поменяйте email на свой

Перезагрузка shell (важно)

source ~/.bashrc

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

acme.sh --version

Создайте скрипт в каталоге DNS-плагинов:

nano ~/.acme.sh/dnsapi/dns_dnsmanager.sh

Код скрипта:

#!/usr/bin/env bash

API="https://dns1.planetahost.ru/dnsmgr"
AUTH="LOGIN:PASSWORD"
DOMAIN="tex-lab.ru"

log() {
  echo "[DNSmanager] $1"
}

urlencode() {
python3 - <<EOF
import urllib.parse
print(urllib.parse.quote("$1"))
EOF
}

# =========================
# Добавление записей (ACME)
# =========================
dns_dnsmanager_add() {

  fulldomain=$1
  txtvalue=$2

  log "Добавляем TXT для LE: $fulldomain -> $txtvalue"

  curl -s -k \
  "$API?func=domain.record.edit&authinfo=$AUTH&out=json&plid=$DOMAIN&name=_acme-challenge&rtype=txt&value=$txtvalue&sok=ok" \
  >/dev/null 2>&1

  if [ $? -ne 0 ]; then
    log "ERROR: не удалось добавить TXT запись"
    return 1
  fi

  log "TXT запись добавлена"
}

# =========================
# Удаление записей (ACME)
# =========================
dns_dnsmanager_rm() {

  fulldomain=$1
  txtvalue=$2

  log "Удаляем TXT после проверки LE: $txtvalue"

  RKEY="_acme-challenge.$DOMAIN. TXT  $txtvalue"

  RKEY_URL=$(urlencode "$RKEY")

  curl -s -k \
  "$API?func=domain.record.delete&authinfo=$AUTH&out=json&plid=$DOMAIN&elid=$RKEY_URL&sok=ok" \
  >/dev/null 2>&1

  if [ $? -ne 0 ]; then
    log "ERROR: не удалось удалить TXT запись"
    return 1
  fi

  log "TXT запись удалена"
}

Сделать скрипт исполняемым:

chmod +x ~/.acme.sh/dnsapi/dns_dnsmanager.sh

Запускаем ACME с нашим скриптом:

acme.sh --issue -d tex-lab.ru -d '*.tex-lab.ru' --dns dns_dnsmanager

изображение.png

Скрипт отработает и выпустит сертификат:

изображение.png

Далее его можно скачать и использовать.

Заключение

В рамках данной инструкции был рассмотрен способ управления DNS-зоной через API, позволяющий автоматизировать ключевые инфраструктурные задачи: выпуск SSL-сертификатов (включая DNS-01 проверку для Let's Encrypt), управление записями домена и интеграцию с внешними системами автоматизации.

Наш DNS работает на решениях от ISP, если Вы не нашли ответ на свой вопрос по API, то можете заглянуть к ним:

DNSmanager API

Взаимодействие через API