Sendmail 和 nslookup 解析问题

Sendmail 和 nslookup 解析问题

在我的 Ubuntu 服务器上,我一直试图通过安装 sendmail 来使 PHP mail() 函数正常工作(我也安装了 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 地址没有显示,只显示了私有 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。由于我只发送邮件,我是否需要担心与我的服务器的 MX 有关的 DNS 记录?


/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

答案1

据我所知,您只是想发送邮件。在这种情况下,您不能为服务器设置 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-mailer。

队列中的示例邮件将有助于检查这一点。

您能发布 netstat -natp 的输出吗?只是为了查看 sendmail 绑定到哪些 IP 地址。

我知道这个答案并不完整,但这就是我目前能说的全部。

答案2

正如您所写,它必须起作用。

user1316146 也说对了:gethostbyaddr 正在执行反向 IP 查找,而这对于邮件发送来说并不需要。在我看来,问题不在这里。

我认为,您的网络很嘈杂,或者本地 DNS 不太可靠。您必须多次配置您的 sendmail,以更积极地尝试获取其目标地址。

或者,也许您应该安装一个本地 cachingonly bind 以使这些问题更加清晰。

或者,也许你应该尝试一个更强大的 mta,我认为 postfix 是一个好方法。

答案3

gethostbyaddr 正在执行反向 DNS,因此您需要为相关 IP 地址设置 PTR 记录。您还需要将该地址范围委托给您作为公共地址。

如果您使用 8.8.8.8 作为该盒子的 DNS,那么您将无法拥有 10.0.0.0/8 网络的 PTR 记录。

这种查找通常仅发生在发送到服务器的邮件时,因为邮件服务器会尝试确定发件人的主机名,以便将其与发送的 HELO 消息进行比较。

顺便说一句,如果您只是想发送邮件,Ubuntu 下的默认 postfix 配置就可以完美运行。

相关内容