CN116939033A - 一种应用代理方法、装置及电子设备和存储介质 - Google Patents

一种应用代理方法、装置及电子设备和存储介质 Download PDF

Info

Publication number
CN116939033A
CN116939033A CN202210339702.7A CN202210339702A CN116939033A CN 116939033 A CN116939033 A CN 116939033A CN 202210339702 A CN202210339702 A CN 202210339702A CN 116939033 A CN116939033 A CN 116939033A
Authority
CN
China
Prior art keywords
data packet
application
proxy
link layer
request
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202210339702.7A
Other languages
English (en)
Inventor
汪国樑
黄富
林壮湧
王仁海
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sangfor Technologies Co Ltd
Original Assignee
Sangfor Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sangfor Technologies Co Ltd filed Critical Sangfor Technologies Co Ltd
Priority to CN202210339702.7A priority Critical patent/CN116939033A/zh
Publication of CN116939033A publication Critical patent/CN116939033A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/66Arrangements for connecting between networks having differing types of switching systems, e.g. gateways
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/30Definitions, standards or architectural aspects of layered protocol stacks

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本申请公开了一种应用代理方法、装置及一种电子设备和计算机可读存储介质,应用于代理网关设备,代理网关设备连接客户端,代理网关设备通过路由器或交换机连接应用服务器,该方法包括:接收客户端发送的请求数据包,并基于请求数据包的流量特征判断请求数据包是否为应用代理流量;若是,则创建第一映射关系,剥离请求数据包中的链路层信息以构建链路层数据包;基于tproxy机制将链路层数据包传输至应用层进行流量操作,在应用层基于链路层数据包重新构造待发送数据包;基于第一映射关系在待发送数据包中补充链路层信息以构造发送数据包;将发送数据包发送至应用服务器。本申请在代理网关设备进行应用代理的过程中实现了代理网关的透明部署。

Description

一种应用代理方法、装置及电子设备和存储介质
技术领域
本申请涉及通信技术领域,更具体地说,涉及一种应用代理方法、装置及一种电子设备和一种计算机可读存储介质。
背景技术
在相关技术中,采用零信任网关进行应用代理的方案为:用户配置零信任网关也即代理网关设备的IP地址和路由,应用部署需要配置零信任网关的IP地址以及应用服务器的IP地址,也即零信任网关配置以自身IP为目标的前置应用代理地址,并配置反向代理到上游应用服务器的IP地址。在上述方案中,客户端只能访问前置应用代理地址,零信任网关的部署对整个现网是可见不透明的,它需要被网络拓扑其他节点感知,也需要感知网络拓扑其他节点。
因此,如何在代理网关设备进行应用代理的过程中实现代理网关的透明部署是本领域技术人员需要解决的技术问题。
发明内容
本申请的目的在于提供一种应用代理方法、装置及一种电子设备和一种计算机可读存储介质,在代理网关设备进行应用代理的过程中实现了代理网关的透明部署。
为实现上述目的,本申请提供了一种应用代理方法,应用于应用层代理网关设备,所述代理网关设备连接客户端,所述代理网关设备通过路由器或交换机连接应用服务器,所述方法包括:
接收所述客户端发送的请求数据包,并基于所述请求数据包的流量特征判断所述请求数据包是否为应用代理流量;
若是,则基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系,剥离所述请求数据包中的所述链路层信息以构建链路层数据包;
基于tproxy机制将所述链路层数据包传输至应用层进行流量操作,并在所述应用层基于链路层数据包重新构造待发送数据包;
基于所述第一映射关系确定所述待发送数据包中的网络层信息对应的链路层信息,在所述待发送数据包中补充所述链路层信息以构造发送数据包;
将所述发送数据包发送至所述应用服务器。
其中,在所述应用层基于链路层数据包重新构造待发送数据包之后,还包括:
获取所述客户端的第一端口信息与所述代理网关设备的第二端口信息之间的第二映射关系;
基于所述第二映射关系将所述待发送数据包中的源端口信息替换为对应的第一端口信息。
其中,所述基于所述请求数据包的流量特征判断所述请求数据包是否为应用代理流量,包括:
基于所述请求数据包的IP头信息判断所述请求数据包是否为分片流量;
若所述请求数据包为分片流量,则基于所述请求数据包的IP信息判断所述请求数据包是否为应用代理流量;若所述请求数据包为非应用代理流量,则将所述请求数据包发送至网络协议栈,以便所述网络协议栈判断所述请求数据包是否为应用代理流量;
若所述请求数据包为非分片流量,则基于所述请求数据包的IP信息、端口信息和协议信息判断所述请求数据包是否为应用代理流量。
其中,所述基于所述请求数据包的流量特征判断所述请求数据包是否为应用代理流量,包括:
基于所述请求数据包的IP信息判断所述请求数据包是否为应用代理流量;
若是,则进入所述基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系的步骤;
若否,则将所述请求数据包发送至网络协议栈,以便所述网络协议栈判断所述请求数据包是否为应用代理流量。
其中,所述网络协议栈判断所述请求数据包是否为应用代理流量,包括:
所述网络协议栈中的第一挂载点收集完整的IP分片数据包数组,并扫描所述IP分片数据包数组中的首个分片数据包,判断所述首个分片数据包是否为应用代理流量;
若所述首个分片数据包为应用代理流量,则所述IP分片数据包数组进行重组得到IP分片重组数据包,所述网络协议栈中的第二挂载点判断所述IP分片重组数据包是否为应用代理流量;
若所述IP分片重组数据包为应用代理流量,则进入所述基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系的步骤;若所述IP分片重组数据包为非应用代理流量,则丢弃所述IP分片重组数据包;
若所述首个分片数据包为非应用代理流量,则基于本地网桥直接内核转发所述IP分片数据包数组。
其中,所述基于所述请求数据包的流量特征判断所述请求数据包为应用代理流量之后,还包括:
基于所述请求数据包的路由信息创建对应的邻居项;
相应的,在所述应用层基于链路层数据包重新构造待发送数据包之后,还包括:
根据所述待发送数据包对应的邻居项进行路径查找。
其中,所述基于所述请求数据包的流量特征判断所述请求数据包为应用代理流量之后,还包括:
基于所述请求数据包的路由信息在路由系统中创建路由项;
相应的,在所述应用层基于链路层数据包重新构造待发送数据包之后,还包括:
根据所述待发送数据包对应的路由项进行路径查找。
其中,所述接收所述客户端发送的请求数据包之前,还包括:
接收所述客户端发送的通信连接请求数据包;其中,所述通信连接请求数据包至少包括所述应用服务器的IP地址;
通过本地网桥的下游网口将所述通信连接请求数据包发送至所述本地网桥,以便所述本地网桥通过上游网口发送至所述应用服务器;
接收所述应用服务器回复的通信连接响应数据包;其中,所述通信连接响应数据包至少包括所述应用服务器的MAC地址;
通过所述上游网口将所述通信连接响应数据包发送至所述本地网桥,以便所述本地网桥通过所述下游网口发送至所述客户端;
建立所述代理网关设备与所述客户端之间、所述代理网关设备与所述应用服务器之间的通信连接。
其中,所述接收所述客户端发送的通信连接请求数据包之后,还包括:
创建所述客户端的MAC地址与所述下游网口之间的对应关系;
相应的,所述接收所述应用服务器回复的通信连接响应数据包之后,还包括:
创建所述应用服务器的MAC地址与所述上游网口之间的对应关系;
相应的,所述通过反向代理将所述发送数据包发送至所述应用服务器,包括:
通过反向代理将所述发送数据包通过所述上游网口发送至所述应用服务器。
其中,所述基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系,包括:
基于所述请求数据包中的链路层信息和网络层信息在共享内存中创建第一映射关系。
其中,所述基于所述请求数据包中的链路层信息和网络层信息在共享内存中创建第一映射关系,包括:
判断共享内存中是否存在所述请求数据包中的链路层信息和网络层信息之间的第一映射关系;
若否,则在所述共享内存中创建所述请求数据包中的链路层信息和网络层信息之间的第一映射关系,并创建所述第一映射关系的引用计数,并将所述引用计数设置为初始值;
若是,则增加所述第一映射关系的引用计数;
相应的,所述基于所述第一映射关系确定所述链路层数据包中的网络层信息对应的链路层信息之后,还包括:
减少所述第一映射关系的引用计数;
若所述引用计数减少为所述初始值,则销毁所述共享内存中的第一映射关系。
其中,所述构建链路层数据包之后,还包括:
在所述链路层数据包的预设位置插入所述第一映射关系;
相应的,所述基于所述第一映射关系确定所述链路层数据包中的网络层信息对应的链路层信息之前,还包括:
从所述链路层数据包的预设位置提取所述第一映射关系。
为实现上述目的,本申请提供了一种应用代理装置,应用于应用层代理网关设备,所述代理网关设备连接客户端,所述代理网关设备通过路由器或交换机连接应用服务器,所述装置包括:
判断模块,用于接收所述客户端发送的请求数据包,并基于所述请求数据包的流量特征判断所述请求数据包是否为应用代理流量;若是,则触发剥离模块的工作流程;
所述剥离模块,用于基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系,剥离所述请求数据包中的所述链路层信息以构建链路层数据包;
构造模块,用于基于tproxy机制将所述链路层数据包传输至应用层进行流量操作,并在所述应用层基于链路层数据包重新构造待发送数据包;
补充模块,用于基于所述第一映射关系确定所述待发送数据包中的网络层信息对应的链路层信息,在所述待发送数据包中补充所述链路层信息以构造发送数据包;
第一发送模块,用于通过反向代理将所述发送数据包发送至所述应用服务器。
为实现上述目的,本申请提供了一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上述应用代理方法的步骤。
为实现上述目的,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述应用代理方法的步骤。
通过以上方案可知,本申请提供的一种应用代理方法,应用于应用层代理网关设备,所述代理网关设备连接客户端,所述代理网关设备通过路由器或交换机连接应用服务器,该方法包括:接收所述客户端发送的请求数据包,并基于所述请求数据包的流量特征判断所述请求数据包是否为应用代理流量;若是,则基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系,剥离所述请求数据包中的所述链路层信息以构建链路层数据包;基于tproxy机制将所述链路层数据包传输至应用层进行流量操作,并在所述应用层基于链路层数据包重新构造待发送数据包;基于所述第一映射关系确定所述待发送数据包中的网络层信息对应的链路层信息,在所述待发送数据包中补充所述链路层信息以构造发送数据包;将所述发送数据包发送至所述应用服务器。
本申请提供的应用代理方法,流量经过代理网关设备前后,链路层信息在流量进入网络协议栈网桥阶段被剥离丢失,并在反向代理输出经过网桥阶段被完整还原,其他网络层信息和传输层信息基于tproxy机制透明传输到应用层,应用层直接往网络协议栈输出,保持网络层信息和传输层信息没有丢失,在应用代理过程中流量具有完整透明性。代理网关设备以直插式网桥部署方式透明部署在应用流量的必经之处,整个代理网关设备对用户访问以及上下游网络拓扑都是透明的,在代理网关设备进行应用代理的过程中实现代理网关的透明部署。本申请还公开了一种应用代理装置及一种电子设备和一种计算机可读存储介质,同样能实现上述技术效果。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:
图1为相关技术中零信任网关的部署结构图;
图2为相关技术中应用代理网关数据流工作原理图;
图3为本申请提供的一种代理网关设备的部署结构图;
图4为本申请提供的一种应用代理网关数据流工作原理图;
图5为根据一示例性实施例示出的一种应用代理方法的流程图;
图6为根据一示例性实施例示出的一种流量传输路径的示意图;
图7为根据一示例性实施例示出的一种网络协议栈进行路由决策的流程图;
图8为根据一示例性实施例示出的另一种应用代理方法的流程图;
图9为根据一示例性实施例示出的一种数据流透明的实现过程示意图;
图10为根据一示例性实施例示出的一种代理网关设备的结构图;
图11为根据一示例性实施例示出的一种切换网桥模式的GUI交互示意图;
图12为根据一示例性实施例示出的一种切换标准模式的GUI交互示意图;
图13为根据一示例性实施例示出的一种网口对部署的GUI交互示意图;
图14为根据一示例性实施例示出的一种应用部署的GUI交互示意图;
图15为根据一示例性实施例示出的一种应用代理装置的结构图;
图16为根据一示例性实施例示出的一种电子设备的结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。另外,在本申请实施例中,“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
在相关技术中,如图1所示,零信任网关的部署采用旁挂模式,也即部署之前客户端通过路由器或交换机连接应用服务器,部署之后客户端通过零信任网关连接应用服务器。采用零信任网关进行应用代理时,用户配置零信任网关也即代理网关设备的IP地址和路由,应用部署需要配置零信任网关的IP地址以及应用服务器的IP地址,也即零信任网关配置以自身IP为目标的前置应用代理地址,并配置反向代理到上游应用服务器的IP地址。
相关技术中应用代理网关数据流工作原理如图2所示,流量经过linux应用代理前后,无论2层、3层以及4层信息前后都发生改变,剥离过程中丢失,添加过程中无法进行填补,流量不具有透明性。不透明流量在linux系统中流转,本机必须设置代理网关设备的IP地址以及路由,流量才能从一张网卡eth0中接收通过网络协议栈传递到应用层端口并反向代理将处理后的数据从另外一张网卡eth1中发出,入口eth0对应代理网关设备的IP地址,eth1的选择取决于指向反向代理网关设备的IP地址的路由。
可见,在相关技术的方案中,客户端只能访问前置应用代理地址,零信任网关的部署对整个现网是可见不透明的,它需要被网络拓扑其他节点感知,也需要感知网络拓扑其他节点。部署过程需要联动现有网络拓扑进行更改,部署成本较高,用户也需要被动改变访问习惯,用户体验感较差。
因此,在本申请中,如图3所示,代理网关设备连接客户端,代理网关设备通过路由器或交换机连接应用服务器。交换机因为不需要使用接口MAC地址使得自身对二层网络透明,同样的零信任网关由于不需要配置IP地址从而使得自身对三层网络透明,代理网关设备不再作为网络拓扑上下游环节中需要预先配置的访问IP节点,自身也不再配置本机到达网络拓扑上下游环节其他节点的访问路由,也即无需配置零信任网关的IP地址和路由,实现部署前后对用户访问方式不变,效果变化无感知,提高了用户体验感。
应用部署无需配置零信任网关的IP地址,零信任网关本质是应用代理网关,由于不用配置零信任网关的IP地址,相应网关应用层(IP层以上tcp/http)也实现了5层透明,或者说是OSI 7层透明),使得自身7层应用数据包网络透明,如此一来,零信任网关的代理作用实现隐身,且功能没有受影响。
代理网关设备可以像二层交换机一样,以直插式网桥部署方式透明部署在应用流量的必经之处,整个设备对用户访问以及上下游网络拓扑都是透明的,实现了7层设备类似交换机一样的透明效果,降低了部署成本。
本申请中应用代理网关数据流工作原理如图4所示,netfilter为Linux防火墙系统,IPtables为Linux防火墙系统的重要组成部分,其主要功能是实现对网络数据包进出设备及转发的控制。netfilter IPtables对纳管应用流量打mark(标记),根据已打标记的流量应用路由策略和防火墙策略,纳管应用流量经由local lookback,走tproxy通道localsocket,tproxy为linux IPtables的透明代理功能,解决linux应用层local socket可以基于无IP(IP地址为0)监听非本机目标IP的流量,实现原理是IPtables在协议栈中流量接收过程中将skb软件的目标socket设置成本地无IP监听的local socket。
可见,在本申请中,流量经过linux的应用代理网关前后,链路层信息在流量进入网络协议栈网桥阶段被剥离丢失,并在反向代理输出经过网桥阶段被完整还原,其他网络层信息和传输层信息经过一系列netfilter规则路径设计最终tproxy透明传输到应用层nginx,应用层通过IP_transparent直接往网络协议栈输出,保持网络层信息和传输层信息没有丢失,流量具有完整透明性,也即流量从ingress网卡入口与egress网卡出口观察抓包,前后保证流量七元组(源/目IP、源/目MAC、源/目端口、应用传输协议)不变,达到透明效果,类似流量经过网桥或两层交换机的效果。
本申请实施例公开了一种应用代理方法,在代理网关设备进行应用代理的过程中实现了代理网关的透明部署。
参见图5,根据一示例性实施例示出的一种应用代理方法的流程图,如图5所示,包括:
S101:接收所述客户端发送的请求数据包,并基于所述请求数据包的流量特征判断所述请求数据包是否为应用代理流量;若是,则进入S102;
本实施例的执行主体为应用层代理网关设备,包括一对网口:入口与出口,根据客户端请求应用服务器方向流量进入系统是入口,流量流出系统是出口,相应的应用服务器响应客户端方向是从出口进入,从入口流出。
在具体实施中,可以由XDP(eXpress Data Path,Linux内核网络栈的最底层)挂载网卡驱动或内核,根据请求数据包的流量特征判断流量是否为代理应用流量即纳管应用流量,纳管应用例如财务应用、企业管理应用等,相应的,纳管应用流量例如登陆认证、访问鉴权以及流量加解密处理等,未纳管流量主要包括两类,一类为未纳管应用流量,例如开放论坛、在线学习等应用流量,另一类为其他公共网络应用及流量,例如DHCP(动态主机配置协议,Dynamic Host Configuration Protocol)、DNS(域名系统,Domain Name System)等,又如ARP(地址解析协议,Address Resolution Protocol)、ICMP(Internet控制报文协议,Internet Control MessageProtocol)等具有以太网职能的流量。本步骤中的流量特征可以包括IP地址、端口和应用传输协议。
不论是客户端请求应用服务器方向,还是应用服务器响应客户端方向,若请求数据包为应用代理流量,则进入linux网络内核协议栈准备上行处理。若请求数据包为非应用代理流量,则直接选择从另一个网口转发,bypass(不流经)代理网关设备,客户端请求应用服务器方向流量从入口进则出口bypass代理网关设备,应用服务器响应客户端方向流量从出口进则入口bypass代理网关设备。可见,代理网关设备可以根据请求数据包的流量特征决定流量经过应用层代理网关设备还是bypass应用层代理网关设备,当应用层代理网关故障情况下流量bypass,不管路径如何流量都是透明的。
流量传输路径如图6所示,客户端(client)的IP地址为IP0,代理网关设备基于nginx进行路由决策,应用服务器(sever)IP地址为IP2,客户端请求应用服务器方向的传输路径为:1→eth0→2→3→eth1→3,应用服务器响应客户端方向的传输路径为:4→eth1→5→6→eth0→6。
针对IP分片的场景,由于XDP无法进行IP分片重组,无法在XDP中进行IP分片应用流量特征甄别,针对IP分片场景由XDP将流量统一引入到linux网络内核协议栈,利用网络内核对IP分片的重组能力,IP分片流量特征进行路径决策。
作为一种可行的实施方式,所述基于所述请求数据包的流量特征判断所述请求数据包是否为应用代理流量,包括:基于所述请求数据包的IP头信息判断所述请求数据包是否为分片流量;若所述请求数据包为分片流量,则基于所述请求数据包的IP信息判断所述请求数据包是否为应用代理流量;若所述请求数据包为非应用代理流量,则将所述请求数据包发送至网络协议栈,以便所述网络协议栈判断所述请求数据包是否为应用代理流量;若所述请求数据包为非分片流量,则基于所述请求数据包的IP信息、端口信息和协议信息判断所述请求数据包是否为应用代理流量。在具体实施中,XDP解析请求数据包,从IP头中可以读取该请求数据包是否为分片流量。XDP针对未分片流量,匹配IP、端口和协议进行路由决策,针对分片流量,仅匹配IP进行路由决策,纳管IP流量全部发送至网络协议栈,后续在网络协议栈中继续根据端口进行路由决策,非纳管应用流量全部bypass到另一端网口。
作为另一种可行的实施方式,所述基于所述请求数据包的流量特征判断所述请求数据包是否为应用代理流量,包括:基于所述请求数据包的IP信息判断所述请求数据包是否为应用代理流量;若是,则进入所述基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系的步骤;若否,则将所述请求数据包发送至网络协议栈,以便所述网络协议栈判断所述请求数据包是否为应用代理流量。在具体实施中,无论是分片流量还是未分片流量,XDP都仅匹配IP进行路由决策,纳管IP流量全部发送至网络协议栈,后续在网络协议栈中继续根据端口进行路由决策,非纳管应用流量全部bypass到另一端网口。
进一步的,所述网络协议栈判断所述请求数据包是否为应用代理流量,包括:所述网络协议栈中的第一挂载点收集完整的IP分片数据包数组,并扫描所述IP分片数据包数组中的首个分片数据包,判断所述首个分片数据包是否为应用代理流量;若所述首个分片数据包为应用代理流量,则所述IP分片数据包数组进行重组得到IP分片重组数据包,所述网络协议栈中的第二挂载点判断所述IP分片重组数据包是否为应用代理流量;若所述IP分片重组数据包为应用代理流量,则进入所述基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系的步骤;若所述IP分片重组数据包为非应用代理流量,则丢弃所述IP分片重组数据包;若所述首个分片数据包为非应用代理流量,则基于本地网桥直接内核转发所述IP分片数据包数组。
在具体实施中,如图7所示,分片流量在NF_BR_PRE_ROUTING挂载点(也即第一挂载点)进行IP分片克隆收集分段数组,收集tcp(传输控制协议,Transmission ControlProtocol)分段下的完整IP分片数据包数组,并扫描IP分片数据包数组中的首个分片,基于IP和端口进行路由决策。如果是应用代理流量,则丢弃IP分片数据包数组,因为整组IP分片的本体数据包已经进入了IP层重组成功。如果不是应用代理流量,则基于本地网桥直接内核转发整个IP分片数据包数组。IP分片重组数据包在NF_INET_LOCAL_IN挂载点(也即第二挂载点)基于IP和端口进行路由决策,如果是应用代理流量,则继续内核协议栈处理,如果不是应用代理流量,则将IP分片重组数据包从内核协议栈中丢弃处理。可见,在第一挂载点和第二挂载点对IP分片流量进行前后流程夹击处理,确保IP分片流量要么网桥转发,要么上行应用代理,做到不重复。
当然,本步骤也可以不采用XDP,可以在本地网桥中基于二层ebtables结合netfilter网络包路径规则对网卡入口进入内核流量甄别与目标路径决策,也可以基于修改网络内核或创建hook挂载点内核程序,基于netfilter网络包路径,对网络入口流量进行甄别与目标路径调用内核函数进行决策,还可以基于定制智能网卡方案或修改网卡驱动,对网卡入口流量甄别与决策,在此不进行具体限定。
S102:基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系,剥离所述请求数据包中的所述链路层信息以构建链路层数据包;
在本步骤中进行上行流量透明处理,基于请求数据包中的链路层信息和网络层信息为流量下行创建链路层的透明映射关系,以便在下行流量透明处理时应用。此处的链路层信息可以包括源MAC地址、目的MAC地址、vlantcid(vlan信息),网络层信息包括源IP地址、目的IP地址,创建的第一映射关系可以包括:源IP地址—源MAC地址、目的IP地址—目的MAC地址、源IP地址+源MAC地址+目的IP地址+目的MAC地址—vlantcid,还可以包括源IP地址+源MAC地址+目的IP地址+目的MAC地址—Qing、mpls、pppoe、lwapp、capwap、wltp等其他链路层以太网类型数据,达到扩展多种流量透明的效果。
作为一种可行的实施方式,所述基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系,包括:基于所述请求数据包中的链路层信息和网络层信息在共享内存中创建第一映射关系。在具体实施中,可以基于linux内核模块共享内存创建共享数据结构(如hash table),也可以基于linux bpf map共享内存创建共享数据映射,用于存储创建的第一映射关系。
在链路层,剥离请求数据包中的所述链路层信息,可以包括源MAC地址、目的MAC地址和vlan tcid, 当然,还可以包括Qing、mpls、pppoe、lwapp、capwap、wltp等其他链路层以太网类型数据,构建链路层数据包。
进一步的,在无本地IP地址和路由情形下,上行流量透明处理还需要为流量下行创建从网络层到链路层的下一跳路由。作为一种可行的实施方式,可以基于请求数据包的路由信息创建对应的邻居项。在具体实施中,基于linux arp邻居系统创建应用流量反向代理到应用服务器的下一跳的网关邻居项。作为一种另可行的实施方式,可以基于请求数据包的路由信息在路由系统中创建路由项。在具体实施中,利用路由系统在请求数据包中提取路由信息,在路由系统中创建路由项,从而实现路径的查找。
S103:基于tproxy机制将所述链路层数据包传输至应用层进行流量操作,并在所述应用层基于链路层数据包重新构造待发送数据包;
在具体实施中,上行流量透明传输即将链路层数据包经过网络层、传输层透明传输至应用层,保持IP和端口透明,也即保持网络层信息和传输层信息透明,可以基于netfilter包路径与本地路由策略规则以及socket tproxy实现:
IPtables -t mangle -I TPROXY_TRANSPARENT -i tproxy_br0 -p tcp -msocket -j DIVERT_TRANSPARENT;
IPtables -t mangle -I TPROXY_TRANSPARENT -i tproxy_br0 -p tcp -m set--match-set transparent_https dst,dst -j TPROXY --tproxy-mark 0x2/0x2 --on-port 50065;
IPtables -t mangle -I TPROXY_TRANSPARENT -i tproxy_br0 -p tcp -mset--match-set transparent_http dst,dst -j TPROXY --tproxy-mark 0x2/0x2 --on-port 50064;
IPtables -t filter -I INPUT -i tproxy_br0 -p tcp -j ACCEPT;
ebtables -t nat -A TPROXY_TRANSPARENT -p IPv4 --logical-in tproxy_br0--IP-proto tcp -j redirect;
IPset create transparent_https hash:IP,port;
IPset create transparent_http hash:IP,port;
IP rule add fwmark 2 lookup 100;
IP route add local 0.0.0.0/0 dev lo table 100.
当然,也可以基于netfilter包路径与本地路由策略规则以及raw tproxy实现,在此不进行具体限定。
链路层数据包经过网络层、传输层透明传输至应用层后,在应用层实现应用透明方向代理,也即上行流量透明传输流量,基于nginx、apache或自实现的反向代理服务器对传输至应用层的流量进行流量操作,例如流量鉴权,基于链路层数据包重新构造待发送数据包进行流量透明下行传输。
下行流量透明传输将流量从应用层跳过传输层和网络层,直接传输到链路层,跳过了本地IP路由的限制,并保持流量的IP和端口透明下行流量透明传输可以基于socketbind to device实现,也即基于linuxIP_transparentsocket实现:
s=socket(AF_INET,SOCK_STREAM,0);
setsockopt(s,IPPROTO_IP,IP_TRANSPARENT,(constvoid*)&value,sizeof(int));
setsockopt(s,SOL_SOCKET,SO_BINDTODEVICE,(constvoid*)"tproxy_br0",strlen("tproxy_br0")).
当然,也可以基于linuxrawsocket实现,在此不进行具体限定。
进一步的,在所述应用层基于链路层数据包重新构造待发送数据包之后,获取所述客户端的第一端口信息与所述代理网关设备的第二端口信息之间的第二映射关系;基于所述第二映射关系将所述待发送数据包中的源端口信息替换为对应的第一端口信息。在具体实施中,可以扩展setsockopt选项SO_SANF_OPT_TPORT,用于从应用层传入socket与第二映射关系:setsockopt(s,SOL_SOCKET,SOCKET_OPT_SF_SPORT,(constvoid*)连接映射数据,连接映射数据结构长度),内核中添加setsockopt扩展选项SO_SANF_OPT_TPORT的回调钩子,监听应用层传入的第二映射关系,保存在内核中。在下行流量透明传输过程中,在内核数据出口hookNF_BR_POST_ROUTING中根据应用层传入的第二映射关系,以待发送数据包中的源端口信息查找对应的客户端的第一端口信息,将待发送数据包中的源端口信息替换为查找到的客户端的第一端口信息,也即将代理网关设备请求源端口变更为客户端请求源端口。另外,对于应用服务器发送至客户端的回复数据包,在上行流量透明传输过程中,在内核数据入口hookNF_BR_PRE_ROUTING中根据应用层传入的第二映射关系,源目IP端口互换后,以回复数据包中的目的端口信息查找对应的代理网关设备的第二端口信息,将回复数据包中的目的端口信息替换为查找到的代理网关设备的第二端口信息,也即将客户端目的端口变更为代理网关设备目的端口。
流量下行传输到链路层的过程中,根据已创建的待发送数据包对应的邻居项或路由项进行路径查找,下一跳网关MAC输出。
S104:基于所述第一映射关系确定所述待发送数据包中的网络层信息对应的链路层信息,在所述待发送数据包中补充所述链路层信息以构造发送数据包;
在本步骤中,根据已创建的第一映射关系进行匹配,还原链路层信息,也即的源MAC地址、目的MAC地址和vlan tcid,从而构造发送数据包。
S105:将所述发送数据包发送至所述应用服务器。
在本步骤中,将链路层构造的发送数据包发送至应用服务器,服务器对其进行响应,代理网关设备接收响应数据包,然后反向代理发送给客户端,整个数据包交互过程七元组不变,流量在代理网关设备传递过程中透明。
本申请实施例提供的应用代理方法,流量经过代理网关设备前后,链路层信息在流量进入网络协议栈网桥阶段被剥离丢失,并在反向代理输出经过网桥阶段被完整还原,其他网络层信息和传输层信息基于tproxy机制透明传输到应用层,应用层直接往网络协议栈输出,保持网络层信息和传输层信息没有丢失,在应用代理过程中流量具有完整透明性。代理网关设备以直插式网桥部署方式透明部署在应用流量的必经之处,整个代理网关设备对用户访问以及上下游网络拓扑都是透明的,在代理网关设备进行应用代理的过程中实现代理网关的透明部署。
在上述实施例的基础上,作为一种优选实施方式,所述基于所述请求数据包中的链路层信息和网络层信息在共享内存中创建第一映射关系,包括:判断共享内存中是否存在所述请求数据包中的链路层信息和网络层信息之间的第一映射关系;若否,则在所述共享内存中创建所述请求数据包中的链路层信息和网络层信息之间的第一映射关系,并创建所述第一映射关系的引用计数,并将所述引用计数设置为初始值;若是,则增加所述第一映射关系的引用计数;相应的,所述基于所述第一映射关系确定所述链路层数据包中的网络层信息对应的链路层信息之后,还包括:减少所述第一映射关系的引用计数;若所述引用计数减少为所述初始值,则销毁所述共享内存中的第一映射关系。
在具体实施中,在上行流量透明处理过程中,为第一映射关系创建引用计数。首先判断共享内存中是否存在需要创建的第一映射关系,若否,则创建第一映射关系和对应的引用计数,并将引用计数设置为初始值,例如1;若是,则增加第一映射关系的引用计数,例如增加1。在下行流量透明处理过程中,减少第一映射关系的引用计数,例如减少1。检查引用计数,若减少为初始值,例如减少为1,则销毁共享内存中的第一映射关系。
由此可见,基于linux共享内存方案结合tcp/udb流量发生的上下行周期,及时处理映射内存的创建与销毁,建立链路层的高级安全透明信息映射,可以防止网络流量DDOS攻击导致内存泄露造成设备内存耗尽不可用,做到安全可靠。
在上述实施例的基础上,作为一种优选实施方式,所述构建链路层数据包之后,还包括:在所述链路层数据包的预设位置插入所述第一映射关系;相应的,所述基于所述第一映射关系确定所述链路层数据包中的网络层信息对应的链路层信息之前,还包括:从所述链路层数据包的预设位置提取所述第一映射关系。
在具体实施中,可以基于linux网络包skb tcp/udp有效载荷自定义修改,也即基于内核hook拦截提取存储在tcp/udp的有效载荷数据中,插入链路层信息到数据包的开头或结尾,并在流量内核传输阶段直接基于tcp/udb应用数据缓存的提取匹配填充链路层信息。在上行流量透明处理过程中,在NF_BR_PRE_ROUTING中提取链路层信息追加存储在tcp/udp的数据中以结构化保存,重新计算校验和,继续通过网络协议栈到达应用层,应用层处理完反向代理往上游发出请求在下行流量透明处理过程中,在NF_BR_POST_ROUTING中提取tcp/udp的数据,读取对应结构化的链路层信息,做流量透明处理,并从tcp/udp的数据中删除此部分数据,重新计算校验和,继续通过网络协议栈发出。由于skb随上行下行过程是网络协议剥离和添加过程,而tcp/udb的有效载荷始终不变,可以贯穿内核与应用做到共享,而且数据量不会随着系统使用时间越长造成内存泄露。
本申请实施例公开了一种应用代理方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。具体的:
参见图8,根据一示例性实施例示出的另一种应用代理方法的流程图,如图8所示,包括:
S201:接收所述客户端发送的通信连接请求数据包;其中,所述通信连接请求数据包至少包括所述应用服务器的IP地址;
在具体实施中,当客户端希望与应用服务器通信时,客户端只知道应用服务器的IP地址,不知道应用服务器的MAC地址,首先构造由应用服务器IP解析MAC地址的arp数据包,也即通信连接请求数据包:
源IP:客户端主机IP;
目的IP:服务器主机IP;
源MAC:客户端主机MAC;
目的MAC:ffffff ffffff;
发送MAC:客户端主机MAC;
目标MAC:000000 000000。
如图9所示,arp请求数据包广播发往应用服务器,arp广播请求数据包先被应用层代理网关设备接收截获。
S202:通过本地网桥的下游网口将所述通信连接请求数据包发送至所述本地网桥,以便所述本地网桥通过上游网口发送至所述应用服务器;
在具体实施中,通信连接请求数据包由下游网口经本地网桥bypass上游网口转发服务器主机,同时本地网桥完成下游网口的MAC地址映射学习过程,也即创建客户端的MAC地址与下游网口之间的对应关系。
S203:接收所述应用服务器回复的通信连接响应数据包;其中,所述通信连接响应数据包至少包括所述应用服务器的MAC地址;
在具体实施中,应用服务器生成arp响应报文也即通信连接响应数据包,回复客户端应用服务器的目标MAC地址,通信连接响应数据包同样被代理网关设备接收截获。
S204:通过所述上游网口将所述通信连接响应数据包发送至所述本地网桥,以便所述本地网桥通过所述下游网口发送至所述客户端;
在具体实施中,通信连接响应数据包由上游网口经网桥bypass下游网口转发给客户端主机,同时本地网桥完成上游网口的MAC地址映射学习过程,也即创建应用服务器的MAC地址与上游网口之间的对应关系。此时客户端与应用服务器探路成功,整个过程代理网关设备对客户端与应用服务器主机完全透明。
S205:建立所述代理网关设备与所述客户端之间、所述代理网关设备与所述应用服务器之间的通信连接;
经过以上步骤,客户端直接发起tcp连接应用服务器,tcp的三路握手首先被代理网关设备拦截,建立客户端与代理网关设备的tcp连接,代理网关设备基于no-IP应用监听与tproxy透明代理建立来自客户端的tcp连接,随后代理类网关设备基于客户端IP对等地建立与服务器IP的IP_transparent的tcp连接,对于客户端来说并不关心连接被代理网关设备拦截,在客户端看来,连接是直接与应用服务器建立的,因为连接的源IP与目的IP分别是客户端IP与应用服务器IP,而代理网关设备的本地连接socket是不使用本地IP的,属于无IP(no-IP)。在本步骤中,建立了客户端与应用服务器之间的连接,实际上包括两个连接:客户端与代理网关设备之间的连接以及代理网关设备与应用服务器之间的连接。需要说明的是,客户端与应用服务器之间的连接可以采用tcp连接,也可以采用udp(用户数据报协议,User Datagram Protocol)连接,本实施例不进行具体限定。
S206:接收所述客户端发送的请求数据包,并基于所述请求数据包的流量特征判断所述请求数据包是否为应用代理流量;若是,则进入S207;
S207:基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系,剥离所述请求数据包中的所述链路层信息以构建链路层数据包;
S208:基于tproxy机制将所述链路层数据包传输至应用层进行流量操作,并在所述应用层基于链路层数据包重新构造待发送数据包;
S209:基于所述第一映射关系确定所述待发送数据包中的网络层信息对应的链路层信息,在所述待发送数据包中补充所述链路层信息以构造发送数据包;
S210:将所述发送数据包通过所述上游网口发送至所述应用服务器。
流量透明请求流程包括:客户端请求应用服务器的请求数据包(源IP为客户端IP,目的IP为应用服务器IP),代理网关设备透明代理接收请求数据包,数据鉴权处理,然后反向代理发送给应用服务器,应用服务器收到数据包处理后发送响应数据包给客户端(源IP为应用服务器IP,目的IP为客户端IP),代理网关设备透明代理接收响应数据包,然后反向代理发送给客户端,客户端接收应用服务器的响应数据包。一次数据包请求结束,整个数据包交互过程七元组不变,流量在应用网关设备传递过程中透明。
在具体实施中,如图10所示,代理网关设备包括ingress网卡(入口)、数据流量路径模块、数据上行流量透明处理模块、数据上行流量透明传输模块、应用透明代理模块、数据下行流量透明传输模块、数据下行流量透明处理模块和egress网卡(出口)。客户端发送的请求数据包从ingress网卡进入代理网关设备,数据流量路径模块用于基于请求数据包的流量特征进行路径决策,数据上行流量透明处理模块用于对流量进行上行流量透明处理,也即创建第一映射关系、邻居项或路由项,剥离链路层信息,与数据下行流量透明处理模块共享内存,数据上行流量透明传输模块用于对流量进行上行流量透明传输,也即将流量从链路层经过网络层和传输层传输至应用层,应用透明代理模块用于对流量进行鉴权并反向代理。数据下行流量透明传输模块用于对流量进行下行流量透明传输,也即将流量从应用层跳过网络层和传输层传输至链路层,数据下行流量透明处理模块用于基于共享内存中的第一映射关系补充链路层信息,从egress网卡发送至应用服务器。
透明部署具体GUI表现如图11-14所示,应用部署只需要配置访问直连应用服务器地址,网口对部署是透明部署所专有的,它的作用可以理解为一条透明网线,部署在客户现网应用流量必经之地,也即接入交换到汇聚交换或汇聚交换到核心交换之间。
下面对本申请实施例提供的一种应用代理装置进行介绍,下文描述的一种应用代理装置与上文描述的一种应用代理方法可以相互参照。
参见图15,根据一示例性实施例示出的一种应用代理装置的结构图,如图15所示,包括:
判断模块100,用于接收所述客户端发送的请求数据包,并基于所述请求数据包的流量特征判断所述请求数据包是否为应用代理流量;若是,则触发剥离模块200的工作流程;
所述剥离模块200,用于基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系,剥离所述请求数据包中的所述链路层信息以构建链路层数据包;
构造模块300,用于基于tproxy机制将所述链路层数据包传输至应用层进行流量操作,并在所述应用层基于链路层数据包重新构造待发送数据包;
补充模块400,用于基于所述第一映射关系确定所述待发送数据包中的网络层信息对应的链路层信息,在所述待发送数据包中补充所述链路层信息以构造发送数据包;
第一发送模块500,用于将所述发送数据包发送至所述应用服务器。
本申请实施例提供的应用代理装置,流量经过代理网关设备前后,链路层信息在流量进入网络协议栈网桥阶段被剥离丢失,并在反向代理输出经过网桥阶段被完整还原,其他网络层信息和传输层信息基于tproxy机制透明传输到应用层,应用层直接往网络协议栈输出,保持网络层信息和传输层信息没有丢失,在应用代理过程中流量具有完整透明性。代理网关设备以直插式网桥部署方式透明部署在应用流量的必经之处,整个代理网关设备对用户访问以及上下游网络拓扑都是透明的,在代理网关设备进行应用代理的过程中实现代理网关的透明部署。
在上述实施例的基础上,作为一种优选实施方式,还包括:
获取模块,用于获取所述客户端的第一端口信息与所述代理网关设备的第二端口信息之间的第二映射关系;
替换模块,用于基于所述第二映射关系将所述待发送数据包中的源端口信息替换为对应的第一端口信息。
在上述实施例的基础上,作为一种优选实施方式,所述判断模块100包括:
接收单元,用于接收所述客户端发送的请求数据包;
第一判断单元,用于基于所述请求数据包的IP头信息判断所述请求数据包是否为分片流量;
第二判断单元,用于当所述请求数据包为分片流量时,基于所述请求数据包的IP信息判断所述请求数据包是否为应用代理流量;若是,则触发剥离模块200的工作流程;若否,则触发发送单元的工作流程;
发送单元,用于将所述请求数据包发送至网络协议栈,以便所述网络协议栈判断所述请求数据包是否为应用代理流量;
第三判断单元,用于当所述请求数据包为非分片流量时,基于所述请求数据包的IP信息、端口信息和协议信息判断所述请求数据包是否为应用代理流量。
在上述实施例的基础上,作为一种优选实施方式,所述判断模块100包括:
接收单元,用于接收所述客户端发送的请求数据包;
第四判断单元,用于基于所述请求数据包的IP信息判断所述请求数据包是否为应用代理流量;若是,则触发剥离模块200的工作流程;若否,则触发发送单元的工作流程;
发送单元,用于将所述请求数据包发送至网络协议栈,以便所述网络协议栈判断所述请求数据包是否为应用代理流量。
在上述实施例的基础上,作为一种优选实施方式,所述发送单元具体用于:将所述请求数据包发送至网络协议栈,以便所述网络协议栈中的第一挂载点收集完整的IP分片数据包数组,并扫描所述IP分片数据包数组中的首个分片数据包,判断所述首个分片数据包是否为应用代理流量;若所述首个分片数据包为应用代理流量,则所述IP分片数据包数组进行重组得到IP分片重组数据包,所述网络协议栈中的第二挂载点判断所述IP分片重组数据包是否为应用代理流量;若所述IP分片重组数据包为应用代理流量,则进入所述基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系的步骤;若所述IP分片重组数据包为非应用代理流量,则丢弃所述IP分片重组数据包;若所述首个分片数据包为非应用代理流量,则基于本地网桥直接内核转发所述IP分片数据包数组。
在上述实施例的基础上,作为一种优选实施方式,还包括:
第二创建模块,用于基于所述请求数据包的路由信息创建对应的邻居项;
第一查找模块,用于在所述应用层基于链路层数据包重新构造待发送数据包之后,根据所述待发送数据包对应的邻居项进行路径查找。
在上述实施例的基础上,作为一种优选实施方式,还包括:
第三创建模块,用于基于所述请求数据包的路由信息在路由系统中创建路由项;
第二查找模块,用于在所述应用层基于链路层数据包重新构造待发送数据包之后,根据所述待发送数据包对应的路由项进行路径查找。
在上述实施例的基础上,作为一种优选实施方式,还包括:
第一接收模块,用于接收所述客户端发送的通信连接请求数据包;其中,所述通信连接请求数据包至少包括所述应用服务器的IP地址;
第二发送模块,用于通过本地网桥的下游网口将所述通信连接请求数据包发送至所述本地网桥,以便所述本地网桥通过上游网口发送至所述应用服务器;
第二接收模块,用于接收所述应用服务器回复的通信连接响应数据包;其中,所述通信连接响应数据包至少包括所述应用服务器的MAC地址;
第三发送模块,用于通过所述上游网口将所述通信连接响应数据包发送至所述本地网桥,以便所述本地网桥通过所述下游网口发送至所述客户端;
建立模块,用于建立所述代理网关设备与所述客户端之间、所述代理网关设备与所述应用服务器之间的通信连接。
在上述实施例的基础上,作为一种优选实施方式,还包括:
第四创建模块,用于接收所述客户端发送的通信连接请求数据包之后,创建所述客户端的MAC地址与所述下游网口之间的对应关系;
第五创建模块,用于接收所述应用服务器回复的通信连接响应数据包之后,创建所述应用服务器的MAC地址与所述上游网口之间的对应关系;
相应的,所述第一发送模块500具体为通过反向代理将所述发送数据包通过所述上游网口发送至所述应用服务器的模块。
在上述实施例的基础上,作为一种优选实施方式,所述剥离模块200包括:
创建单元,用于基于所述请求数据包中的链路层信息和网络层信息在共享内存中创建第一映射关系;
剥离单元,用于剥离所述请求数据包中的所述链路层信息以构建链路层数据包。
在上述实施例的基础上,作为一种优选实施方式,所述创建单元具体用于:判断共享内存中是否存在所述请求数据包中的链路层信息和网络层信息之间的第一映射关系;若否,则在所述共享内存中创建所述请求数据包中的链路层信息和网络层信息之间的第一映射关系,并创建所述第一映射关系的引用计数,并将所述引用计数设置为初始值;若是,则增加所述第一映射关系的引用计数;
相应的,所述补充模块400包括:
销毁单元,用于减少所述第一映射关系的引用计数;若所述引用计数减少为所述初始值,则销毁所述共享内存中的第一映射关系。
在上述实施例的基础上,作为一种优选实施方式,还包括:
插入模块,用于构建链路层数据包之后,在所述链路层数据包的预设位置插入所述第一映射关系;
提取模块,用于基于所述第一映射关系确定所述链路层数据包中的网络层信息对应的链路层信息之前,从所述链路层数据包的预设位置提取所述第一映射关系。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
基于上述程序模块的硬件实现,且为了实现本申请实施例的方法,本申请实施例还提供了一种电子设备,图16为根据一示例性实施例示出的一种电子设备的结构图,如图16所示,电子设备包括:
通信接口1,能够与其它设备比如网络设备等进行信息交互;
处理器2,与通信接口1连接,以实现与其它设备进行信息交互,用于运行计算机程序时,执行上述一个或多个技术方案提供的应用代理方法。而所述计算机程序存储在存储器3上。
当然,实际应用时,电子设备中的各个组件通过总线系统4耦合在一起。可理解,总线系统4用于实现这些组件之间的连接通信。总线系统4除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图16中将各种总线都标为总线系统4。
本申请实施例中的存储器3用于存储各种类型的数据以支持电子设备的操作。这些数据的示例包括:用于在电子设备上操作的任何计算机程序。
可以理解,存储器3可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(ROM,Read Only Memory)、可编程只读存储器(PROM,Programmable Read-Only Memory)、可擦除可编程只读存储器(EPROM,Erasable Programmable Read-Only Memory)、电可擦除可编程只读存储器(EEPROM,Electrically Erasable Programmable Read-Only Memory)、磁性随机存取存储器(FRAM,ferromagnetic random access memory)、快闪存储器(Flash Memory)、磁表面存储器、光盘、或只读光盘(CD-ROM,Compact Disc Read-Only Memory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(RAM,Random AccessMemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(SRAM,Static Random Access Memory)、同步静态随机存取存储器(SSRAM,Synchronous Static Random Access Memory)、动态随机存取存储器(DRAM,Dynamic Random Access Memory)、同步动态随机存取存储器(SDRAM,SynchronousDynamic Random Access Memory)、双倍数据速率同步动态随机存取存储器(DDRSDRAM,Double Data Rate Synchronous Dynamic Random Access Memory)、增强型同步动态随机存取存储器(ESDRAM,Enhanced Synchronous Dynamic Random Access Memory)、同步连接动态随机存取存储器(SLDRAM,SyncLink Dynamic Random Access Memory)、直接内存总线随机存取存储器(DRRAM,Direct Rambus Random Access Memory)。本申请实施例描述的存储器3旨在包括但不限于这些和任意其它适合类型的存储器。
上述本申请实施例揭示的方法可以应用于处理器2中,或者由处理器2实现。处理器2可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器2中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器2可以是通用处理器、DSP,或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器2可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本申请实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器3,处理器2读取存储器3中的程序,结合其硬件完成前述方法的步骤。
处理器2执行所述程序时实现本申请实施例的各个方法中的相应流程,为了简洁,在此不再赘述。
在示例性实施例中,本申请实施例还提供了一种存储介质,即计算机存储介质,具体为计算机可读存储介质,例如包括存储计算机程序的存储器3,上述计算机程序可由处理器2执行,以完成前述方法所述步骤。计算机可读存储介质可以是FRAM、ROM、PROM、EPROM、EEPROM、Flash Memory、磁表面存储器、光盘、或CD-ROM等存储器。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
或者,本申请上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台电子设备(可以是个人计算机、服务器、或者网络设备等)执行本申请各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (15)

1.一种应用代理方法,其特征在于,应用于应用层代理网关设备,所述代理网关设备连接客户端,所述代理网关设备通过路由器或交换机连接应用服务器,所述方法包括:
接收所述客户端发送的请求数据包,并基于所述请求数据包的流量特征判断所述请求数据包是否为应用代理流量;
若是,则基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系,剥离所述请求数据包中的所述链路层信息以构建链路层数据包;
基于tproxy机制将所述链路层数据包传输至应用层进行流量操作,并在所述应用层基于链路层数据包重新构造待发送数据包;
基于所述第一映射关系确定所述待发送数据包中的网络层信息对应的链路层信息,在所述待发送数据包中补充所述链路层信息以构造发送数据包;
将所述发送数据包发送至所述应用服务器。
2.根据权利要求1所述应用代理方法,其特征在于,在所述应用层基于链路层数据包重新构造待发送数据包之后,还包括:
获取所述客户端的第一端口信息与所述代理网关设备的第二端口信息之间的第二映射关系;
基于所述第二映射关系将所述待发送数据包中的源端口信息替换为对应的第一端口信息。
3.根据权利要求1所述应用代理方法,其特征在于,所述基于所述请求数据包的流量特征判断所述请求数据包是否为应用代理流量,包括:
基于所述请求数据包的IP头信息判断所述请求数据包是否为分片流量;
若所述请求数据包为分片流量,则基于所述请求数据包的IP信息判断所述请求数据包是否为应用代理流量;若所述请求数据包为非应用代理流量,则将所述请求数据包发送至网络协议栈,以便所述网络协议栈判断所述请求数据包是否为应用代理流量;
若所述请求数据包为非分片流量,则基于所述请求数据包的IP信息、端口信息和协议信息判断所述请求数据包是否为应用代理流量。
4.根据权利要求1所述应用代理方法,其特征在于,所述基于所述请求数据包的流量特征判断所述请求数据包是否为应用代理流量,包括:
基于所述请求数据包的IP信息判断所述请求数据包是否为应用代理流量;
若是,则进入所述基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系的步骤;
若否,则将所述请求数据包发送至网络协议栈,以便所述网络协议栈判断所述请求数据包是否为应用代理流量。
5.根据权利要求3或4所述应用代理方法,其特征在于,所述网络协议栈判断所述请求数据包是否为应用代理流量,包括:
所述网络协议栈中的第一挂载点收集完整的IP分片数据包数组,并扫描所述IP分片数据包数组中的首个分片数据包,判断所述首个分片数据包是否为应用代理流量;
若所述首个分片数据包为应用代理流量,则所述IP分片数据包数组进行重组得到IP分片重组数据包,所述网络协议栈中的第二挂载点判断所述IP分片重组数据包是否为应用代理流量;
若所述IP分片重组数据包为应用代理流量,则进入所述基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系的步骤;若所述IP分片重组数据包为非应用代理流量,则丢弃所述IP分片重组数据包;
若所述首个分片数据包为非应用代理流量,则基于本地网桥直接内核转发所述IP分片数据包数组。
6.根据权利要求1所述应用代理方法,其特征在于,所述基于所述请求数据包的流量特征判断所述请求数据包为应用代理流量之后,还包括:
基于所述请求数据包的路由信息创建对应的邻居项;
相应的,在所述应用层基于链路层数据包重新构造待发送数据包之后,还包括:
根据所述待发送数据包对应的邻居项进行路径查找。
7.根据权利要求1所述应用代理方法,其特征在于,所述基于所述请求数据包的流量特征判断所述请求数据包为应用代理流量之后,还包括:
基于所述请求数据包的路由信息在路由系统中创建路由项;
相应的,在所述应用层基于链路层数据包重新构造待发送数据包之后,还包括:
根据所述待发送数据包对应的路由项进行路径查找。
8.根据权利要求1所述应用代理方法,其特征在于,所述接收所述客户端发送的请求数据包之前,还包括:
接收所述客户端发送的通信连接请求数据包;其中,所述通信连接请求数据包至少包括所述应用服务器的IP地址;
通过本地网桥的下游网口将所述通信连接请求数据包发送至所述本地网桥,以便所述本地网桥通过上游网口发送至所述应用服务器;
接收所述应用服务器回复的通信连接响应数据包;其中,所述通信连接响应数据包至少包括所述应用服务器的MAC地址;
通过所述上游网口将所述通信连接响应数据包发送至所述本地网桥,以便所述本地网桥通过所述下游网口发送至所述客户端;
建立所述代理网关设备与所述客户端之间、所述代理网关设备与所述应用服务器之间的通信连接。
9.根据权利要求8所述应用代理方法,其特征在于,所述接收所述客户端发送的通信连接请求数据包之后,还包括:
创建所述客户端的MAC地址与所述下游网口之间的对应关系;
相应的,所述接收所述应用服务器回复的通信连接响应数据包之后,还包括:
创建所述应用服务器的MAC地址与所述上游网口之间的对应关系;
相应的,所述通过反向代理将所述发送数据包发送至所述应用服务器,包括:
通过反向代理将所述发送数据包通过所述上游网口发送至所述应用服务器。
10.根据权利要求1所述应用代理方法,其特征在于,所述基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系,包括:
基于所述请求数据包中的链路层信息和网络层信息在共享内存中创建第一映射关系。
11.根据权利要求10所述应用代理方法,其特征在于,所述基于所述请求数据包中的链路层信息和网络层信息在共享内存中创建第一映射关系,包括:
判断共享内存中是否存在所述请求数据包中的链路层信息和网络层信息之间的第一映射关系;
若否,则在所述共享内存中创建所述请求数据包中的链路层信息和网络层信息之间的第一映射关系,并创建所述第一映射关系的引用计数,并将所述引用计数设置为初始值;
若是,则增加所述第一映射关系的引用计数;
相应的,所述基于所述第一映射关系确定所述链路层数据包中的网络层信息对应的链路层信息之后,还包括:
减少所述第一映射关系的引用计数;
若所述引用计数减少为所述初始值,则销毁所述共享内存中的第一映射关系。
12.根据权利要求1所述应用代理方法,其特征在于,所述构建链路层数据包之后,还包括:
在所述链路层数据包的预设位置插入所述第一映射关系;
相应的,所述基于所述第一映射关系确定所述链路层数据包中的网络层信息对应的链路层信息之前,还包括:
从所述链路层数据包的预设位置提取所述第一映射关系。
13.一种应用代理装置,其特征在于,应用于应用层代理网关设备,所述代理网关设备连接客户端,所述代理网关设备通过路由器或交换机连接应用服务器,所述装置包括:
判断模块,用于接收所述客户端发送的请求数据包,并基于所述请求数据包的流量特征判断所述请求数据包是否为应用代理流量;若是,则触发剥离模块的工作流程;
所述剥离模块,用于基于所述请求数据包中的链路层信息和网络层信息创建第一映射关系,剥离所述请求数据包中的所述链路层信息以构建链路层数据包;
构造模块,用于基于tproxy机制将所述链路层数据包传输至应用层进行流量操作,并在所述应用层基于链路层数据包重新构造待发送数据包;
补充模块,用于基于所述第一映射关系确定所述待发送数据包中的网络层信息对应的链路层信息,在所述待发送数据包中补充所述链路层信息以构造发送数据包;
第一发送模块,用于将所述发送数据包发送至所述应用服务器。
14.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至12任一项所述应用代理方法的步骤。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至12任一项所述应用代理方法的步骤。
CN202210339702.7A 2022-04-01 2022-04-01 一种应用代理方法、装置及电子设备和存储介质 Pending CN116939033A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210339702.7A CN116939033A (zh) 2022-04-01 2022-04-01 一种应用代理方法、装置及电子设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210339702.7A CN116939033A (zh) 2022-04-01 2022-04-01 一种应用代理方法、装置及电子设备和存储介质

Publications (1)

Publication Number Publication Date
CN116939033A true CN116939033A (zh) 2023-10-24

Family

ID=88376014

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210339702.7A Pending CN116939033A (zh) 2022-04-01 2022-04-01 一种应用代理方法、装置及电子设备和存储介质

Country Status (1)

Country Link
CN (1) CN116939033A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118175202A (zh) * 2024-05-10 2024-06-11 中移(苏州)软件技术有限公司 代理连接方法、装置及相关设备
CN118433238A (zh) * 2024-07-04 2024-08-02 北京长亭科技有限公司 一种在Linux内核中关联上下游TCP连接的方法及装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN118175202A (zh) * 2024-05-10 2024-06-11 中移(苏州)软件技术有限公司 代理连接方法、装置及相关设备
CN118433238A (zh) * 2024-07-04 2024-08-02 北京长亭科技有限公司 一种在Linux内核中关联上下游TCP连接的方法及装置
CN118433238B (zh) * 2024-07-04 2024-09-03 北京长亭科技有限公司 一种在Linux内核中关联上下游TCP连接的方法及装置

Similar Documents

Publication Publication Date Title
CN113132342B (zh) 方法、网络装置、隧道入口点装置及存储介质
Conta et al. Generic packet tunneling in IPv6 specification
EP1758311B1 (en) Communication device including VPN accomodation function
EP3138243B1 (en) Network service insertion
US20170324849A1 (en) Partial reassembly and fragmentation for decapsulation
CN104579954B (zh) 报文跨域转发方法、装置及通信设备
US20030115328A1 (en) Firewall for filtering tunneled data packets
CN116939033A (zh) 一种应用代理方法、装置及电子设备和存储介质
CN110535768B (zh) 组播数据传输方法及相关设备
CN104426737B (zh) 一种实现动态虚拟专用网络链路层通信的方法和装置
US20230291682A1 (en) Method and device for processing data packet, storage medium, and electronic device
CN114338495A (zh) 业务处理方法以及相关设备
US20240275722A1 (en) Packet forwarding method and apparatus, device, and storage medium
EP3477897A1 (en) Methods and apparatuses for routing data packets in a network topology
CN113542441B (zh) 一种通信处理方法及装置
Cowley et al. Network Protocols
Abusafat et al. Roadmap of security threats between IPv4/IPv6
KR101712922B1 (ko) 동적 터널엔드 방식의 가상 사설 네트워크 시스템과 그를 위한 가상 라우터 및 매니저 장치
Conta et al. RFC2473: Generic Packet Tunneling in IPv6 Specification
US20130133063A1 (en) Tunneling-based method of bypassing internet access denial
Zhu et al. Experiences in implementing an experimental wide-area GMPLS network
CN118158154B (zh) 引流方法、系统、装置、电子设备、存储介质及产品
CN112910790B (zh) 导流系统及其方法
Reuter Source Packet Routing in Networking (SPRING)
Balchunas Cisco CCNP Routing Study Guide

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination