我正在尝试为单臂模式的 HAproxy 设置负载平衡实验室(当实际前端 IP 和后端服务器位于同一子网中,而实际客户端始终位于远程时)。另一个要求是使客户端源 IP 对后端节点可见。当我们对基于 tcp 的自定义应用程序进行负载平衡时,似乎选项“source 0.0.0.0 usesrc clientip”在这里是正确的选择。此外,我已将后端配置为具有指向 HAproxy 的 IP 地址的默认网关。
尽管一旦我启用此后端选项,就会发生奇怪的事情:我看到与前端 VIP 的连接已正确完成,并形成了三次握手。但是,当 HAproxy 服务器尝试建立第二个会话以使用客户端的欺骗 IP 来联系后端服务器时,我看到的情况正是如此:
- 代理正在向其中一个后端发送带有欺骗客户端 IP 地址的 SYN;
- 后端通常会回复 SYN-ACK 数据包;
- 代理没有发送最后的 ACK,只是在超时后盲目地发送 SYN 数据包,结果相同;
- 在代理上,我看到此连接在 netstat 输出中标记为 SYN_SENT,因此看起来代理服务器由于某种原因不接受实际的 SYN-ACK 数据包。
任何赞扬都将受到赞赏。