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

Проблемы с разрешением sendmail и nslookup

На моем сервере Ubuntu я пытался заставить работать PHP mail (), установив sendmail (у меня также установлен postfix, но я отказался от него). Однако, когда я пытаюсь отправить почту, она попадает в очередь со следующей ошибкой в /var/log/mail.log:

sm-mta[xxx]: gethostbyaddr(x.x.x.x) failed: x

Когда я выполнил nslookup (например. nslookup gmail.com) он сказал, что не может быть решен, и время ожидания соединения истекло. Потратив на это весь день и пробуя разные вещи, я решил поместить серверы имен моего домена в свой файл интерфейсов, как: https://askubuntu.com/a/331636

Это уменьшило проблему, с которой я столкнулся nslookup но я все еще получаю ту же ошибку в журналах при попытке отправить почту, за исключением того, что мой общедоступный IP-адрес не отображается, только частный. например

sm-mta[xxx]: gethostbyaddr(178.x.x.x) failed: x # public IP error not showing anymore
sm-mta[xxx]: gethostbyaddr(10.x.x.x) failed: x # private IP error still showing

Я просмотрел много документации по этому поводу и до сих пор не уверен, что делаю не так. Я проверил, что sendmail использует порт 25. Поскольку я только отправляю почту, нужно ли мне беспокоиться о записях DNS, касающихся MX для моего сервера?


/etc/resolv.conf:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 2001:4860:4860::8844
nameserver 2001:4860:4860::8888
nameserver 8.8.8.8

/etc/dhcp/dhclient.conf:

option rfc3442-classless-static-routes code 121 = array of unsigned integer 8;

#send host-name "andare.fugue.com";
send host-name = gethostname();
#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
#send dhcp-lease-time 3600;
#supersede domain-name "fugue.com home.vix.com";
#prepend domain-name-servers 127.0.0.1;
request subnet-mask, broadcast-address, time-offset, routers,
    domain-name, domain-name-servers, domain-search, host-name,
    dhcp6.name-servers, dhcp6.domain-search,
    netbios-name-servers, netbios-scope, interface-mtu,
    rfc3442-classless-static-routes, ntp-servers,
    dhcp6.fqdn, dhcp6.sntp-servers;
#require subnet-mask, domain-name-servers;
#timeout 60;
#retry 60;
#reboot 10;
#select-timeout 5;
#initial-interval 2;
#script "/etc/dhcp3/dhclient-script";
#media "-link0 -link1 -link2", "link0 link1";
#reject 192.33.137.209;

#alias {
#  interface "eth0";
#  fixed-address 192.5.5.213;
#  option subnet-mask 255.255.255.255;
#}

#lease {
#  interface "eth0";
#  fixed-address 192.33.137.200;
#  medium "link0 link1";
#  option host-name "andare.swiftmedia.com";
#  option subnet-mask 255.255.255.0;
#  option broadcast-address 192.33.137.255;
#  option routers 192.33.137.250;
#  option domain-name-servers 127.0.0.1;
#  renew 2 2000/1/12 00:00:01;
#  rebind 2 2000/1/12 00:00:01;
#  expire 2 2000/1/12 00:00:01;
#}

etc/hosts:

# Your system has configured 'manage_etc_hosts' as True.
# As a result, if you wish for changes to this file to persist
# then you will need to either
# a.) make changes to the master file in /etc/cloud/templates/hosts.tmpl
# b.) change or remove the value of 'manage_etc_hosts' in
#     /etc/cloud/cloud.cfg or cloud-config from user-data
127.0.1.1 domain.name
127.0.0.1 localhost.localdomain localhost
178.x.x.x domain.name

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Как вы пишете, это должно было работать.

user1316146 также прав: gethostbyaddr выполняет обратный поиск IP, который не нужен для отправки почты. На мой взгляд, проблема не в этом.

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

Или, может быть, вам следует установить привязку local cachingonly, чтобы прояснить такие проблемы.

Или, может быть, вам стоит попробовать более надежный mta, postfix - это хороший способ.

gethostbyaddr выполняет обратный DNS, поэтому вам необходимо настроить записи PTR для рассматриваемых IP-адресов. Вам также необходимо, чтобы этот диапазон адресов был делегирован вам для публичного обращения.

Если вы используете 8.8.8.8 в качестве DNS для коробки, вы не сможете иметь записи PTR для сети 10.0.0.0/8.

Этот поиск обычно выполняется только для почты, отправляемой на сервер, поскольку почтовый сервер пытается определить имя хоста отправителя, чтобы сравнить его с отправленным сообщением HELO.

Кстати, если вы просто пытаетесь отправить почту, конфигурация постфикса по умолчанию отлично подходит для этого в Ubuntu.

Насколько я понимаю, вы просто хотите отправлять письма. В этом случае вы не должны устанавливать MX-запись для сервера, так как ваш почтовый сервер не отвечает ни за один домен.

Если я понимаю вашу проблему, вам действительно нужен MTA, который пересылает вашу почту.

Настроить для этой цели полноценный почтовый сервер - излишне; Итак, сначала несколько альтернатив: https://unix.stackexchange.com/questions/1449/lightweight-outgoing-smtp-server

Если вы все равно хотите иметь настоящий почтовый сервер, предпочтительнее использовать postfix: https://askubuntu.com/questions/457003/setting-up-a-send-only-mail-server

Однако ваша проблема с DNS, вероятно, не зависит от этого.

Конечно, желательно, чтобы все IP-адреса и имена хостов, используемые на вашем сервере, могли быть разрешены. Для этого вам понадобится локальный сервер имен для ваших локальных адресов (и имен), который пересылает любые другие запросы на какой-либо другой сервер имен.

Но может быть более простой способ: поиск DNS, который выполняет почтовый сервер, должен зависеть от доменов отправителя и получателя почты. Вы должны проверить, правильны ли они, и просто ограничиться именами, которые можно разрешить. Возможно, вы настроили адрес отправителя так, чтобы он указывал на какой-то локально определенный домен?

Чтобы отладить это, вы можете попробовать сначала отправить почту из командной строки и перейти к PHP-почтовой программе, как только это сработает.

Пример письма из очереди может помочь проверить это.

И не могли бы вы опубликовать вывод команды netstat -natp? Просто чтобы узнать, к каким IP-адресам привязан sendmail.

Я знаю, что это неполный ответ, но это все, что я могу сказать на данный момент.