这里遇到了一些问题。我的服务器有 3 个 IP 地址,这是我的 /etc/hosts:
127.0.0.1 localhost
46.38.235.226 brian.smares.de brian
46.38.238.199 stewie.smares.de stewie
46.38.238.137 mail.smares.de mail
postfix 的设置方式如下
inet_interfaces = localhost, $myhostname
mynetworks = 127.0.0.0/8
mydestination = localhost
myhostname = mail.smares.de
mydomain = smares.de
myorigin = $mydomain
如果我发一封电子邮件,消息来源是这样的
Received: from mail.smares.de (pelikansal.at. [46.38.235.226])
pelikansal.at 是 46.38.235.226 的 rDNS 目标。
我不明白的是为什么使用这个 IP 而不是 46.38.238.137。我的服务器的 FQDN 是 brian.smares.de,它将映射到 226 地址,但这是原因吗?
有任何想法吗?
答案1
可能的解决方案
发送电子邮件时,用于控制传出 IP 地址的参数是smtp_bind_address
。因此,您应该明确将参数设置smtp_bind_address
为一个 IP 地址。
解释
上面的配置您已经修改过了inet_interfaces
参数。它只设置 postfix 将使用哪个 IP 地址收到邮件。
但是,如果这三个条件充分,参数inet_interfaces
也会产生影响:smtp_bind_address
smtp_bind_address
为空(默认)inet_interfaces
只有一IPv4 IP 地址inet_interfaces
列表没有回送。
当它发生时,smtp_bind_address
= $inet_interfaces
。
因为你在 中设置了两个 IP 地址inet_interfaces
,所以smtp_bind_address
仍然是空的。在这种情况下,smtp 客户端使用 0.0.0.0 作为其 IP 地址,而 0.0.0.0 (INADDR_ANY) 意味着内核将根据数据包的去向选择 IP 地址。 从这个 SO 线程经过雷米·勒博, 他说
如果客户端未绑定到特定 IP,或者绑定到 INADDR_ANY,则套接字将使用它找到的第一个具有到所连接服务器 IP 的可用路由的 IP。
因此,在您的情况下,内核选择 46.38.238.137 来建立传出连接是可以理解的。