我在云虚拟机上安装了 GitLab,不久后又使用同一提供商 (Hetzner) 启动了第二台虚拟机作为 postfix 服务器
当我回到 GitLab 服务器启用 SMTP 电子邮件时,我第一次注意到一个问题,没有发送任何内容,甚至没有任何邮件服务器上的日志表明尝试了连接。
在 GitLab 服务器上
我尝试从 gitlab ping 邮件服务器,但只得到了一个响应,无论我等待多久都没有得到进一步的响应。
root@gitlab:~# ping mail.simoncarr.co.uk
PING mail.simoncarr.co.uk(2a01:4f8:c2c:a992:: (2a01:4f8:c2c:a992::)) 56 data bytes
如您所见,这是一个 IPV6 响应。除了启用ufw
会影响 gitlab 网络的之外,我不记得做过任何其他事情。
我已经关闭了ufw
gitlab 和邮件服务器,但得到了相同的行为。
如果我 ping 一个外部服务器,我仍然会得到 IPV6 响应,但至少我会得到多个响应。
root@gitlab:~# ping bbc.co.uk
PING bbc.co.uk(2a04:4e42:600::81 (2a04:4e42:600::81)) 56 data bytes
64 bytes from 2a04:4e42:600::81 (2a04:4e42:600::81): icmp_seq=1 ttl=58 time=3.68 ms
64 bytes from 2a04:4e42:600::81 (2a04:4e42:600::81): icmp_seq=2 ttl=58 time=3.47 ms
64 bytes from 2a04:4e42:600::81 (2a04:4e42:600::81): icmp_seq=3 ttl=58 time=3.52 ms
64 bytes from 2a04:4e42:600::81 (2a04:4e42:600::81): icmp_seq=4 ttl=58 time=3.50 ms
64 bytes from 2a04:4e42:600::81 (2a04:4e42:600::81): icmp_seq=5 ttl=58 time=3.49 ms
在邮件服务器上
如果我 ping gitlab 服务器,我会得到 IPV4 响应,并且它们会像您预期的那样重复。
PING gitlab.simoncarr.co.uk (168.119.124.76) 56(84) bytes of data.
64 bytes from static.76.124.119.168.clients.your-server.de (168.119.124.76): icmp_seq=1 ttl=58 time=0.878 ms
64 bytes from static.76.124.119.168.clients.your-server.de (168.119.124.76): icmp_seq=2 ttl=58 time=0.463 ms
64 bytes from static.76.124.119.168.clients.your-server.de (168.119.124.76): icmp_seq=3 ttl=58 time=0.353 ms
64 bytes from static.76.124.119.168.clients.your-server.de (168.119.124.76): icmp_seq=4 ttl=58 time=0.419 ms
如果我从邮件服务器 ping 外部服务器,我会再次收到 IPV6 响应。
root@mail:~# ping bbc.co.uk
PING bbc.co.uk(2a04:4e42:600::81 (2a04:4e42:600::81)) 56 data bytes
64 bytes from 2a04:4e42:600::81 (2a04:4e42:600::81): icmp_seq=1 ttl=58 time=6.68 ms
64 bytes from 2a04:4e42:600::81 (2a04:4e42:600::81): icmp_seq=2 ttl=58 time=6.24 ms
64 bytes from 2a04:4e42:600::81 (2a04:4e42:600::81): icmp_seq=3 ttl=58 time=6.23 ms
64 bytes from 2a04:4e42:600::81 (2a04:4e42:600::81): icmp_seq=4 ttl=58 time=6.16 ms
我在邮件服务器上所做的与网络相关的唯一更改是向 IPV4 和 IPV6 地址添加反向 DNS 地址。
回到我实际的问题。
我希望能够从 GitLab 服务器连接到我的邮件服务器以发送 SMTP 电子邮件。即使ufw
在两台服务器上都禁用,GitLab 也无法与邮件服务器通信。我不禁认为该问题与我上面描述的行为有关。
HTTP
我的 GitLab 服务器的网络流量运行正常,并且我的邮件服务器可以正常从邮件客户端和其他 SMTP 服务器发送和接收电子邮件。
答案1
找到合适的方法来调试你的问题
测试服务时,最好尝试连接服务,而不是使用ping
。虽然ICMP 回显可能有助于诊断某些问题,但它在这里并没有真正说明太多问题,因为它可能响应或不响应的原因太多,而且与实际问题关系不大。
在您的 DNS 中,您有:
;; ANSWER SECTION:
simoncarr.co.uk. 14400 IN MX 11 mail.simoncarr.co.uk.
;; ADDITIONAL SECTION:
mail.simoncarr.co.uk. 14400 IN AAAA 2a01:4f8:c2c:a992::
mail.simoncarr.co.uk. 14400 IN A 188.34.201.61
这意味着您的邮件服务器被宣传为同时具有 IPv6 和 IPv4 连接,但都没有在 SMTP 端口 25 上应答:
$ nc 188.34.201.61 25 -vvv
nc: connect to 188.34.201.61 port 25 (tcp) failed: Connection timed out
$ nc 2a01:4f8:c2c:a992:: 25 -vvv
nc: connect to 2a01:4f8:c2c:a992:: port 25 (tcp) failed: Connection timed out
但是,IPv4 地址在端口 465 上应答(smtps,RFC 8314) 和 587 (提交,RFC 6409),但 IPv6 地址却不行:
$ nc 188.34.201.61 465 -vvv
Connection to 188.34.201.61 465 port [tcp/submissions] succeeded!
$ nc 188.34.201.61 587 -vvv
Connection to 188.34.201.61 587 port [tcp/submission] succeeded!
220 mail.simoncarr.co.uk ESMTP Postfix (Ubuntu)
$ nc 2a01:4f8:c2c:a992:: 465 -vvv
nc: connect to 2a01:4f8:c2c:a992:: port 465 (tcp) failed: Connection timed out
$ nc 2a01:4f8:c2c:a992:: 587 -vvv
nc: connect to 2a01:4f8:c2c:a992:: port 587 (tcp) failed: Connection timed out
知道您已禁用防火墙,这表明您的 DNS 中的 IPv6 地址是错误的,或者邮件服务器根本没有 IPv6 连接。通常您可以ifconfig
在邮件服务器上使用它来解决这个问题,但我很幸运,因为我的第一个猜测是正确的:
$ nc 2a01:4f8:c2c:a992::1 587 -vvv
Connection to 2a01:4f8:c2c:a992::1 587 port [tcp/submission] succeeded!
220 mail.simoncarr.co.uk ESMTP Postfix (Ubuntu)
如何解决你的问题
更改
AAAA
DNS 中的记录。可能应该是(请注意附加的1
):mail.simoncarr.co.uk. 14400 IN AAAA 2a01:4f8:c2c:a992::1
修复您的邮件服务器。对于传入邮件,您需要让 SMTP 服务器监听 TCP 端口 25。如果您可以从服务器本身连接到此端口,则可能需要询问服务提供商是否允许托管邮件服务器。通常,在未用于传递邮件的连接上阻止端口 25 是一种对抗受感染计算机的垃圾邮件的方法。