智汇华云 | 负载均衡源地址可见技术

天天见闻 天天见闻 2022-12-13 软件 阅读: 129
摘要: 在非网关型负载均衡器中,通常使用FullNat模式。在这种模式下,客户端访问后端服务器的源IP在负载均衡器上会被改变,导致在后端服务器上服务不能正确确定客户端的真实IP地址。本文介绍了一种FullNat模式下负载均衡的源地址可见方法。负载均衡有三种模式:DR,NAT,Tunnel。四层流量通常是TCP和UDP协议报文。TCP流量是TOA来实现源地址可见。客户端用户请求数据包到达负载均衡器时,负载均衡器在数据包的 tcp option 中插入源IP信息。

摘要

在非网关型负载均衡器中,通常使用FullNat模式。在这种模式下,客户端访问后端服务器的源IP在负载均衡器上会被改变,导致在后端服务器上服务不能正确确定客户端的真实IP地址。在一些应用场景下,为了实现安全或者大数据分析等应用,需要感知客户端的真实IP。本文介绍了一种FullNat模式下负载均衡的源地址可见方法。

概述

负载均衡有三种模式:DR,NAT,Tunnel。FullNat模式在NAT模式下增加了源IP NAT。FullNat模式的优点:解决了NAT对Director和RS要求在同一个vlan的问题,适用更复杂的部署形式不要求配置Director作为网关,Director与RS可以通过三层通讯。缺点:RS看不到客户端真实IP。

为了解决后端服务器感知客户端真实IP,本文介绍了如下的方法。

四层源地址可见

四层流量通常是TCP和UDP协议报文。源地址可见的通常方法是在报文中某些字段携带客户端的真实IP。在后端通过内核模块来获取客户端IP。

TCP源地址可见

TCP流量是TOA来实现源地址可见。TOA 名字全称是 tcp option address,是 FullNat 模式下能够让后端服务器获取客户端IP的一种实现方式,它的基本原理比较简单。

客户端用户请求数据包到达负载均衡器时,负载均衡器在数据包的 tcp option 中插入源IP信息。

数据包到达后端服务器(装有 toa 内核模块)后,应用程序正常调用 getpeername 系统函数来获取连接的源端IP地址。

由于在 toa 代码中 hook(修改)了 inet_getname 函数(getpeername 系统调用对应的内核处理函数),该函数会从 tcp option 中获取负载均衡器填充的源IP信息。

这样后端服务器应用程序就获取到了真实客户端IP,而且对应用程序来说是透明的。

TCP头部格式如下:

在option选项部分携带客户端的IP地址。

IPv4 TOA格式

opcode

opsize

port

clientIP

opcode: opcode = 254

opsize: toa 大小 8 字节

port: 客户端端口

clientIP: 客户端 IP(4 字节)

注:opsize 大小包含了自身opsize(2B) + port(2B) + ip(4B)

修改option的时机

负载均衡器需要对每个 tcp 数据包都要插入 toa 信息么?如果这样会影响到 负载均衡器 整体性能的,而且后端服务器也没必要对每个 tcp 数据包进行解析,当然也很影响服务器性能。其实只需要在第 3 次握手 ack 数据包中插入 toa 选项即可,后端服务器从 ack 数据包中解析并获取即可。

后端服务器上获取客户端IP获取。

TCP协议栈中处理三次握手的 ack 数据包的函数是tcp_v4_syn_recv_sock,完成连接的建立,并创建 newsock。在TOA内核模块中修改

1.hook tcp_v4_syn_recv_sock_toa函数,从TCP的skb中获取tcp option的携带的IP信息,保存到socket中

2. Hook inet_getname,应用程序在调用getpeername时,会使用inet_getname_toa函数处理,从socket中将保存的ip信息返回

源码参考

UDP源地址可见

UDP使用UOA来实现源地址可见。UDP报文头部没有option字段,通常在IP头部的option中携带客户端IP。另外UDP是没有连接的,没有三层握手,通常是在前面几个报文中携带信息。

具体实现可以参考:

七层源地址可见

七层的负载均衡通常通过反向代理来实现,如Nginx和Haproxy。七层流量通常是头的该字段中获取得到。

X-Forwarded-For 是一个 )标准之中。

X-Forwarded-For 请求头格式非常简单,就这样:

X-Forwarded-For: client, proxy1, proxy2

可以看到,XFF 的内容由「英文逗号 + 空格」隔开的多个部分组成,最开始的是离服务端最远的设备 IP,然后是每一级代理设备的 IP。

如果一个 标准,服务端最终会收到以下信息:

X-Forwarded-For: IP0, IP1, IP2

下面以NGINX为例,说明配置方法。

在Nginx配置文件中添加:

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

$proxy_add_x_forwarded_for会保存X-Forwarded-For中已有的值,并且追加$remote_addr的值,使用逗号隔开。

如果之前X-Forwarded-For中没有值,则修改后X-Forwarded-For中只有$remote_addr的值。

例子:

A(client)—B(Nginx1)—C(Nginx2)—D

A为客户端,B和C为Nginx反向代理,D为服务端

A访问B时,X-Forwarded-For为空,$remote_addr为A的IP,故B转发到C时附带的Header头X-Forwarded-For即为A的IP;

B访问C时,X-Forwarded-For为A的IP,$remote_addr为B的IP,此时C转发到D附带的Header头X-Forwarded-For即为A的IP,B的IP;

C访问D时,D就可以拿C传来的X-Forwarded-For Header头来分析源IP。

其他相关
电脑option是哪个键

电脑option是哪个键

作者: 天天见闻 时间:2023-10-11 阅读: 84
计算机option是哪个键Option键是苹果计算机键盘上的键,类似于Windows计算机键盘上的Alt键。Option键可用于配合其他键来实现某些特殊功能,例如输入特殊符号或进入系统设置界面。因此,Option键在苹果计算机的使用中非常常用。...

如何修改和关闭端口1433

作者: 天天见闻 时间:2023-03-15 阅读: 83
1433端口是 Sql Server 数据库远程连接所用的端口,黑客也常常用此端口入侵服务器。因此,网站和 Sql Server 数据库在同一台服务器,应该把1433端口关闭以绝后患;如果它们分别在不同的服务器,也要修改1433端口,并且把服务器隐藏起来。不过,修改1433端口和隐藏服务器后,虽然可以躲过一般扫描,但还是可以通过端口扫描工具获取到修改后的端口,所以还得做相应的防范。  sql server 2000 与 sql server 2005 以上版本修改和关闭1433端口的方法不一样,下面将分别介绍。...
Java中的多人游戏。将客户端(玩家)连接到其他客户端创建的游戏

Java中的多人游戏。将客户端(玩家)连接到其他客户端创建的游戏

作者: 天天见闻 时间:2023-03-14 阅读: 87
服务器可以将它们发送给所有客户端(您不需要点对点网络就可以让客户端B向客户端A发送一些数据),因此客户端A能够在客户端B的位置绘制字符图块,我在这篇文章的结尾添加了一个Java示例;Socket socket = listener.accept();try;writerChannel.flush();System.out.println(line)listener.close()...
RS485通讯转WiFi模块、RS232/485转WiFi模块Modbus RTU转Modbus TCP

RS485通讯转WiFi模块、RS232/485转WiFi模块Modbus RTU转Modbus TCP

作者: 天天见闻 时间:2022-12-16 阅读: 145
UDP工作模式, MODBUS协议转换模式;IBF105是贝福科技开发的一款工业级RS232/485和WiFi之间协议转换器。IBF105系列产品包括电源调理,模拟开关切换、RS232接口通信、RS485接口通信和WiFi网络接口通信。集成WiFi接口,串口通信最高波特率高达1Mbps,具有TCP Server,TCP Client,UDP以及MODBUS协议转换等工作模式,可以通过手机联网进行设置。传输距离: RS232 - 15米,WiFi内置天线 - 约20米,也可以设置为MODBUS RTU转MODBUS TCP通讯协议。...
解密负载均衡技术和负载均衡算法

解密负载均衡技术和负载均衡算法

作者: 天天见闻 时间:2022-12-04 阅读: 124
什么是负载均衡技术 负载均衡器是一种软件或硬件设备,它起到了将网络流量分散到一组服务器的作用,可以防止任何一台服务器过载。负载均衡算法就是负载均衡器用来在服务器之间分配网络流量的逻辑(算法是一组预定义的规则),有时候也叫做负载均衡的类型。负载均衡算法的种类非常多,包括从简单的轮询负载均衡算法到基于响应状态信息的自适应负载均衡算法。 负载均衡算法的选择会影响负载分配机制的有效性,从而影响性能和业务连续性(也就是对外承诺的SLA),选择正确的负载均衡算法会对应用程序性能产生重大影响。...
美空为什么会火?

美空为什么会火?

作者: 天天见闻 时间:2022-02-21 阅读: 2086
在美空成立之初,其中有三分之二是模特,三分之一是娱乐圈的各类明星、艺人。但主打美女牌的“野模”第一平台的美空网用短短一年时间,在时尚圈获得极大关注和热捧。在2008年美空网开幕庆典上,华谊王中磊、搜狐张朝阳、奇虎360 周鸿、松雷集团曾庆荣、企业家汪小菲,知名艺人黄渤等纷纷到场捧场。马月认为美空之所以能火起来是赶上了网络的性感时代。...
我来说两句

年度爆文