Проверка DNS-записей
Все записи, которые публикует домен, и что они говорят о его почте и сертификатах.
Записи и то, для чего они на самом деле
| Тип | Указывает на | Возникает, когда |
|---|---|---|
A | Адрес IPv4 | Всегда. Именно она заставляет домен открываться. |
AAAA | Адрес IPv6 | Всё чаще. Мобильные сети нередко работают только на IPv6. |
CNAME | Другое имя | Направляете www на вершину домена или поддомен — к SaaS-провайдеру. |
MX | Почтовый сервер, с приоритетом | Почта не приходит. Побеждает меньшее число приоритета. |
NS | Авторитативные серверы имён зоны | Вы сменили провайдера и хотите знать, чей ответ получаете. |
TXT | Произвольный текст | SPF, DKIM, DMARC и каждый токен подтверждения домена, который вы когда-либо вставляли. |
SOA | Метаданные зоны и таймеры | Разбираетесь с репликацией между серверами имён. |
CAA | Разрешённые удостоверяющие центры | Ограничиваете, кто вправе выпускать для вас сертификаты. |
«Распространение» — неверное слово
Самая полезная вещь, которую стоит понять про DNS, потому что она превращает непредсказуемое ожидание в число, которым вы управляете.
Ничто никуда не распространяется. Нет ни рассылки, ни раздачи, ни волны обновлений, катящейся по интернету. У вашего сервера имён новое значение появляется в тот же миг, как вы нажали «сохранить». Время уходит на другое: каждый резолвер в мире держит кешированную копию старого ответа и сохранит её, пока не истечёт выданный ему TTL.
Так что задержка не загадочна — это ровно тот TTL, который был опубликован, когда каждый резолвер спрашивал в последний раз. Если у вашей записи TTL был 3600 секунд, одни резолверы переспросят через пять минут, другие через час, — отсюда и ощущение, что изменение доходит до людей неравномерно.
Отсюда и порядок действий для любого планового изменения:
- За сутки снизьте TTL до 300 секунд. Дождитесь, пока истечёт старый TTL, чтобы все подхватили короткий.
- Внесите изменение. Теперь оно занимает пять минут, а не сутки.
- Когда всё уляжется, верните TTL обратно.
Поднимать его обратно стоит потому, что низкий TTL означает больше запросов, большую задержку при промахе кеша и более тяжёлую аварию, если ваши серверы имён окажутся недоступны, — ни у кого не останется пригодного кешированного ответа, на который можно опереться.
Почтовые записи — там и сидит большинство проблем
Верят ли вашей почте, определяют три записи TXT. Их часто настраивают неправильно, и провал безмолвен: письма уходят в спам, а не отбиваются, так что никто вам об этом не скажет.
SPF
Перечисляет серверы, которым дозволено отправлять почту от вашего домена. Ошибки, по убыванию частоты:
- Две записи SPF. RFC 7208 требует, чтобы получатели считали это постоянной ошибкой, так что проверка проваливается целиком. Слейте их в одну.
- Больше десяти DNS-запросов. Каждый
include:считается, а includes вкладываются. Почтовый провайдер плюс маркетинговая платформа плюс служба поддержки — и вы уже там, а превышение приводит к провалу проверки. - Окончание на `~all` или `?all`. Оба означают «вероятно, не мы, но поступайте как знаете». Отклонить получателей просит только
-all.
DKIM и DMARC
DKIM подписывает каждое письмо ключом, открытая половина которого живёт в записи TXT под именем селектора вроде selector1._domainkey.example.com — чтобы её найти, надо знать селектор, поэтому её и нет в запросе выше по умолчанию. DMARC живёт по адресу _dmarc.example.com и сообщает получателям, что делать, когда SPF и DKIM расходятся, и куда слать отчёты.
Запросите _dmarc.yourdomain.com в инструменте выше. Если ничего не вернулось, у получателей нет никаких указаний, и по любому письму, подделывающему вас, они будут решать сами.
Правило CNAME на вершине домена
CNAME не может сосуществовать ни с какой другой записью для того же имени. У вершины домена обязаны быть записи SOA и NS, значит, у вершины не может быть CNAME, — отчего направить example.com на SaaS-провайдера неудобно, а www.example.com тривиально.
Обходные пути зависят от провайдера: ALIAS, ANAME или «уплощение» CNAME — все они разрешают цель на стороне сервера и отвечают записью A. Они работают, они не стандартизованы, и знать о них стоит до того, как вы потратите на это полдня.
Смежное
Когда записи указывают куда надо, проверьте сертификат, который узел на самом деле предъявляет, и какие заголовки он возвращает. А чтобы выяснить, какой сети принадлежит адрес, на который указывает запись, на это ответит поиск по ASN.
Вопросы про DNS
Я изменил запись, а показывается старое значение. Почему?
Кеширование, причём на нескольких уровнях. У каждой записи есть TTL, определяющий, сколько резолверы вправе её хранить, и до его истечения вы будете видеть старый ответ независимо от того, что теперь отдаёт авторитативный сервер. Поверх этого кешируют операционная система и браузер. Запрос отсюда идёт к резолверу, а не напрямую к авторитативному серверу имён, поэтому он тоже видит кеш. Чтобы узнать, что опубликовано на самом деле, спросите сервер имён самого домена: dig @ns1.example.com example.com A.
Сколько длится распространение DNS?
Никакого распространения нет — сама эта формулировка и порождает путаницу. Ничто никуда не рассылается. Резолверы просто держат свою копию, пока не истечёт её TTL, а затем спрашивают снова, так что задержка, которую вы ощущаете, ровно равна TTL, опубликованному на момент их прошлого запроса. Понизьте TTL за сутки до планового изменения — и переключение займёт минуты, а не часы; забудете — и суточный TTL означает целый день, в течение которого часть посетителей видит старое значение.
Что такое запись CAA и нужна ли она мне?
Она перечисляет удостоверяющие центры, которым разрешено выпускать сертификаты для вашего домена, и центры обязаны сверяться с ней перед выпуском. Без неё сертификат для вашего домена может выпустить любой публичный УЦ в мире — а значит, злоумышленнику достаточно взломать процедуру проверки у одного из сотни центров, чтобы получить действительный сертификат. С ней поверхность атаки сжимается до перечисленных вами центров. Это одна строка, и её стоит добавить.
Почему моя запись SPF не проходит проверку, хотя выглядит верной?
Три частые причины. Две записи SPF на одном домене — это постоянная ошибка по RFC 7208, и проверка проваливается целиком; публикуйте ровно одну. Превышение десяти DNS-запросов (каждый include: считается, а они вложены) тоже приводит к отказу; этот предел достигается легче, чем кажется, стоит завести почтового провайдера, маркетинговый сервис и службу поддержки. И окончание на ~all или ?all лишь советует получателям, а не предписывает им, поэтому письма с других узлов зачастую всё равно доставляются.
Чем запись A отличается от CNAME?
Запись A указывает имя прямо на адрес IPv4. CNAME указывает имя на другое имя, которое затем нужно разрешать в свою очередь. Правило, на котором спотыкаются, таково: CNAME не может сосуществовать ни с какой другой записью для того же имени, а значит, вершина домена, обязанная иметь записи SOA и NS, не может иметь CNAME. Провайдеры обходят это записями ALIAS или ANAME, которые ведут себя на вершине как CNAME, но разрешаются на стороне сервера.
Какой резолвер здесь используется?
Собственный резолвер нашего сервера, и это осознанный выбор. Запрос к фиксированному публичному резолверу вроде 8.8.8.8 показал бы то, что видит Google, а не то, что видит обычный клиент, — и расходятся они чаще, чем хотелось бы: географически разные ответы, раздельные представления DNS и фильтрация на уровне резолвера дают именно этот разрыв.
DNS is also the part of your own browsing that is most often unencrypted. Which resolver answers your queries determines who can see every domain you visit, whatever else is encrypted. Test which resolver you are really using
Последняя проверка . Заметили, что что-то устарело? Напишите нам.
