每次调用 smtp 服务器时,我所有应用程序中的超时错误

Dar*_*rme 5 email smtp timeout

在我的 VPS(带有 Ubuntu 12.04 LTS的tophost.it “TopServer”)上,几天前我所有的应用程序都无法发送电子邮件。我可以从日志中了解到每个请求都会超时。

然后我尝试从终端简单地调用telnet smtp.gmail.com 587,我注意到以下异常:而在其他所有运行良好的服务器上,答案只需要几毫秒来处理,并且很简单

Trying 173.194.65.109...
Connected to gmail-smtp-msa.l.google.com.
Run Code Online (Sandbox Code Playgroud)

在有问题的 VPS 上,答案是

Trying 2a00:1450:4013:c01::6c...
Run Code Online (Sandbox Code Playgroud)

..并且仅在大约一分钟后(我猜在此期间应用程序将超时)......它最终说:

Trying 74.125.136.108...
Connected to smtp.gmail.com.
Run Code Online (Sandbox Code Playgroud)

那么这里发生了什么?为什么它之前尝试使用 IPv6,并且仅在几秒钟之后尝试使用正确的 IPv4?如何修复此行为以避免超时错误?

Dar*_*rme 4

我找到了禁用 IPv6 的临时修复程序。我所做的是将以下几行添加到/etc/sysctl.conf

#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
Run Code Online (Sandbox Code Playgroud)

然后重新启动或指示 sysctl 重新加载。现在,这些应用程序可以再次发送电子邮件,并且没有最初的延迟。

您始终可以通过运行来了解 IPv6 是否已启用

cat /proc/sys/net/ipv6/conf/all/disable_ipv6
Run Code Online (Sandbox Code Playgroud)

从终端。两个可能的答案: 0 => IPv6 已启用;1 => IPv6 禁用。

至少,在我等待服务提供商解决问题的同时,我学到了一些新东西。