haproxy 4层协议下实现ip透传功能

公司有业务场景,利用了haproxy功能,后端服务需要记录应用端的来源,以便审计等用处。

haproxy分为4层与7层,我们的业务场景是使用4层tcp协议。

经过一番折腾,终于搞定了,下面记录下。

1.haproxy配置
下面是harpoxy的相关配置,重点是后端服务处的check send-proxy 选项,才实现了ip透传功能。

global

        daemon

        nbproc 2

        user root

        group root

        maxconn 60000

        tune.maxaccept -1

        spread-checks 5

        stats bind-process 1

        stats socket 127.0.0.1:13 mode 0666 level admin

defaults

        log global

        option dontlognull

        option  forwardfor

        option accept-invalid-http-response

        mode http

        retries 3

        option redispatch

        timeout connect 5s

        timeout client 0s

        timeout server 0s

        timeout http-keep-alive 100s

        option http-keep-alive

        option http-server-close

listen status

        mode http

        bind *:14

        bind-process 1

        stats enable

        stats hide-version

        stats uri /deimos?stats

        stats realm Deimos\ Stats

        stats auth deimos:deimosgogogo

        stats refresh 5s

        stats admin if TRUE

frontend f_1208ee9c687d834bba12e600e03d3f60

        maxconn 60000

        bind 2.2.2.2:3306

        mode tcp

        default_backend 1208ee9c687d834bba12e600e03d3f60

backend 1208ee9c687d834bba12e600e03d3f60

        mode tcp

        balance roundrobin

        timeout check 2s

        server server0 1.1.1.1:3306 weight 1 check inter 2s fall 3 check send-proxy

        server server1 1.1.1.2:3306 weight 1 check inter 2s fall 3 check send-proxy

        server server2 1.1.1.3:3306 weight 1 check inter 2s fall 3 check send-proxy

2.客户端语言获取IP方法
由于我们用的是go客户端,下面是获取前端真实IP的方法,有现成的包可以使用,github.com/pires/go-proxyproto,其他语言应该也有类似的方法。

header,_ := c.ReadHeaderfromHaproxyProto()if header != nil {

c.ClientHost = fmt.Sprintf("%s:%v",header.SourceAddress.String(),fmt.Sprint(header.SourcePort))

}

proto "github.com/pires/go-proxyproto")// ReadHeaderfromHaproxyProto read header package from HaproxyProto func(c *Conn)ReadHeaderfromHaproxyProto()(*proto.Header,error){ return proto.Read(c.bufferedReader)

原文地址:https://blog.51cto.com/11142614/2432187

时间: 2024-10-20 07:52:13

haproxy 4层协议下实现ip透传功能的相关文章

Nginx多级反向代理下的IP透传

透传IP 为何要做透传IP 在使用了CDN做加速站点静态资源加速后,当用户请求的静态资源没能命中,此时CDN会到源站请求内容,那么此时访问源站的IP为CDN节点的IP,不仅如此,可能经我们的WAF防火墙和前端的负载均衡(SLB)后更不容易获取到真实的用户IP信息,我们如果要统计用户的访问IP和地区就变得比较麻烦,因为可能不是真实的IP,必须使用一个什么机制将用户IP传递到最终后端的应用服务器才行. 实验环境 访问流程 主机 IP配置 备注 Chrome 10.0.0.1 Windows浏览器 L

Internet层协议下IP协议

Internet层协议特征 运行于 OSI 网络层面向无连接的协议独立处理数据包分层编址尽力而为传输无数据恢复功能 Internet层主要包含IP.ICMP.ARP.RARP几个协议. 这一主要说IP协议 IP PDU 报头 第一行:4bit标识IP的协议版本好,现在通用的IPv4:4bit标识真个PDU报头的长度:8bit的分区服务:用来获得更好的服务,在旧标准中叫做服务类型,但实际上一直未被使用过.后改名为区分服务,只有在使用区分服务(DiffServ)时,这个字段才起作用.一般的情况下都不

深入理解Linux网络技术内幕——L4层协议与Raw IP的处理

我们简单了解下L4层协议和Raw IP是如何与IP层进行交互的. L4层协议 L4层协议可以通过静态编译和模块配置两种方式加入内核. 比较重要的协议如TCP.UDP.ICMP通常是静态编译至内核. 一些不常用的或者比较特殊的协议,则是通过内核配置加入内核.如IGMP,SCTP,IPIP等等. L4层协议的注册 L4层协议有net_protocol结构定义: /* This is used to register protocols. */ struct net_protocol { int (*

HAProxy客户端IP地址的透传

HAProxy客户端IP地址的透传 环境准备 server IP client 172.20.27.10 haproxy 172.20.27.20,192.168.27.10 nginx 192.168.27.21 nginx操作 1.首先对nginx的主配置中的日志做修改 [[email protected] ~]# vim /apps/nginx/conf/nginx.conf log_format access_json '{"@timestamp":"$time_is

SIM800L透传模式配置

UART1_SendString("AT+CIPCLOSE=1"); //关闭连接 delay_ms(100); Second_AT_Command("AT+CIPSHUT","SHUT OK",2); //关闭移动场景 Second_AT_Command("AT+CGCLASS=\"B\"","OK",2);//设置GPRS移动台类别为B,支持包交换和数据交换 Second_AT_Co

视频流网络透传分析

最近在翻看以前写的文档,把这篇word文档复制下来,保留一下. 序号 版本 作者 描述 1 V0.1 YJ.Yan 初始版本 2 V0.2 YJ.Yan 添加方案细节描述以及可参考方案 1.      基本概念 a)       NAT 网络地址转换(NAT,Network AddressTranslation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中.原因很简单,NAT不仅完美地解决了IP

OSI,TCP/IP,五层协议的体系结构,以及各层协议

以下整理的是计算机网络的OSI,TCP/IP,五层协议的体系结构,以及各层协议,便于以后查看: OSI分层,自上而下分别是:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层 TCP/IP分层:网络接口层(对应OSI的物理层和数据链路层),网际层(对应OSI的网络层,定义了标准的分组格式和协议,即IP协议,当前采用ip4,下一版为ip6),运输层(对应OSI的传输层),应用层(对应OSI的会话层,表示层和应用层) 五层协议分别为:物理层,数据链路层,网络层,传输层,应用层 物理层:作用:

OSI 七层模型和 TCP/IP 协议比较

OSI (Open System Interconnection), 开放式系统互联参考模型.从下到上七层模型功能及其代表协议: 物理层(Physical) :规定了激活.维持.关闭通信端点之间的机械特性.电气特性.功能特性以及过程特性.该层为上层协议提供了一个传输数据的物理媒体.Bit,比特.典型协议代表:EIA/TIA-232, EIA/TIA-499, V.35, V.24, RJ45, Ethernet, IEEE 802.3x(以太网) 物理层, FDDI(Fiber Distribu

TCP/IP中的传输层协议TCP、UDP

TCP提供可靠的通信传输,而UDP则常用于让广播和细节控制交给应用的通信传输. 传输层协议根据IP数据报判断最终的接收端应用程序. TCP/IP的众多应用协议大多以客户端/服务端的形式运行.客户端是请求的发起端,而服务端表示提供服务的意思,是请求的处理端.因此,作为服务端的程序有必要提前启动,准备接收客户端的请求.传输协议根据接收数据中的目标端口号识别目标处理程序. TCP.UDP比较 TCP提供可靠性传输.实行顺序控制或重发控制机制,还有流量控制和拥塞控制,提高网络利用率. UDP是不具备可靠