Поддерживаемые типы DNS-записей и ограничения
При работе с REST API для управления DNS-записями следует учитывать, какие типы записей поддерживаются и какие существуют ограничения.
Поддерживаемые типы DNS-записей
Типы DNS-записей с номерами в соответствии с IANA и информация об уровне поддержки операций по управлению ими в API:
| Тип | Номер | Поддержка | Описание |
|---|---|---|---|
|
1 |
✅ CRUD |
IPv4-адрес узла |
|
28 |
✅ CRUD |
IPv6-адрес узла |
|
2 |
✅ CRUD |
DNS-сервер, обслуживающий зону |
|
5 |
✅ CRUD |
Псевдоним для другого DNS-имени |
|
12 |
✅ CRUD |
Имя целевого узла для обратного сопоставления IP-адреса с DNS-именем |
|
15 |
✅ CRUD |
Почтовый сервер домена с приоритетом |
|
16 |
✅ CRUD |
Произвольные текстовые данные (SPF, DKIM и т. д.) |
|
33 |
✅ CRUD |
Адрес и порт сервиса с приоритетом и весом |
|
6 |
⚠️ Только чтение |
Служебные параметры DNS-зоны и сведения об основном сервере; управляется автоматически сервером |
|
49 |
🔒 Только чтение и удаление |
Идентификатор DHCP-клиента для динамически созданной DNS-записи (RFC 4701) |
Описание обозначений уровня поддержки:
-
« ✅ CRUD» — API позволяет создавать, читать, обновлять и удалять запись;
-
« ⚠️ Только чтение и обновление» — запись создается автоматически при создании зоны; API позволяет читать и обновлять запись;
-
« 🔒 Только чтение и удаление» — запись создается DHCP-сервером через DNS dynamic update (RFC 2136); API позволяет читать и удалять stale-записи.
Формат поля RDATA
Для всех типов DNS-записей поле rdata в запросах и ответах содержит строку в формате zone-file:
| Тип | Формат RDATA | Пример |
|---|---|---|
|
IPv4-адрес в десятичной записи с точками |
|
|
IPv6-адрес |
|
|
Полное доменное имя (FQDN); завершающая точка необязательна |
|
|
Полное доменное имя (FQDN) |
|
|
Полное доменное имя (FQDN) |
|
|
|
|
|
Одна или несколько текстовых строк в кавычках |
|
|
|
|
|
|
|
|
Данные в кодировке Base64 |
|
Особенности работы с DHCID-записями (тип 49, RFC 4701)
DHCID-записи используются DHCP-серверами для защиты от конфликтов имен при динамических обновлениях DNS (RFC 4701). Содержат хеш DUID или DHCP-client-identifier, связывающий имя хоста с конкретным DHCP-клиентом.
Формат поля RDATA
В случае DHCID-записи поле RDATA содержит бинарные данные в формате RFC 4701:
| Offset | Размер | Поле | Значения |
|---|---|---|---|
0 |
2 байта |
Identifier type |
|
2 |
1 байт |
Digest type |
|
3 |
N байт |
Digest |
20 байт (SHA-1) или 32 байта (SHA-256) |
В API поле rdata содержит данные в кодировке Base64 (только бинарный payload согласно RFC 4701, без 24-байтового LDAP-заголовка dnsRecord).
Ограничения API
Жизненным циклом DHCID-записей управляет DHCP-сервер (Windows DHCP, ISC DHCP, Kea, Samba DHCP) через DNS dynamic update (RFC 2136), поэтому API не используется для их создания и обновления.
Для работы с DHCID-записями с помощью API доступен ограниченный набор операций:
| Операция | Поддержка | Комментарий |
|---|---|---|
|
✅ |
Чтение существующих записей |
|
✅ |
Удаление stale-записей |
|
❌ |
Возвращает |
|
❌ |
Возвращает |
Примеры запросов
Чтение
Запрос:
GET /api/v1/dns/zone/f1.dom/records?name=testdhcid&type=DHCID
Ответ 200 OK:
{
"name": "testdhcid",
"nameUnicode": "testdhcid",
"type": "DHCID",
"ttl": 3600,
"rdata": "AAIBytvM3e+IVBhVtb+1d02a"
}
Удаление
Запрос:
DELETE /api/v1/dns/zone/f1.dom/record?name=testdhcid&type=DHCID&rdata=AAIBytvM3e+IVBhVtb+1d02a
Ответ: 204 No Content.
Попытка создания (отклоняется)
Запрос:
POST /api/v1/dns/zone/f1.dom/record
Content-Type: application/json
{
"name": "host",
"type": "DHCID",
"ttl": 3600,
"rdata": "AAIBytvM3e+IVBhVtb+1d02a"
}
Ответ 400 Bad Request:
{
"error": "DHCID records cannot be created via API; use DNS dynamic update (RFC 2136) from DHCP server",
"code": 400
}
Альтернативные способы управления DHCID-записями
Для создания DHCID-записей используйте инструменты:
| Инструмент | Команда |
|---|---|
Windows DHCP |
Автоматически при выдаче адреса |
ISC DHCP / Kea |
Через |
Samba DHCP |
автоматически при интеграции с DNS |
|
|
|
|
Обновлено: