我正在尝试使用 HAProxy 创建一个环境,以允许使用 HAProxy 服务器(具有公共 IP 和本地私有 IP)通过 SSL 连接访问托管在本地服务器(具有私有 IP)上的网站。我不希望 HAProxy 服务器管理其后端服务器的 SSL 证书,而是让后端服务器(即本地私有服务器)自行管理证书,而 HAProxy 仅使用后端服务器的证书来创建连接。使用 HAProxy 可以实现这一点吗?
答案1
解决方案如下:使用 TPROXY,我们可以将客户端 IP 传递到实际服务器,而无需转发标头,并且它适用于 TCP 连接。
要求:
内核为 2.6.28 及以上的 Linux
支持 TPROXY 的 iptables 和 HAProxy
后端服务器必须使用安装 HAPRoxy 的节点作为默认网关
您已有一个有效的 HAProxy 配置
程序:
- 运行以下命令来标记和路由数据包
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 fwmark 111 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100
- 设置节点处于转发模式:
echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
echo 1 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 1 > /proc/sys/net/ipv4/conf/eth0/send_redirects
- 在 HAProxy 后端代理配置部分添加:
源 0.0.0.0 使用 rc 客户端 ip
重新启动 HAProxy 服务。
完毕
我按照下面链接中提到的指南提供的步骤找到了解决方案: http://www.loadbalancer.org/blog/configure-haproxy-with-tproxy-kernel-for-full-transparent-proxy