Назад | Перейти на главную страницу

Postfix длинные запросы DNS

Я использую свой постфиксный сервер как ретранслятор к другому провайдеру. Я немного покопаюсь, чтобы узнать, почему отправка простого письма занимает так много времени. Я выяснил, что postfix выполняет полные DNS-запросы для каждого отдельного письма (потеряно 30 секунд):

Apr 30 11:26:50 dev1 postfix/smtp[20917]: connecting to in.mailjet.com port 25
Apr 30 11:26:55 dev1 postfix/smtp[20917]: dns_query: in.mailjet.com (MX): OK
Apr 30 11:26:55 dev1 postfix/smtp[20917]: dns_get_answer: type MX for in.mailjet.com
Apr 30 11:26:55 dev1 postfix/smtp[20917]: dns_get_answer: type MX for in.mailjet.com
Apr 30 11:26:55 dev1 postfix/smtp[20917]: dns_get_answer: type MX for in.mailjet.com
Apr 30 11:26:55 dev1 postfix/smtp[20917]: dns_get_answer: type MX for in.mailjet.com
Apr 30 11:26:55 dev1 postfix/smtp[20917]: dns_get_answer: type MX for in.mailjet.com
Apr 30 11:26:55 dev1 postfix/smtp[20917]: smtp_addr_one: host smtp-ovhfr11.mailjet.com
Apr 30 11:26:55 dev1 postfix/smtp[20917]: lookup smtp-ovhfr11.mailjet.com type A flags 0
Apr 30 11:27:00 dev1 postfix/smtp[20917]: dns_query: smtp-ovhfr11.mailjet.com (A): OK
Apr 30 11:27:00 dev1 postfix/smtp[20917]: dns_get_answer: type A for smtp-ovhfr11.mailjet.com
Apr 30 11:27:00 dev1 postfix/smtp[20917]: smtp_addr_one: host smtp-ovhfr7.mailjet.com
Apr 30 11:27:00 dev1 postfix/smtp[20917]: lookup smtp-ovhfr7.mailjet.com type A flags 0
Apr 30 11:27:05 dev1 postfix/smtp[20917]: dns_query: smtp-ovhfr7.mailjet.com (A): OK
Apr 30 11:27:05 dev1 postfix/smtp[20917]: dns_get_answer: type A for smtp-ovhfr7.mailjet.com
Apr 30 11:27:05 dev1 postfix/smtp[20917]: smtp_addr_one: host smtp-ovhfr8.mailjet.com
Apr 30 11:27:05 dev1 postfix/smtp[20917]: lookup smtp-ovhfr8.mailjet.com type A flags 0
Apr 30 11:27:10 dev1 postfix/smtp[20917]: dns_query: smtp-ovhfr8.mailjet.com (A): OK
Apr 30 11:27:10 dev1 postfix/smtp[20917]: dns_get_answer: type A for smtp-ovhfr8.mailjet.com
Apr 30 11:27:10 dev1 postfix/smtp[20917]: smtp_addr_one: host smtp-ovhfr9.mailjet.com
Apr 30 11:27:10 dev1 postfix/smtp[20917]: lookup smtp-ovhfr9.mailjet.com type A flags 0
Apr 30 11:27:15 dev1 postfix/smtp[20917]: dns_query: smtp-ovhfr9.mailjet.com (A): OK
Apr 30 11:27:15 dev1 postfix/smtp[20917]: dns_get_answer: type A for smtp-ovhfr9.mailjet.com
Apr 30 11:27:15 dev1 postfix/smtp[20917]: smtp_addr_one: host smtp-ovhfr10.mailjet.com
Apr 30 11:27:15 dev1 postfix/smtp[20917]: lookup smtp-ovhfr10.mailjet.com type A flags 0
Apr 30 11:27:20 dev1 postfix/smtp[20917]: dns_query: smtp-ovhfr10.mailjet.com (A): OK
Apr 30 11:27:20 dev1 postfix/smtp[20917]: dns_get_answer: type A for smtp-ovhfr10.mailjet.com
Apr 30 11:27:20 dev1 postfix/smtp[20917]: begin in.mailjet.com address list
Apr 30 11:27:20 dev1 postfix/smtp[20917]: pref   10 host smtp-ovhfr11.mailjet.com/5.196.43.135
Apr 30 11:27:20 dev1 postfix/smtp[20917]: pref   10 host smtp-ovhfr7.mailjet.com/178.32.115.14
Apr 30 11:27:20 dev1 postfix/smtp[20917]: pref   10 host smtp-ovhfr8.mailjet.com/46.105.54.204
Apr 30 11:27:20 dev1 postfix/smtp[20917]: pref   10 host smtp-ovhfr9.mailjet.com/37.59.74.234
Apr 30 11:27:20 dev1 postfix/smtp[20917]: pref   10 host smtp-ovhfr10.mailjet.com/5.196.43.129
Apr 30 11:27:20 dev1 postfix/smtp[20917]: end in.mailjet.com address list
  1. Кажется, ваш хост не кэширует запросы DNS. Так должно быть.
  2. Нет
  3. Ваша операционная система (не постфиксная) должна кэшировать все необходимые запросы DNS-записей. NSCD это один из распространенных инструментов для кэширования запросов "хостов".

По умолчанию значение параметра smtp_host_lookup является dns. Из-за этого postfix будет всегда попробуйте разрешить домен получателя записи MX, чтобы определить место назначения следующего перехода. Postfix полагается на преобразователь libc для выполнения поиска, поэтому ожидаемое поведение будет зависеть от библиотеки. Например, postfix всегда будет искать через NS-сервер, определенный в /etc/resolv.conf.

Судя по вашим журналам выше, похоже, что у вас проблема на сервере NS. Это ненормальный случай, когда однократный поиск в DNS может занять до 5 секунд, чтобы вернуть результат. Вот те же логи при поиске постфикса MX записи in.mailjet.com. Поиск завершился всего за 2 секунды.

May  1 00:20:37 dewa postfix/smtp[4002]: dns_query: in.mailjet.com (MX): OK
May  1 00:20:37 dewa postfix/smtp[4002]: dns_get_answer: type MX for in.mailjet.com
May  1 00:20:37 dewa postfix/smtp[4002]: message repeated 4 times: [ dns_get_answer: type MX for in.mailjet.com]
May  1 00:20:37 dewa postfix/smtp[4002]: smtp_addr_one: host smtp-ovhfr9.mailjet.com
May  1 00:20:37 dewa postfix/smtp[4002]: lookup smtp-ovhfr9.mailjet.com type A flags 0
May  1 00:20:37 dewa postfix/smtp[4002]: dns_query: smtp-ovhfr9.mailjet.com (A): OK
May  1 00:20:37 dewa postfix/smtp[4002]: dns_get_answer: type A for smtp-ovhfr9.mailjet.com
May  1 00:20:37 dewa postfix/smtp[4002]: lookup smtp-ovhfr9.mailjet.com type AAAA flags 0
May  1 00:20:37 dewa postfix/smtp[4002]: dns_query: smtp-ovhfr9.mailjet.com (AAAA): Host found but no data record of requested type
May  1 00:20:37 dewa postfix/smtp[4002]: smtp_addr_one: host smtp-ovhfr10.mailjet.com
May  1 00:20:37 dewa postfix/smtp[4002]: lookup smtp-ovhfr10.mailjet.com type A flags 0
May  1 00:20:37 dewa postfix/smtp[4002]: dns_query: smtp-ovhfr10.mailjet.com (A): OK
May  1 00:20:37 dewa postfix/smtp[4002]: dns_get_answer: type A for smtp-ovhfr10.mailjet.com
May  1 00:20:37 dewa postfix/smtp[4002]: lookup smtp-ovhfr10.mailjet.com type AAAA flags 0
May  1 00:20:37 dewa postfix/smtp[4002]: dns_query: smtp-ovhfr10.mailjet.com (AAAA): Host found but no data record of requested type
May  1 00:20:37 dewa postfix/smtp[4002]: smtp_addr_one: host smtp-ovhfr11.mailjet.com
May  1 00:20:37 dewa postfix/smtp[4002]: lookup smtp-ovhfr11.mailjet.com type A flags 0
May  1 00:20:37 dewa postfix/smtp[4002]: dns_query: smtp-ovhfr11.mailjet.com (A): OK
May  1 00:20:37 dewa postfix/smtp[4002]: dns_get_answer: type A for smtp-ovhfr11.mailjet.com
May  1 00:20:37 dewa postfix/smtp[4002]: lookup smtp-ovhfr11.mailjet.com type AAAA flags 0
May  1 00:20:37 dewa postfix/smtp[4002]: dns_query: smtp-ovhfr11.mailjet.com (AAAA): Host found but no data record of requested type
May  1 00:20:37 dewa postfix/smtp[4002]: smtp_addr_one: host smtp-ovhfr7.mailjet.com
May  1 00:20:37 dewa postfix/smtp[4002]: lookup smtp-ovhfr7.mailjet.com type A flags 0
May  1 00:20:37 dewa postfix/smtp[4002]: dns_query: smtp-ovhfr7.mailjet.com (A): OK
May  1 00:20:37 dewa postfix/smtp[4002]: dns_get_answer: type A for smtp-ovhfr7.mailjet.com
May  1 00:20:37 dewa postfix/smtp[4002]: lookup smtp-ovhfr7.mailjet.com type AAAA flags 0
May  1 00:20:38 dewa postfix/smtp[4002]: dns_query: smtp-ovhfr7.mailjet.com (AAAA): Host found but no data record of requested type
May  1 00:20:38 dewa postfix/smtp[4002]: smtp_addr_one: host smtp-ovhfr8.mailjet.com
May  1 00:20:38 dewa postfix/smtp[4002]: lookup smtp-ovhfr8.mailjet.com type A flags 0
May  1 00:20:38 dewa postfix/smtp[4002]: dns_query: smtp-ovhfr8.mailjet.com (A): OK
May  1 00:20:38 dewa postfix/smtp[4002]: dns_get_answer: type A for smtp-ovhfr8.mailjet.com
May  1 00:20:38 dewa postfix/smtp[4002]: lookup smtp-ovhfr8.mailjet.com type AAAA flags 0
May  1 00:20:38 dewa postfix/smtp[4002]: dns_query: smtp-ovhfr8.mailjet.com (AAAA): Host found but no data record of requested type
May  1 00:20:38 dewa postfix/smtp[4002]: begin in.mailjet.com address list
May  1 00:20:38 dewa postfix/smtp[4002]: pref   10 host smtp-ovhfr9.mailjet.com/37.59.74.234
May  1 00:20:38 dewa postfix/smtp[4002]: pref   10 host smtp-ovhfr10.mailjet.com/5.196.43.129
May  1 00:20:38 dewa postfix/smtp[4002]: pref   10 host smtp-ovhfr11.mailjet.com/5.196.43.135
May  1 00:20:38 dewa postfix/smtp[4002]: pref   10 host smtp-ovhfr7.mailjet.com/178.32.115.14
May  1 00:20:38 dewa postfix/smtp[4002]: pref   10 host smtp-ovhfr8.mailjet.com/46.105.54.204

Итак, лучший вариант для решения проблемы из корня - выяснить, почему вашему NS-серверу требуется 5 секунд для поиска записи DNS.

Ваш обходной путь для использования только одного результата записи MX не будет работать в postfix. Postfix попытается разрешить запись A всего домена вернулся из Лучший предпочтение записи MX. MX-запись in.mailjet.com вернуть 5 хостов с равными предпочтениями. Таким образом, postfix будет искать запись A с пяти хостов.

Чтобы ускорить DNS-запрос, вы можете использовать NSCD и установить smtp_host_lookup так как native (как предложил Энди). Другой альтернативой является запуск локального кэширования DNS, например powerdns или несвязанный.