我正在尝试构build一个负载平衡的SMTP群集。 邮件服务器已经存在并运行Exim 4.最初,我考虑使用Nginx来进行负载均衡,但是在testing系统上,所有的邮件服务器都会将来自负载均衡器IP的入站连接看作是来自负载平衡器IP而不是实际的远程发件人知识产权,广泛谷歌search之后似乎没有任何方法。 因为这有效地将邮件集群变成一个开放的中继,这显然是一个非首创,这是一个可惜的Nginx的工作很好,否则。
所以我正在寻找使用HAProxy,因为我从更进一步的Googlesearch中得知它能够将原始源IP的连接完好无缺地传递,因此系统中继允许列表和ACL将正确运行。
但是,根据几个在线示例设置HAProxy,我得到“SMTP同步错误”(和一个500系列错误,所以邮件将反弹),连接立即下降,或只是连接下降,没有SMTP信息。
这里是使用的haproxy.conf:
global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user nobody group nobody daemon stats socket /var/lib/haproxy/stats defaults log global option redispatch retries 3 timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout check 10s maxconn 3000 listen smtp bind 0.0.0.0:25 mode tcp no option http-server-close balance roundrobin # option smtpchk HELO smtp-in.example.com server smtp01 10.0.0.141:25 send-proxy check server smtp02 10.0.0.143:25 send-proxy check
尽pipe存在send-proxy命令,但我收集的是如何让haproxy通过源IP,Exim日志如下所示:
016-12-26 07:06:48 SMTP协议同步错误(input发送不等待问候):拒绝来自H = [10.0.0.150]的连接input=“PROXY TCP4 10.0.0.150 10.0.0.143 40334 25 \ r \ nHELO SMTP-in.example.comr \ n”
在这种情况下,.150是负载平衡器,.143是Exim SMTP服务器。
问题:
实际上是否有可能让Nginx提供SMTP连接到邮件服务器,而源IP是真正的远程源IP而不是负载均衡器?
或者,这在HAProxy中是可行的,它是如何完成的?
在这种情况下,当前的生产系统运行LVS,但是依赖共享相同IP地址的所有邮件服务器上的负载均衡器和回送接口。 新的负载平衡器将是OpenSUSE 42.2,除此之外,如果检测到networking中已经使用的IP,它似乎会帮助将其从自身中删除,以避免冲突。 所以LVS在新的版本中。
我正在考虑的问题的其他解决scheme包括完全分离入站和出站SMTP通信(目前它们都通过相同的负载平衡器运行),在负载平衡器IP地址上安装一个简单的中继(可能是qmail),configuration为只允许根据标准的接力练习可以识别的范围,并且使用MXlogging上简单的DNS循环将入站SMTP直接发送到邮件服务器。 但是一个负载均衡的解决scheme会更加优雅。