SRV-запись (Service Record) — тип DNS-записи, которая описывает местонахождение сервера для конкретного протокола и сервиса. В отличие от A-записи (IP-адрес) или MX-записи (почтовый сервер), SRV хранит не только адрес, но и порт, приоритет и вес — позволяя клиенту автоматически найти нужный сервис без жёсткой привязки к конкретному хосту.
Как работает SRV-запись
Формат SRV-записи по RFC 2782: _service._proto.name. TTL class SRV priority weight port target. Пример: _sip._tcp.example.com. 86400 IN SRV 10 60 5060 sip.example.com. — SIP-сервер для домена example.com, порт 5060, приоритет 10, вес 60. Клиент (SIP-телефон, мессенджер, браузер) делает DNS-запрос типа SRV, получает адрес и порт — ручная настройка пользователем не требуется.
Параметр Priority работает как в MX-записи: меньше число — выше приоритет. Сначала пробуется сервер с наименьшим Priority. Weight используется для балансировки нагрузки между серверами с одинаковым приоритетом: сервер с weight 60 получит ~60% запросов, сервер с weight 40 — ~40%. Если target равен «.» — сервис для этого домена недоступен (RFC 2782 §4). При нескольких SRV с одинаковым приоритетом выбор с учётом weight происходит случайным образом, взвешенно.
Важное ограничение: target SRV-записи не может быть CNAME — только A или AAAA. Это прямое требование RFC 2782. Часть DNS-серверов раньше позволяла такую конфигурацию, но поведение было непредсказуемым.
Типичные применения SRV
- XMPP/Jabber — клиент ищет сервер через
_xmpp-client._tcp.domainи_xmpp-server._tcp.domain. - SIP — VoIP-телефония:
_sip._tcpи_sip._udp, порт 5060 (незашифрованный) или 5061 (TLS). - Microsoft Active Directory — целиком полагается на SRV для обнаружения контроллеров домена:
_ldap._tcp.dc._msdcs.domain.com.Без SRK Active Directory не работает. - Kubernetes — kube-dns создаёт SRV-записи для сервисов вида
_http._tcp.service.namespace.svc.cluster.local. - Minecraft — клиент использует SRV
_minecraft._tcp.example.comдля подключения на нестандартный порт без указания порта пользователем. - CalDAV / CardDAV — стандарт RFC 6764 требует SRV для autodiscovery серверов календарей и контактов: iOS и Android ищут
_caldavs._tcpи_carddavs._tcp.
История
SRV-запись стандартизирована в RFC 2052 (1996), обновлена в RFC 2782 (2000) Аресом Гулбрандсеном и Полом Викси. Создана для решения задачи autodiscovery клиентов: до SRV пользователям приходилось вручную указывать адреса серверов. К середине 2000-х SRV стала обязательной для XMPP (Jabber), а затем для Kerberos и SIP. Active Directory с Windows 2000 (2000 год) целиком полагается на SRV. В 2013 году IETF предложил расширенный аналог — DNS-SD (Service Discovery, RFC 6763) поверх multicast DNS (mDNS), используемый в Apple Bonjour.
На что обращать внимание
SRV-запись используется реже, чем A или MX, поэтому не все панели управления DNS удобно её редактируют. При настройке Minecraft-сервера или корпоративного XMPP уточните, поддерживает ли провайдер создание SRV. Cloudflare, AWS Route 53, Hetzner DNS — поддерживают. Некоторые хостинги с собственными NS-серверами — нет. Проверить SRV: dig SRV _service._tcp.example.com или MXToolbox SRV Lookup. В Windows: nslookup -type=SRV _ldap._tcp.dc._msdcs.domain.com.
При использовании балансировки через несколько SRV-записей с разным весом убедитесь, что backend-серверы обрабатывают примерно равный объём запросов. Нулевой вес (weight=0) — сервер получит запросы только если все серверы с ненулевым весом недоступны.