CNAME vs A-запись: разница и когда что использовать
CNAME vs A-запись: разница и когда что использовать
А-запись и CNAME — два самых частых типа DNS Lookup. Их нередко путают, и эта путаница приводит к проблемам: apex-домен отказывается резолвиться, CDN работает не для всех, SSL ломается. В статье — подробное сравнение, ограничения по RFC и конкретные сценарии использования.
Что такое A-запись
A (Address) — запись, связывающая доменное имя с IPv4-адресом. Пример:
example.com. 3600 IN A 93.184.216.34
Для IPv6 используется тип AAAA. A-запись — это «конечная точка» DNS-резолюции.
Что такое CNAME
CNAME (Canonical Name) — алиас: вместо IP указывает на другое доменное имя, которое резолвер должен запросить следующим:
www.example.com. 3600 IN CNAME example.com.
При запросе www.example.com резолвер получает CNAME и затем запрашивает A для example.com.
Ключевые различия
- Назначение
- A — прямое указание на IP. CNAME — псевдоним на другое имя.
- Уровень резолюции
- A — 1 шаг. CNAME — 2+ шагов (возможны цепочки).
- Производительность
- A быстрее, CNAME добавляет лишний запрос (но обычно его результат кэшируется).
- Применимость к apex
- A работает на apex (корне домена). CNAME — нет (по RFC 1034).
- Совместимость с другими записями
- CNAME запрещает другие типы записей с тем же именем. A — совместима с MX, TXT, NS.
Правило RFC 1034: CNAME и apex
По RFC 1034 CNAME не может существовать вместе с другими записями с тем же именем. А у apex-домена (example.com без www) обязательно есть SOA и NS. Значит, CNAME на apex — запрещён.
На практике это значит: example.com с CNAME на myapp.herokuapp.com — ошибка зоны. Вы получите SERVFAIL или неожиданное поведение.
ALIAS / ANAME — решение для apex
Некоторые DNS-провайдеры (Cloudflare, Route 53, DNSimple, NS1) поддерживают виртуальные записи ALIAS / ANAME / CNAME-flattening. Они разрешают «CNAME на apex», но при отдаче клиентам возвращают A-запись, которую DNS-провайдер сам резолвит на своей стороне.
- Cloudflare — CNAME flattening, работает автоматически.
- Route 53 — Alias record, только на AWS-ресурсы.
- DNSimple / NS1 — ALIAS / ANAME.
Когда использовать A
- Apex-домен —
example.com. - Статический IP сайта, который не меняется.
- Когда есть несколько типов записей на одном имени (A + MX + TXT).
- Собственный сервер на выделенном IP.
Когда использовать CNAME
- Поддомены (
www,blog,shop) — особенно если IP может меняться. - CDN (
yourcdn.cloudfront.net,cdn.shopify.com) — CDN часто меняет набор IP. - SaaS-сервисы (Heroku, Vercel, Netlify) — указывают вам CNAME.
- Балансировщики, облачные LB (ELB на AWS).
Проверка A и CNAME
Используйте DNS Lookup или dig:
dig A example.com +short
dig CNAME www.example.com +short
dig +trace www.example.com
Типичные ошибки
CNAME на apex
Получаете SERVFAIL или потерю MX. Решение — ALIAS / A-запись на фиксированный IP.
CNAME-циклы
a.example.com ссылается на b.example.com, тот — обратно на a.example.com. Резолверы ограничивают длину цепочки (обычно 5), возвращая SERVFAIL.
CNAME + MX на одном имени
По RFC 1912 это недопустимо. Часть почтовых серверов откажется доставлять.
Dangling CNAME
Поддомен CNAME на несуществующий домен — NXDOMAIN. Опасно тем, что злоумышленник может зарегистрировать «повешенный» домен и перехватить трафик (subdomain takeover).
Влияние на производительность
CNAME добавляет 1 дополнительный lookup, но он часто происходит параллельно у резолвера и кэшируется. Задержка на клиенте — обычно 0-20 мс. Для статики с жёсткими требованиями к latency предпочтительна A.
Влияние на SSL
При использовании CNAME для CDN убедитесь, что TLS-сертификат на CDN покрывает ваш домен (обычно через SNI). Let's Encrypt с CNAME работает через DNS-01 challenge — CNAME на _acme-challenge.
Сравнительная таблица
| Параметр | A | CNAME |
|---|---|---|
| Цель | IPv4 | Другое имя |
| Работает на apex | Да | Нет |
| Совместимость с MX/TXT | Да | Нет |
| Производительность | 1 lookup | 2+ lookup |
| Для CDN | Требует ручного обновления | Идеально |
| SaaS-интеграция | Неудобно | Стандарт |
FAQ
- Что быстрее — A или CNAME?
- A. CNAME добавляет один дополнительный lookup, обычно 5-20 мс на холодном кэше.
- Можно ли сделать CNAME на CNAME?
- Технически да, но ограничение цепочки = 5-8 резолверов. Избегайте.
- Что использовать для Cloudflare?
- На apex — A (Cloudflare делает CNAME flattening автоматически). На поддоменах — CNAME.
- Как проверить, есть ли CNAME на apex?
dig example.com ANYпокажет все записи. Если CNAME на apex — в ответе будет предупреждение.
Заключение
Выбор между A и CNAME диктуется двумя правилами: (1) apex — только A или ALIAS; (2) динамические сервисы (CDN, SaaS) — CNAME. Всё остальное — вопрос удобства. Используйте Enterno.io DNS Lookup для проверки конфигурации и мониторинг — чтобы вовремя узнать о «висящих» CNAME или некорректных записях.
Проверьте ваш сайт прямо сейчас
Проверить →