vCenter 设备不会使用邮件中继服务器

vCenter 设备不会使用邮件中继服务器

总结:- sendmail 配置为使用中继服务器,但仍然坚持使用 127.0.0.1 作为中继,这导致邮件无法发送。


我们有开源 vCenter 设备 (v 5.0) 来管理我们的 ESXi 集群。通过 vSphere Client 连接到它时,您可以通过转到 来配置要使用的 SMTP 中继服务器Administration > vCenter Server Settings > MAIL。在那里您可以设置 SMTP 服务器值。我查看了他们的文档,并通过电话与支持人员确认,配置邮件所要做的就是在该框中输入中继 IP 或 fqdn,然后单击“确定”。

好吧,我这样做了,但邮件仍然没有发送。所以我通过 SSH 进入服务器(SuSE)并查看 /var/log/mail,它似乎正在尝试通过 127.0.0.1 中继电子邮件,但它拒绝了。所以查看配置文件,我看到有/etc/sendmail.cf/etc/mail/submit.cf。您可以配置中的项目/etc/sysconfig/sendmail并运行SuSEconfig --module sendmail以根据 /etc/sysconfig/sendmail 中的内容将这些项目生成到 .cf 文件中。

经过一番尝试,我发现当您在 vCenter GUI 中设置 SMTP 服务器值时,它所做的就是将 /etc/mail/submit.cf 中的“DS”行更改为DS[myrelayserver.com]

在互联网上查找后发现,要使用中继服务器,DS 线路似乎是唯一需要更改的。我打电话给 VMWare 支持部门,花了 2 个小时尝试修改与中继有关的任何设置,但我们无法让它不使用 127.0.0.1 作为中继。请注意,每当我们进行任何类型的配置更改时,我们都会重新启动 sendmail 服务。

有人知道发生了什么吗?有什么想法可以解决此问题吗?

答案1

在 Red Hat 系统上,有一个/etc/mail/access用于 sendmail 的文件。

内容示例如下:

# Check the /usr/share/doc/sendmail/README.cf file for a description
# of the format of this file. (search for access_db in that file)
# The /usr/share/doc/sendmail/README.cf is part of the sendmail-doc
# package.
#
# by default we allow relaying from localhost...
Connect:localhost.localdomain           RELAY
Connect:localhost                       RELAY
Connect:127.0.0.1                       RELAY
172.16.2.116                            RELAY
172.16.2.17                             RELAY

您应该在该文件(或其 SuSE 等效文件)中定义您的 vCenter 的 IP,然后重新启动守护进程。

编辑:

我假设您已将 Sendmail 设置为监听除其环回地址之外的其他地址。进入文件sendmail.mc并查找此节。

dnl # The following causes sendmail to only listen on the IPv4 loopback address
dnl # 127.0.0.1 and not on any other network devices. Remove the loopback
dnl # address restriction to accept email from the internet or intranet.
dnl #
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

你想通过添加 来注释掉最后一行dnl。因此你最终应该得到:

dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

重新启动 sendmail 服务并重试。

编辑:

OP 正在尝试配置其基于 Linux 的 vSphere 设备以通过另一台邮件服务器进行中继。这只是定义 SMARTHOST 的一个例子。在您的 sendmail.mc 文件中,找到以下行:

dnl define(`SMART_HOST', `smtp.your.provider')dnl

删除注释行并输入邮件服务器的名称。如果您的邮件服务器的名称是mail.bootylicious.com,则生成的 sendmail.mc 行将如下所示:

define(`SMART_HOST', `mail.bootylicious.com')dnl

请确保您可以 ping 您使用的名称...

重新启动 Sendmail。

答案2

新版本的 sendmail 使用两个配置文件。它们是submit.cfsendmail.cf。请勿更改sumbit.mc(用于生成submit.cf)或其submit.cf本身。当本地邮件程序分叉sendmail以发送电子邮件时,将使用它们,它们所做的就是将要发送的邮件中继到监听sendmail127.0.0.1:25 的守护进程

因此,您需要做的就是手动更改 DSsendmail.cf并赋予它一个如下值:

DS[relay.server]

包括括号,或者修改 SMART_HOST 宏sendmail.mc

define(`SMART_HOST', `[relay.server]')dnl

如果您进行修改,sendmail.mc则需要生成一个新的sendmail.cf,然后重新启动sendmail守护进程。在 Debian 中,您运行sendmailconfig。在 CentOS 中,您同时运行这两个,/etc/mail/make然后运行service sendmail restart​​。抱歉,我没有使用 SuSE。

答案3

这很奇怪,但这是我能让它发挥作用的唯一方法......

我希望用来伪装的名称是 mydomain.com。vCenter 服务器的主机名为 mycluster,文件中包含 mycluster 和 mycluster.vmware.com /etc/hosts(为什么是 vware.com,我不知道……这是设备所必需的吗,还是我们的承包商配置错了?还是设备默认这样做?有人知道吗?)。

为了让一切正常运转,我必须将 mydomain.com 添加到 vCenter 服务器的 /etc/hosts 文件中,用于 127.0.0.1 和 ::1。但不仅如此,我还必须将其列在 mycluster 和 mycluster.vmware.com 之前。看来 sendmail 会查看 /etc/hosts 并获取 127.0.0.1 下列出的第一个名称并将其设置为发送域??

无论如何,它作品现在。当 vCenter 中的触发器触发并发送电子邮件时,vCenter 会报告无法发送电子邮件,但大约 60 秒后我才真正收到它。所以有些事情仍然不对劲,但至少它正在工作。

答案4

我的解决方案是将 127.0.0.2 添加到主机文件中。

sudo sh -c 'echo "127.0.0.2 server1" >> /etc/hosts'

相关内容