Haproxy

HAProxy TCP 透明模式遠端伺服器

  • June 3, 2019

好的,所以我有一個安裝了 HAProxy 的伺服器盒,我需要它將流量轉發到兩個 MySQL 伺服器。它們都位於完全不同的數據中心。當我從配置中刪除它時它可以工作: 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

並且無法建立聯繫。但是,當我添加這個時: iptables -A POSTROUTING -t nat -j MASQUERADE

它可以工作,但沒有發送客戶端 IP,只是發送了代理 IP。

MySQL 伺服器配置為將 HAProxy 伺服器的 ip 作為其預設網關。

我不確定這是否可能,我已經搞砸了好幾天。

我的 HAProxy 配置:

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 是後端伺服器的預設網關。遠端伺服器將無法工作。

引用自:https://serverfault.com/questions/788726