Роутер DNSLOOKUP
Перевод выполнен Алексеем Паутовым в рамках некоммерческого проекта RussianLDP (http://www.rldp.ru/). Именно на этом сайте и надлежит искать новые версии, если таковые будут.
17. Роутер DNSLOOKUP
Роутер dnslookup при помощи запросов к DNS ищет узлы, обрабатывающие почту для данного домена. Если не установлена опция verify_only, то для этого роутера должен быть всегда определен транспорт.
Если в конфигурации есть поддержка SRV (см. опцию check_srv ниже), Exim сначала ищет SRV-записи. Если они не найдены или поддержка SRV отсутствует, то ищутся MX-записи. Если MX-записей нет, ищутся А-записи. Однако, может быть установлена опция mx_domains для отключения прямого использования адресных записей.
MX-записи равного приоритета сортируются Exim в случайном порядке. Затем Exim ищет адресные записи имен узлов, полученных из MX или SRV-записей. Если узел имеет более одного IP-адреса, они сортируются в случайном порядке, за исключением того, что IPv6-адреса всегда сортируются перед IPv4-адресами. Если все найденные IP-адреса отбрасываются общей опцией ignore_target_hosts, то роутер отклоняется.
Все MX-записи, указывающие на локальный узел или на любое другое имя узла, определенное опцией hosts_treat_as_local, и имеющие наивысший приоритет (меньшее из значений MX-записей), отбрасываются вместе с другими MX-записями равного или меньшего приоритета.
Если узел, на который указывает MX-запись высшего приоритета или A-запись, является локальным, либо совпадает с указанным опцией hosts_treat_as_local, то дальнейшее поведение управляется общей опцией self.
17.1. Проблемы с поиском в DNS
Бывают проблемы с DNS-серверами при поиске записей SRV. Некоторые плохо настроенные серверы возвращают ошибку DNS или не отвечают вообще (таймаут) при запросе несуществующих записей SRV. Подобные проблемы были зафиксированы и для MX-записей. Глобальная опция dns_again_means_nonexist может помочь с этой проблемой, но грубо, поскольку это глобальная опция.
Поэтому есть две опции, srv_fail_domains и mx_fail_domains, контролирующие происходящее при поиске в DNS в роутере. Dnslookup приводит к ошибке DNS или ответу try again (попробуйте снова). Если попытка поиска SRV или MX записи приводит к одному из этих результатов, и домен соответствует списку, то exim ведёт себя так, будто доменная система ответила, что нет такой записи. В случае поиска SRV-записи это значит, что роутер продолжает искать MX-записи, в случае поиска MX продолжается поиск A или AAAA-запись, если домен не совпадает с mx_domains, в случае ошибки маршрутизации.
17.2. Частные опции для dnslookup
Ниже приведен список специфичных опций, которые могут быть использованы для изменения способа обработки поиска в DNS.
|
Если установлена эта опция, роутер отклоняется до тех пор, пока локальный узел находится в списке узлов, полученном при запросе MX-записей. Она может быть использована для выявления доменов для которых локальный узел является вторичным почтовым сервером. Способ, которым Exim определяет, является ли узел локальным узелом, описан в секции 13.8.
|
Роутер dnslookup поддерживает использование SRV-записей (см. RFC 2782) в дополнение к MX и A-записям. Поддержка их по умолчанию отключена. Для включения поддержки SRV нужно определить опцию check_srv именем нужной службы. К примеру:
check_srv = smtp |
Если вычисление значения завершилось успешно, то роутер сначала ищет SRV-записи для данной службы (подразумевается TCP-протокол). Простая SRV-запись с именем узла . указывает на отсутствие такой службы для данного домена. В этом случае роутер отклоняется. Если находятся другие типы SRV-записей, то они используются для построения списка узелов для доставки в соответствии с правилами RFC 2782. Поиск MX-записей в этом случае не производится.
Однако, если ни одной SRV-записи не найдено, то производится поиск MX-записей (и A-записей) традиционным способом. Другими словами, SRV-записи имеют приоритет над MX-записями, так же как и MX-записи имеют приоритет над A-записями. Стоит заметить, что такое поведение не одобряется RFC 2782, хотя предыдущий RFC его определял. Явно утверждается, что MX-записей достаточно для нужд электронной почты, и что SRV-записи не должны использоваться для этих целей. Однако, SRV-записи имеют дополнительное свойство, вес, которое некоторые люди могут найти полезным, пытаясь распределить SMTP-нагрузку между узлами разной мощности.
Смотрите секцию 17.1 для обсуждения поведения exim при ошибках поиска в DNS.
|
Домен, попадающий в список mx_domains, должен иметь MX-запись или SRV-запись для того, чтобы быть распознанным надлежащим образом. Имя этой опции может быть усовершенствованно. К примеру, если все почтовые серверы в домене fict.example имеют MX-записи, за исключением узлов в discworld.fict.example, то Вы можете использовать такую запись:
mx_domains = ! *.discworld.fict.example : *.fict.example |
Данная запись определяет что сообщения, адресованные домену, попадающему в этот список, но не имеющему MX-записи, должны быть немедленно отклонены вместо маршрутизации их с использованием A-записи.
|
Если DNS-поиск MX-записи для одного из доменов в этом списке вернул ошибку DNS, exim ведёт себя как будто MX-записи вообще не найдены. Смотрите секцию 17.1 для получения подробной информации.
|
Когда данная опция истинна, опция RES_DEFNAMES механизма разрешения имен устанавливается для посылки DNS-запросов. Обычно, но не стандартно, это указывает механизму разрешения имен соотносить простые имена с доменом по умолчанию. К примеру, на машине dictionary.ref.example домен thesaurus будет изменен на thesaurus.ref.example внутри механизма разрешения имен. Для подробного описания того, что на самом деле выполняет механизм разрешения имен, обратитесь к разделам справочного руководства resolver и resolv.conf.
|
Если имя домена в обрабатываемом адресе не является полным, оно может быть раскрыто до своей полной формы при помощи DNS-запроса. К примеру, если адрес определен как dormouse@teaparty, то домен может быть расширен до teaparty.wonderland.fict.example. Раскрытие домена также может быть результатом установки опции widen_domains. Если rewrite_headers истинно, то все экземпляры сокращенного доменного имени во всех Bcc:, Cc:, From:, Reply-to:, Sender: и To: строках заголовка сообщения заменяются полным доменным именем.
Эта опция должна быть отключена только тогда, когда точно известно, что никакое сообщение не будет когда-либо отправлено за пределы того окружения, где сокращение имеет смысл.
Если при поиске MX-записи в DNS происходит совпадение по шаблону, серверы имен обычно возвращают запись, содержащую найденное имя, тем самым делая невозможным определение присутствия шаблона. Однако, с недавних пор, некоторые серверы DNS возвращают запись шаблона. Если имя, возвращенное в результате DNS-запроса, начинается с *, оно не используется для переписывания заголовков.
|
Адреса с одинаковым именем домена обычно маршрутизируются роутером dnslookup на один и тот же список узлов. Однако, данный факт не может быть доказан, так как опции роутера и предусловия могут ссылаться на локальную часть адреса. По умолчанию, Exim маршрутизирует каждый адрес независимо друг от друга. DNS-серверы используют кэширование, таким образом повторные DNS-запросы не являются избыточными. В любом случае личная почта в основном имеет немного получателей.
Если Вы обслуживаете списки расылки с большим количеством подписчиков в одном и том же домене и используете роутер dnslookup, который независим от локальной части, Вы можете включить опцию same_domain_copy_routing, чтобы избегать повторяющихся DNS-запросов для идентичных доменов в одном письме. В этом случае, если dnslookup маршрутизирует адрес удаленному транспорту, все остальные адреса в сообщении с тем же самым именем домена получателя автоматически аналогично маршрутизируются без независимой обработки, обеспечивая следующие условия:
- Роутер не обрабатывает адреса, определенные опциями headers_add или headers_remove.
- Роутер не изменяет адреса в любом случае, к примеру, способом widening домена.
|
Когда эта опция истинна, опция RES_DNSRCH реcолвера устанавливается для выполнения DNS-запросов, что отличается от опции qualify_single, в которой это применимо к доменам, содержащем точки. Обычно, но не стандартно, это указывает механизму разрешения имен искать имя в текущем и родительском доменах. К примеру, если на машине в домене fict.example DNS-запрос teaparty.wonderland не разрешился, то реcолвер попытается разрешить имя teaparty.wonderland.fict.example. Для подробного описания того, что на самом деле выполняет Ваш механизм разрешения имен, обратитесь к разделам справочного руководства по resolver и resolv.conf.
Установка этой опции в значение true может вызвать проблемы в доменах, имеющих шаблонную MX-запись, потому что любой домен, не имеющий своей собственной MX-записи, совпадает с локальным шаблоном.
|
Если DNS-поиск SRV-записи для одного из доменов в этом списке вернул ошибку DNS, exim ведёт себя так, как будто SRV-записи вообще не найдены. Смотрите секцию 17.1 для получения подробной информации.
|
Если DNS-запрос завершился неудачно, и эта опция установлена, то каждая из этих строк по очереди добавляется в конец имени домена, и запрос выполняется снова. К примеру, если
widen_domains = fict.example:ref.example |
17.3. Эффект опций qualify_single и search_parents
Когда домен получателя изменяется механизмом разрешения имен в результате применения опций qualify_single или search_parents, Exim переписывает соответствующий адрес в строках заголовка письма, если опция rewrite_headers не установлена в false. Затем Exim маршрутизирует адрес заново, используя полное доменное имя.
Эти две опции действуют только на DNS-запрос, который выполняется роутером для домена маршрутизируемого адреса. Они не действуют на запросы, выполняемые для записей такого рода:
domains = @mx_any |