`
jljlpch
  • 浏览: 323149 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

Haproxy的全透明代理(转)

    博客分类:
  • k8s
 
阅读更多
一:背景
    Haproxy是一款优秀的负载均衡软件,相比于Nginx来说,Haproxy可以承受的负载能力更强,这些都要归功于Haproxy的一些实现机制,单缓冲,splice系统调用,单进程、事件驱动模型,Zero-copy forwarding,树形存储等等,所有的这些细微之处的优化实现了在中等规模负载之上依然有着相当低的CPU负载,甚至于在非常高的负载场景中,5%的用户空间占用率和95%的系统空间占用率也是非常普遍的现象,这意味着HAProxy进程消耗比系统空间消耗低20倍以上。因此,对OS进行性能调优是非常重要的。即使用户空间的占用率提高一倍,其CPU占用率也仅为10%,这也解释了为何7层处理对性能影响有限这一现象。由此,在高端系统上HAProxy的7层性能可轻易超过硬件负载均衡设备。
    基于以上事实,公司最近采购了CoreMail邮件系统来构建一个高大上的邮件系统架构。前端负载均衡就是使用了Haproxy来使用。但是方案实施工程中也发现了一些问题,最明显的就是用户通过Haproxy来访问邮件系统后真正达到邮件系统的地址都是Haproxy的地址,这就导致了一个问题,在垃圾邮件过滤的时候就无法实现基于IP的过滤,并且也无法记录IP地址信息。为了解决这个问题我google了很多方案,可以使用硬负载,硬负载可以实现全透明代理让后端邮件服务器获取到用户的真实IP,还有一种解决方案就是Haproxy的全透明代理。接下来将会介绍下Haproxy的全透明代理的部署。

二:实验拓扑
<ignore_js_op style="word-wrap: break-word;"> 
    主要是让Haproxy的设备变成一个网桥设备,借助tpproxy来实现Haproxy的全透明代理。

三:方案部署
设置HAproxy的网卡为桥接模式(桥接模式原理请参考其他博文)
1
2
3
4
5
6
7
brctl addbr br0  #添加一个桥接设备
brctl addif br0 eth0 #向桥接设备添加端口
brctl addif br0 eth1
ifconfig eth0 0.0.0.0 #清楚网卡上的地址
ifconfig eth1 0.0.0.0
ifconfig br0 172.16.35.206 netmask 255.255.255.0 #设置桥接设备的地址
ip route add default via 172.16.35.1 #添加默认路由



到此桥接模式就设置好了,接在桥接设备上的机器都可以获取公司的内网IP地址。逻辑上是和公司内网是一个网络。原理和虚拟机中的桥接模式一样。
brctl addif 就相当于给这个桥接设备添加可用的端口。
我们还可以将地址信息写入配置文件中./etc/sysconfig/network-scripts/ifcfg-br0中

接着开始配置Haproxy
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.25.tar.gz
tar zxvf haproxy-1.4.25.tar.gz
cd haproxy-1.4.25
yum install gcc gcc-c++ autoconf automake -y
make TARGET=linux2628 arch=x86_64 USE_LINUX_TPROXY=1 #重点USE_LINUX_TPROXY=1用于编译支持TPTOXY
make install
mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy
cp examples/haproxy.init /etc/init.d/haproxy
chmod +x /etc/init.d/haproxy
cp haproxy /usr/sbin/



到此HAproxy配置完成。限制于环境这里我使用tcp协议的ssh来完成实验。
下面是HAproxy 的一个代理ssh的配置文件
1
2
3
4
5
6
listen  test 0.0.0.0:1000
        balance roundrobin
        mode tcp
        option tcplog
        source 0.0.0.0 usesrc clientip #重点,TPROXY需要加上这行。
        server  test 172.16.35.81:22 weight 1 check inter 2000 rise 2 fall 5



到此为止一个支持TProxy的HAproxy配置完成。

配置TProxy代码如下
1
2
3
4
5
6
7
8
#!/bin/bash
/sbin/iptables -F
/sbin/iptables -t mangle -N DIVERT
/sbin/iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
/sbin/iptables -t mangle -A DIVERT -j MARK --set-mark 1
/sbin/iptables -t mangle -A DIVERT -j ACCEPT
/sbin/ip rule add fwmark 1 lookup 100
/sbin/ip route add local 0.0.0.0/0 dev lo table 100



    上面的代码目的是为了让所有进入网桥设备的mangle表的包都打上标记,然后新增一条路由规则将这些打了标记的数据包发送至本地回环接口进行处理。

配置内核参数支持IP转发和对源地址进行检查:
1
2
3
4
echo 1 > /proc/sys/net/ipv4/conf/all/forwarding
echo 2 > /proc/sys/net/ipv4/conf/default/rp_filter 
echo 2 > /proc/sys/net/ipv4/conf/all/rp_filter 
echo 0 > /proc/sys/net/ipv4/conf/br0/rp_filter





给CoreMail服务器设置默认路由
    设置默认路由的原因就在于要将所有的流量都返回到haproxy,让haproxy修改其源地址为haproxy的地址。

1
2
3
4
5
6
7
8
首先在网卡的配置文件中已经通过gateway了设置了默认路由,默认路由的地址就是Haproxy的地址,又因为
系统本身所在的网段默认是从eth0接口出去没有设置默认路由到Haproxy地址,所以需要额外添加一条同网段的
路由信息。添加后的路由表的信息如下
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.16.35.0     172.16.35.206   255.255.255.0   UG    0      0        0 eth0  #添加的路由
172.16.35.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
0.0.0.0         172.16.35.206   0.0.0.0         UG    0      0        0 eth0 #在网卡配置文件中添加的



到此为此基于TProxy的Haproxy全透明代理完成了。

HAproxy的全透明代理还有第二种方法实现,那就是把两台CoreMail服务器单独划一个子网由HAproxy做网关,CoreMail的默认网关指向Haproxy,并且HAproxy要实现NAT,将返回的数据包源地址修改成自己的地址。限于篇幅这里就不介绍HAPROXY的实现TPROXY的第二种方法了。

国内关于HAproxy的全透明模式的博文很少很少,大多数都是在问这个问题。本文我也有很多地方是一知半解,只是实现了全透明的功能,后期将会介绍下网桥模式的一些理论。
 
分享到:
评论

相关推荐

    haproxy透明代理配置TPROXY1

    【haproxy透明代理配置TPROXY1】 haproxy是一款强大的负载均衡器,它能够实现高可用性和高性能的网络流量分发。在本实验环境中,我们使用haproxy的TPROXY(Transparent Proxy)模式来实现透明代理,使得客户端在不...

    Haproxy高可用代理一键部署脚本

    Haproxy高可用代理一键部署脚本 使用yum的方式,交互式部署Haproxy高可用代理平台 亲测有效!

    构建HAProxy高性能反向代理架构

    HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。

    反向代理负载均衡HAPROXY最佳实践

    ### 反向代理负载均衡HAPROXY最佳实践 #### 集群概念与作用 在探讨HAPROXY在反向代理负载均衡中的最佳实践之前,我们首先需要理解集群的基本概念及其作用。集群(Cluster)是一种将多台计算机通过网络连接起来共同...

    CentOS7—HAProxy安装与配置详解

    Haproxy下载地址:http://pkgs.fedoraproject.org/repo/pkgs/haproxy/ 关闭SElinux、配置防火墙 1、vi /etc/selinux/config #SELINUX=enforcing #注释掉 #SELINUXTYPE=targeted #注释掉 SELINUX=disabled #增加 :wq...

    用haproxy实现RDP会话负载均衡

    用haproxy实现RDP会话负载均衡 HAProxy是一款免费、快速、可靠的解决方案,提供高可用性、负载均衡和基于TCP和HTTP应用的代理。...HAProxy是一个非常强大和灵活的解决方案,适用于各种负载均衡和代理需求。

    Go-k8s使用多Haproxy自动发现代理Lb

    本文将深入探讨如何利用Haproxy作为负载均衡器,并通过Go-k8s库实现多Haproxy的自动发现和代理。这有助于提高服务的可用性和可扩展性,确保在动态环境下如k8s中的服务能够平稳运行。 首先,了解Haproxy的基本概念。...

    haproxy安装配置文档

    当前,HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式下,HAproxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且...

    haproxy负载代理工具

    1. **Web服务器集群**:在大型网站中,HAProxy作为前端代理,将用户的HTTP请求分发到多台Web服务器,提高响应速度和网站的可扩展性。 2. **数据库集群**:HAProxy也可以用于数据库负载均衡,例如MySQL,分发SQL请求...

    haproxy安装 TCP转发

    标题中的“haproxy安装 TCP转发”意味着我们将讨论如何在Linux系统上安装并配置HAProxy,一个流行的开源负载均衡器,用于实现TCP流量的转发。HAProxy被广泛应用于Web服务,因为它能有效地分发网络负载,提高服务的...

    haproxy安装与部署

    HAProxy 是一种高性能的反向代理服务器软件,提供高可用性、负载均衡和基于 TCP 和 HTTP 应用的代理,支持虚拟主机。HAProxy 是一种免费、快速并且可靠的一种解决方案,特别适用于那些负载特大的 web 站点,这些站点...

    haproxy-2.5.5 windows版 简单易用

    haproxy-2.5.5 Windows版是一个高效且易用的负载均衡器和反向代理软件,专为在Windows操作系统环境下运行而设计。本文将详细介绍haproxy的特性和功能,以及如何在Windows上安装和配置。 haproxy是一款开源的高性能...

    haproxy代理后端https网站

    haproxy代理后端https网站

    haproxy-1.8.23-1.el7.x86_64.rpm haproxy 1.8.23 rpm包

    haproxy-1.8.23 RPM包 for Centos7 rpm -ivh 安装即可,软件目录:/usr/local/haproxy-1.8.23 配置文件: /etc/haproxy/haproxy.cfg 可通过 systemctl 来进行 start 、stop 、restart 可通过 systemctl enable...

    Haproxy-1.9.4.rar

    HAProxy 是一个使用C语言编写、免费、快速、可靠的一种代理解决方案,支持高可用性、负载均衡特性,同时适用于做基于TCP和HTTP的应用的代理。对于一些负载较大的Web站点,使用HAProxy特别合适。HAProxy能够支撑...

    haproxy-2.3.2-win64

    haproxy-2.3.2-win64是一款专为Windows 64位操作系统设计的高性能、免费的负载均衡器和反向代理软件。由Cygwin64编译环境构建,它允许在Windows平台上实现与Linux系统类似的Unix-like功能。Cygwin是一种GNU和开源...

    haproxy1.7 最新版本

    haproxy(High Availability Proxy)是一款开源的、高性能的负载均衡器和反向代理服务器,广泛应用于互联网服务的高可用性和负载分发。haproxy1.7是该软件的一个较新版本,发布于2016年,相较于之前的版本,它包含了...

Global site tag (gtag.js) - Google Analytics