Управление доменами с Selectel DNS API

В сегодняшней статье мы хотели бы поговорить об услуге, о которой ранее почти ничего не писали. Речь идёт о DNS-хостинге. Зарегистрировав домены в любой сторонней компании (мы услуг по регистрации доменов не оказываем), клиенты могут разместить их на наших NS-серверах совершенно бесплатно.
Наши NS-серверы расположены в Санкт-Петербурге, Москве, Екатеринбурге, Новосибирске, Нью-Йорке, Пало-Альто, Лондоне, Амстердаме и Франкфурте.

Актуальная ссылка на DNS API в Selectel.

Для повышения уровня надёжности и отказоустойчивости системы внедрена технология Anycast (подробнее об этом см. здесь).

Через нашу панель управления можно добавлять и удалять домены, а также добавлять и редактировать записи различных типов.

Сегодня мы представляем вам тестовую версию нашего DNS API для автоматизации работы с доменами и обновления информации о них на наших NS-серверах.

Возможности API

В настоящее время с помощью API можно осуществлять следующие операции:

  • добавление, изменение и удаление доменов;
  • добавление и редактирование ресурсных записей SRV, MX, CNAME, TXT, A, AAAA, NS, SPF (этот тип записей оставлен для совместимости, но к использованию не рекомендуется — см. RFC 7208) PTR (запись SOA создаётся автоматически при добавлении домена, значения MINIMUM и EXPIRE будет равны 86400 и 604800 соответственно);
  • добавление и редактирование обратных записей для IP-адресов;
  • пометка доменов тэгами.

Приступая к работе

Прежде чем начинать работу с API, нужно получить ключ здесь (для этого нужно перейти по указанной ссылке, далее всё просто и интуитивно понятно). Сам API расположен по адресу: https://api.selectel.ru/domains/v1/. Для авторизации ко всем запросам необходимо добавлять заголовок X-Token со значением ранее полученного ключа, например:

curl -H 'X-Token: ' https://api.selectel.ru/domains/v1/

API возвращает результат в формате JSON. В ответ на запросы на изменение, создание и обновление домена возвращается модель объекта, например:

{
	"user_id": 1,
	"name": "selectel.org",
 	"tags": [],
  	"change_date": null,
  	"create_date": 1427473275,
  	"id": 1
  }

В ответ на запрос об удалении домена будет возвращен ответ с кодом 204 (No Content). В случае ошибки при выполнении запроса будет возвращено её описание в следующем формате:

{
	“error”: “описание ошибки”,
	“code”: 400-599,
	“field”: “в каком поле была допущена ошибка”
}

Основные операции

В рамках этой статьи мы приводим лишь краткое описание операций, которые можно выполнять с помощью нашего API. Прочитать более подробное описание, а также выполнить типовые запросы можно на нашей тестовой площадке (страница сгенерирована с помощью популярного инструмента Swagger). Все адреса в описании запросов указаны относительно https://api.selectel.ru/domains/v1/.

Все данные в запросах передаются и возвращаются в формате JSON.

Операции с доменами

Добавление нового домена POST / Добавляет новый домен; в запросе необходимо передать имя нового домена и содержимое файла BIND-зоны (опционально).

ОперацияЗапросОписание
Получение списка доменовGET /Возвращает список доменов
Просмотр информации о доменеGET /{domain_id}Возвращает сведения об указанном домене (имя, дата создания, дата изменения, тэги, идентификатор пользователя).
Обновление доменаPATCH /{domain_id}Под обновлением домена понимается присвоение ему тэга. В запросе нужно передать идентификационный номер домена и идентификационные номера тэгов, которыми требуется отметить этот домен. Возвращает информацию об обновленном домене (имя, дата создания, дата изменения, тэги, идентификатор пользователя).
Удаление доменаDELETE /{domain_id}Удаляет указанный домен; в случае успешного удаления будет возвращён ответ с кодом 204 (No Content).

Операции с ресурсными записями

Обновление записи PUT /{domain_id}/records/{record_id} изменяет параметры существующей ресурсной записи. В запросе нужно обязательно передать идентификационный номер номер записи, ее имя и тип. Для каждого типа записей в запрос включаются также индивидуальные параметры (подробнее см. на тестовой странице API).

ОперацияЗапросОписание
Получение списка ресурсных записей для указанного доменаGET /{domain_id}/records/Возвращает сведения о ресурсных записях для указанного домена (идентификатор записи, имя, тип, время жизни, дату создания, дату изменения).
Обновление ресурсной записиPUT /{domain_id}/records/{record_id}Под обновлением записи понимается изменение её параметров. В запросе обязательно нужно передать идентификационный номер домена, имя записи, её идентификационный номер и тип. Для каждого типа записей в запрос включаются также индивидуальные параметры (подробнее см. на тестовой странице API).
Удаление ресурсной записиDELETE /{domain_id}/records/{record_id}Удаляет указанную ресурсную запись; в случае успешного удаления будет возвращён ответ с кодом 204 (No Content).

Операции с обратными записями

Добавление новой ресурсной записи PUT /ptr Возвращает информацию обо всех имеющихся обратных записях (идентификатор записи, обратный адрес, имя домена, идентификатор пользователя), включая новую.

ОперацияЗапросОписание
Получение списка обратных записей для указанного доменаGET /{domain_id}/ptr/Возвращает сведения обратных записях для указанного домена (идентификатор записи, имя, тип, время жизни, дату создания, дату изменения).
Просмотр информации о обратной записиGET /ptr/{ptr_id}Возвращает информацию об указанной обратной записи (идентификатор записи, обратный адрес, имя домена, идентификатор пользователя).
Обновление обратной записиPUT /ptr/{ptr_id}Под обновлением обратной записи понимается изменение её параметров. В запросе нужно передать идентификационный номер записи, IP-адрес и имя домена.
Удаление ресурсной записиDELETE /ptr/{ptr_id}Удаляет указанную обратную запись; в случае успешного удаления будет возвращён ответ с кодом 204 (No Content).

Операции с тэгами

Многие из наших клиентов размещают у нас сотни и даже тысячи доменов. Чтобы упростить управление таким большим количеством доменов, в нашем API предусмотрена возможность добавления тэгов. С помощью тэгов можно структурировать список имеющихся доменов, разбив его на группы. Это позволяет ускорить поиск нужного домена, а также автоматизировать массовые операции с доменами. Основные операции с тэгами описаны в таблице ниже.

ОперацияЗапросОписание
Получение списка тэгов для указанного доменаGET /tags/Возвращает список тэгов, содержащий имена и идентификаторы тэгов, а также список отмеченных тэгами доменов.
Получение списка доменов по тэгуGET /tags/{tag_id}Возвращает список доменов, отмеченных указанным тэгом
Добавление нового тэгаPOST /tags/Возвращает созданный тэг.
Обновление тэгаPUT /tags/{tag_id}Под обновлением тэга понимается изменение его имени. В запросе нужно передать идентификационный номер тэга и его новое имя.
Удаление тэгаDELETE /tags/{tag_id}Удаляет указанный тэг; в случае успешного удаления будет возвращён ответ с кодом 204 (No Content).

Скрипт для загрузки BIND-зоны

Недавно один из наших клиентов изъявил желание перенести к нам свои домены. Сложность ситуации заключалась в том, что нужно было перенести более
1000 А-записей. Понятно, что делать всё это вручную крайне сложно и неудобно. После долгих обсуждений мы написали скрипт для автоматизации переноса. Cкачать его можно здесь .

Чтобы загрузить BIND-зону, достаточно ввести команду вида:

$ bind_upload.py [-h] --key <key> --name <name> --zone <zone>

В качестве значения параметра −−key указываем ключ доступа к API, параметра −−name — имя домена, который будет добавлен. В параметре −−zone передаём путь к файлу зоны.

Скрипт возвращает информацию о добавленном домене в формате JSON. Если при добавлении какой-либо ресурсной записи возникают ошибки, информация о них будет включена в ответ.

Заключение

Как уже было сказано выше, наш DNS API сейчас функционирует в тестовом режиме. Сообщить обо всех замеченных ошибках, а также высказать пожелания и предложения по улучшению API, можно в комментариях к этому посту. Наиболее интересные идеи мы примем к сведению и постараемся реализовать.

Что еще почитать по теме

T-Rex 30 марта 2021

Что такое SMTP-протокол и как он устроен?

SMTP (Simple Mail Transfer Protocol) — протокол передачи почты. Он был представлен еще в 1982 году, но не теряет актуальности до сих пор. В статье разбираемся, какие задачи решает протокол и как он ра…
T-Rex 30 марта 2021
Владимир Туров 1 сентября 2020

Дело совершенно секретного iPod

Это был обычный серый день в конце 2005 года. Я сидел на рабочем месте и писал код для следующей версии iPod. Вдруг без стука ворвался директор ПО для iPod, начальник моего начальника, и закрыл дверь.
Владимир Туров 1 сентября 2020
T-Rex 21 августа 2020

TrendForce: цены на SSD упадут

Эксперты DRAMeXchange предсказывают значительное падение цен на оперативную память и твердотельные накопители в ближайшее время. Причина — сокращение спроса на чипы для NAND и DRAM.
T-Rex 21 августа 2020

Новое в блоге

Михаил Фомин 24 июня 2022

Docker Swarm VS Kubernetes — как бизнес выбирает оркестраторы

Рассказываем, для каких задач бизнесу больше подойдет Docker Swarm, а когда следует выбрать Kubernetes.
Михаил Фомин 24 июня 2022
Владимир Туров 5 октября 2022

DBaaS: что такое облачные базы данных

Рассказываем о сервисе управляемых баз данных в облаке и объясняем, как разделяется ответственность за работу кластеров БД между провайдером и клиентом.
Владимир Туров 5 октября 2022
Ульяна Малышева 30 сентября 2022

«Нулевой» локальный диск. Как мы запустили облако только с сетевыми дисками и приручили Ceph

Чем хороши сетевые диски и почему именно Ceph, рассказал директор по развитию ядра облачной платформы Иван Романько.
Ульяна Малышева 30 сентября 2022
Валентин Тимофеев 30 сентября 2022

Как проходит онбординг сотрудников ИТО? Что нужно, чтобы выйти на смену в дата-центр

Рассказываем, как обучаем новых сотрудников, какие задачи и испытания проходят инженеры прежде, чем выйти на свою первую смену.
Валентин Тимофеев 30 сентября 2022