DNS-ответ, возвращающий NS-записи без IP-адресов, это нормально? - PullRequest
2 голосов
/ 12 ноября 2009

В моем заявлении я должен время от времени отправлять уведомления по электронной почте. Для отправки почты (через SMTP) мне нужно получить MX-сервер этого конкретного домена (часть адреса электронной почты). Это не приложение Unix, а встроенное.

То, что я делаю, выглядит так:

1 - Отправить запрос DNS (тип MX), содержащий домен, к текущему DNS

2 - Если ответ содержит ответ MX, верните успех из этой функции

3 - Считайте первую запись NS и скопируйте ее IP-адрес в текущий DNS, перейдите к 1

Это может повторяться несколько раз, и это ожидаемо, но я не ожидаю, что ответ содержит записи NS серверов, названных как ns1.blahblah.com, но не их IP-адреса. В этом случае я должен отправить еще один запрос, чтобы найти IP этого NS. Я видел это только для 1 адреса электронной почты (1 домен), остальные адреса работали без проблем.

Это нормальное поведение? ИМХО, это неправильная настройка DNS-записей. Есть мысли?

Заранее спасибо ...

Ответы [ 3 ]

3 голосов
/ 12 ноября 2009

Раздел полномочий в сообщении, а также дополнительный раздел являются необязательными. Т.е. серверы имен и их IP-адреса не обязательно должны быть в ответе на запрос MX. DNS-сервер принимает решение отправить эту дополнительную информацию, даже если на сервере уже есть данные.

Вы застряли при необходимости запросить MX, а затем запросить IP-адрес почтового сервера

3 голосов
/ 27 ноября 2009

Краткий ответ на ваш вопрос: RFC 1035 говорит,

NS-записи приводят как к обычной дополнительной обработке раздела, чтобы найти запись типа А и, при использовании в реферале, специальный поиск зона, в которой они находятся для получения клейкой информации.

... раздел дополнительных записей содержит RR которые относятся к запросу, но не являются строго ответами на вопрос.

... При составлении ответа RR, которые должны быть вставлены в дополнительный раздел, но дубликаты RR в ответе или полномочии разделы, могут быть опущены в дополнительном разделе.

Таким образом, суть в том, что, на мой взгляд, если ответ не содержит запись A, соответствующую записи NS, то есть некоторый раздел, что-то, вероятно, где-то неправильно настроено. Но, как гласит старая уловка, «будь либерален в том, что ты принимаешь»; если вы собираетесь делать запросы, вам нужно будет обрабатывать подобные ситуации. DNS наводнен такими проблемами.

Более длинный ответ требует вопроса: как вы получаете оригинальный DNS-сервер, на котором вы запускаете поиск MX?

То, что вы делаете, - это нерекурсивный запрос: если первый запрашиваемый сервер не знает ответа, он указывает вам на другой сервер, который «ближе» в иерархии DNS к домену, который вы ищете, и Вы должны сделать последующие запросы, чтобы найти запись MX. Если вы запускаете запрос на одном из корневых серверов, я думаю, что вам придется самостоятельно следовать указателям NS, как и вы.

Однако, если в вашем приложении сконфигурирован начальный DNS-сервер (т. Е. Элемент конфигурации вручную или через DHCP), вы сможете сделать рекурсивный запрос, используя флаг Recusion Desired, который отключит повторный поиск на настроенный DNS-сервер. В этом случае вы просто получите значение записи MX в своем первом ответе. С другой стороны, рекурсивные запросы являются необязательными, и ваш локальный DNS-сервер может их не поддерживать (что было бы странно, поскольку исторически многие клиентские библиотеки полагались на рекурсивные поиски).

В любом случае, лично я хотел бы поблагодарить вас за просмотр записей MX. Мне приходилось иметь дело с системами, которые хотели отправлять почту, но не могли выполнять поиск DNS, а количество и разнообразие странных и неприятных хаков, которые они использовали, оставили меня с эмоциональными шрамами.

0 голосов
/ 12 ноября 2009

Возможно, у домена просто нет записи MX. Я полностью удаляю запись MX для моих неиспользуемых / припаркованных доменов, это спасает мой почтовый сервер от горя (СПАМ).

На самом деле нет необходимости проходить шаг 2. Если системный (или ISP) преобразователь не возвратил запись MX, то это потому, что он уже сделал дополнительные шаги и ничего не нашел. Или, возможно, системный распознаватель хоста работает слишком медленно (т. Е. От интернет-провайдера).

Тем не менее, я думаю, что уместно просто помочь, если это произойдет, поскольку это явно проблема DNS или ISP, а не проблема с функцией. Просто скажите пользователю, что вы не можете разрешить запись MX для домена, и разрешите ему исследовать ее на своем конце.

Кроме того, возможно ли сделать преобразователи настраиваемыми в самом приложении, чтобы пользователи могли обойтись с громоздким NS?

...