HAProxy TCP透明模式远程服务器

好吧,我有一个HAProxy安装服务器盒,我需要它转发stream量到两个MySQL服务器。 它们都位于完全不同的数据中心。 当我从config中删除它时,它起作用: source 0.0.0.0 usesrc clientip但是,当启用时,我无法从MySQL服务器获得响应。

我在HAProxy服务器上有这些IPTables规则: iptables -t mangle -N DIVERT iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT iptables -t mangle -A DIVERT -j MARK --set-mark 111 iptables -t mangle -A DIVERT -j ACCEPT ip rule add dev eth0 fwmark 111 lookup 100 ip route add local 0.0.0.0/0 dev lo table 100

而且不能build立联系。 但是,当我添加这个: iptables -A POSTROUTING -t nat -j MASQUERADE

它的工作原理,但客户端IP不被发送,只是代理IP。

MySQL服务器configuration为将HAProxy服务器的IP作为其默认网关。

我不确定这是否可能,我已经搞了好几天了。

我的HAProxyconfiguration:

 global log 127.0.0.1 local0 debug daemon defaults log global retries 2 #option dontlognull option tcp-smart-accept option tcp-smart-connect option tcplog option log-health-checks timeout connect 3000 timeout server 5000 timeout client 5000 frontend mysql-frontend bind 100.111.111.111:3306 transparent default_backend mysql-backend backend mysql-backend mode tcp source 0.0.0.0 usesrc clientip option mysql-check user haproxy_check server mysql1 192.111.111.111:3306 check server mysql2 200.111.111.111:3306 check 

其中一个MySQL服务器的路由表:

Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 100.111.111.111 0.0.0.0 UG 2 0 0 eth0 100.111.111.111 0.0.0.0 255.255.255.255 UH 2 0 0 eth0 192.111.111.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo

用于HAProxy盒子的Sysctl:

net.ipv4.ip_forward = 1 net.ipv4.conf.all.forwarding = 1 net.ipv4.conf.all.accept_redirects = 1 net.ipv4.conf.all.send_redirects = 1 net.ipv4.conf.eth0.send_redirects = 1 net.ipv4.ip_nonlocal_bind = 1 net.ipv4.conf.default.rp_filter = 2 net.ipv4.conf.default.accept_source_route = 0

TProxy模块也被编译到HAProxy中,并且所需的内核模块也被启用。

也有只有一个接口,eth0。

请让我知道我做错了什么,或者如果这是可能的!

谢谢!

透明模式要求haproxy作为后端服务器的默认网关。 远程服务器将无法工作。