我正在尝试在服务器和客户端之间建立一个haproxy网关,以获得如下图所示的完全透明代理服务器。我的主要目标是提供负载平衡。Haproxy网关设置 - 客户端和服务器位于同一个子网上
有一个简单的应用程序在服务器端监听端口25。客户端尝试连接网关机器上的端口25,并且网关上的haproxy选择可用服务器,然后将连接重定向到服务器。
该方法的网络分析产生tcp流,如图:客户端重置连接,因为它不会向服务器发送syn数据包。
这是haproxy用法是否正确,我的问题相关配置?或者客户端应该直接连接到服务器(这对我来说没有什么意义,但我不确定,如果这是真的,那么haproxy会干预连接并进行负载平衡)?
编辑:
我开始觉得这个问题是关系到路由和NAT网关上。所有这三台机器都在同一个子网中,但我为客户端和服务器添加了到网关的路由。同时在网关上的规则是:
iptables -t mangle -N DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 0x01/0x01
iptables -t mangle -A DIVERT -j ACCEPT
iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A PREROUTING -p tcp --dport 25 -j TPROXY \
--tproxy-mark 0x1/0x1 --on-port 10025
ip route flush table 100
ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
现在的问题是我应该在网关做些什么来改变"syn-ack (src: S, dst: C)"
到"syn-ack (src: GW, dst: C)"
?
嗯... http://superuser.com/questions/942006/why-does-iptables-not-doing-dnat-for-the-same-subnet –