У меня есть postfix, работающий на OpenBSD, и у меня возникают проблемы с добавлением домена поиска, если он не настроен ни в postfix, ни на локальном DNS-сервере (dnsmasq).
В моем домене есть запись CNAME с подстановочным знаком (*.example.com
) указывая на myhost.example.com
.
Я знаю, что обычно для того, чтобы заставить его вести себя так, у меня была бы запись «поиск» в моем resolv.conf, но у меня нет такой записи. Мой /etc/resolv.conf
содержит:
nameserver 127.0.0.1
nameserver <my ISP's DNS 1>
nameserver <my ISP's DNS 2>
Dnsmasq знает, что нужно игнорировать запись localhost (и говорит об этом в журналах), но это означает, что другие службы ищут в dnsmasq. dnsmasq использует только конфигурацию по умолчанию, без каких-либо изменений.
Если я включу вход в dnsmasq, я получаю такие записи:
Dec 15 10:39:56 mail dnsmasq[640]: query[A] ncwfood.com from 127.0.0.1
Dec 15 10:39:56 mail dnsmasq[640]: forwarded ncwfood.com to <my ISP's DNS 1>
Dec 15 10:39:56 mail dnsmasq[640]: reply ncwfood.com is NXDOMAIN-IPv4
Dec 15 10:39:56 mail dnsmasq[640]: query[AAAA] ncwfood.com from 127.0.0.1
Dec 15 10:39:56 mail dnsmasq[640]: forwarded ncwfood.com to <my ISP's DNS 1>
Dec 15 10:39:56 mail dnsmasq[640]: reply ncwfood.com is NXDOMAIN-IPv6
Это все правильно для неудачного поиска, и dnsmasq делает то, что должен. Затем postfix делает следующее:
Dec 15 10:39:56 mail dnsmasq[640]: query[A] ncwfood.com.example.com from 127.0.0.1
Dec 15 10:39:56 mail dnsmasq[640]: forwarded ncwfood.com.example.com to <my ISP's DNS 1>
Dec 15 10:39:56 mail dnsmasq[640]: reply myhost.example.com is <my IP>
Dec 15 10:39:56 mail dnsmasq[640]: query[AAAA] ncwfood.com.example.com from 127.0.0.1
Dec 15 10:39:56 mail dnsmasq[640]: cached ncwfood.com.example.com is <CNAME>
Dec 15 10:39:56 mail dnsmasq[640]: cached myhost.example.com is 2001:4b98:...
Он добавляет мой домен, выполняет поиск, сопоставляет подстановочный знак и указывает то, чего не должно быть. Если я выполняю поиск имени непосредственно в dnsmasq (например, с помощью dig @localhost ...
), он не выполняет этих дополнительных поисков, так что это определенно postfix.
В моей конфигурации постфикса я установил, что он откладывается до системной службы DNS (dnsmasq), не использует собственный преобразователь DNS и не добавляет домен поиска, например:
lmtp_host_lookup = native
smtp_host_lookup = native
smtp_dns_resolver_options =
disable_dns_lookups = yes
ignore_mx_lookup_error = no
«Собственная» директива явно работает, так как я вижу поисковые запросы в журналах dnsmasq. Согласно документам кажется, что smtp_dns_resolver_options действует так, как будто он настроен на res_dnsrch
, но это не так (пусто).
Вот мой журнал постфиксов из той же транзакции сообщений:
Dec 15 10:40:26 mail postfix/smtp[29517]: connect to ncwfood.com[46....]:25: Connection timed out
Dec 15 10:40:26 mail postfix/smtp[29517]: connect to ncwfood.com[2001:4b98:...]:25: No route to host
Dec 15 10:40:26 mail postfix/smtp[29517]: 22F8A3A4F0F: to=<xxx@ncwfood.com>, relay=none, delay=168442, delays=168412/0.33/30/0, dsn=4.4.1, status=deferred (connect to ncwfood.com[2001:4b98:...]:25: No route to host)
Адрес, к которому он пытается подключиться, - это мой хост с подстановочными знаками, на котором не работает почтовый сервер, отсюда и сбой подключения.
Я нашел примечание к выпуску, в котором говорилось, что postfix используется для автоматического добавления доменов, но это было остановлено в версии 2.8; Бегу 2.10.
Как я могу запретить postfix выполнять эти поиски?
Я не думаю disable_dns_lookups
делает то, что вы думаете. Из http://www.postfix.org/postconf.5.html
disable_dns_lookups (default: no)
Disable DNS lookups in the Postfix SMTP and LMTP clients. When disabled, hosts are looked up with the getaddrinfo() system library routine which normally also looks in /etc/hosts. As of Postfix 2.11, this parameter is deprecated; use smtp_dns_support_level instead.
DNS lookups are enabled by default.
Я бы посоветовал взглянуть на некоторые другие параметры постфикса, например: append_at_myorigin и append_dot_mydomain так же как local_header_rewrite_clients
Также поможет вывод postconf -n.