1

我正在尝试在服务器和客户端之间设置一个 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)"

TCP流程图

4

1 回答 1

1

是我的情况的定义。

这里出现了透明代理模式:HAProxy 可以配置为在与服务器建立 TCP 连接时欺骗客户端 IP 地址。这样,服务器认为连接直接来自客户端(当然,服务器必须回复 HAProxy 而不是客户端,否则它无法工作:客户端将在它有的时候从服务器 IP 获得确认在 HAProxy 的 IP 上建立连接)。

而答案是设置ip_nonlocal_bind 系统控制。

于 2016-01-15T17:11:55.220 回答