CN109547452B - Linux网桥设备上实现TCP透明代理的方法及*** - Google Patents
Linux网桥设备上实现TCP透明代理的方法及*** Download PDFInfo
- Publication number
- CN109547452B CN109547452B CN201811458579.0A CN201811458579A CN109547452B CN 109547452 B CN109547452 B CN 109547452B CN 201811458579 A CN201811458579 A CN 201811458579A CN 109547452 B CN109547452 B CN 109547452B
- Authority
- CN
- China
- Prior art keywords
- tcp
- host
- message
- linux
- data message
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/09—Mapping addresses
- H04L61/10—Mapping addresses of different types
- H04L61/103—Mapping addresses of different types across network layers, e.g. resolution of network layer into physical layer addresses or address resolution protocol [ARP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/09—Mapping addresses
- H04L61/25—Mapping addresses of the same type
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/09—Mapping addresses
- H04L61/25—Mapping addresses of the same type
- H04L61/2503—Translation of Internet protocol [IP] addresses
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/59—Network arrangements, protocols or services for addressing or naming using proxies for addressing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2101/00—Indexing scheme associated with group H04L61/00
- H04L2101/60—Types of network addresses
- H04L2101/618—Details of network addresses
- H04L2101/622—Layer-2 addresses, e.g. medium access control [MAC] addresses
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Small-Scale Networks (AREA)
Abstract
本发明涉及网络通信技术领域,克服代理服务器仅为链路层网桥设备且在网络层分别与主机A和主机B不可达时无法实现TCP透明代理功能的问题,提出一种Linux网桥设备上实现TCP透明代理的方法,包括:将带有原始请求报文的通信连接进行目标地址转换重定向给TCP代理进程,TCP代理进程将报文标记上标记向主机B发起新的通信连接请求,配置策略路将标记有上述标记的报文绕过路由选择,进行源地址转换并将发送至网桥模块,将带有标记的报文的目的MAC地址和源MAC地址转换为原始请求报文中相应值,报文填上以太网头部发送给原始请求报文链路层目的主机,如此实现主机A与主机B的连接,本发明适用于链路层网络设备的TCP代理。
Description
技术领域
本发明涉及网络通信技术领域,特别涉及一种TCP透明代理的方法及***。
背景技术
现有的双向TCP透明代理加速的原理是:如图1所示,在通过TCP协议通讯的主机A和主机B之间,在靠近主机A的位置放入TCP Proxy服务器C,在靠近主机B的位置放入TCPProxy服务器D,使高延时、高丢包率的链路位于TCP Proxy服务器C和TCP Proxy服务器D之间,当主机A向主机B发起TCP连接时,并且在主机A和主机B无感知的情况下,将TCP流量截获至TCP Proxy服务器C,并且由TCP Proxy服务器C重新发起TCP连接,传输A、B之间的数据,并针对链路的拥塞情况优化拥塞控制策略。就实现层面来说,业界普遍采用iptables+TCP代理程序实现,在TCP Proxy服务器C上通过iptables的DNAT(目标地址转换)功能,将主机A向主机B发起的TCP连接重定向至TCP Proxy服务器C上的TCP代理程序,TCP代理程序伪装成主机B,接受主机A的连接请求,并再,伪装成主机A向B发起新的TCP连接。新的TCP的连接经过TCP Proxy服务器D上时,被采用上述相同的方式重定向至TCP Proxy服务器D上的TCP代理程序,最终由D与主机B建立连接,整个过程,主机A和主机B均感知不到TCP Proxy服务器C和TCP Proxy服务器D的存在。采用这种办法,将主机A至主机B的TCP连接分为三段,TCP Proxy服务器C和TCP Proxy服务器D便可以针对夹在它们之间的拥塞链路进行更优和更精确的TCP拥塞控制从而实现TCP连接的加速。
采用传统的的TCP透明连接代理的方法,需要具备的基本前提为,TCP Proxy服务器C必须与主机A在网络层可达以正常的与主机A建立TCP连接,TCP Proxy服务器D必须与主机B在网络层可达以正常的与主机B建立TCP连接,这样才能代理并转发主机A和主机B之间的TCP流量。当TCP Proxy服务器C和TCP Proxy服务器D为路由器或者NAT(网络地址转换)网关等工作于网络层的设备时,可以采用传统的方法实现;但当TCP Proxy服务器C和TCPProxy服务器D仅为链路层Linux网桥设备且在网络层分别与主机A和主机B不可达时,例如TCP Proxy服务器C和TCP Proxy服务器D的IP地址与主机A和主机B的IP地址位于不同网段,传统的方法就无法实现TCP透明代理加速的功能。在实际的以太网网络环境中,Linux网桥设备通常被配置到单独的VLAN(虚拟局域网)中进行管理,其IP地址与依赖于该网桥进行TCP通讯的主机之间,通常都不在同一网段,网桥与这些主机之间可以理解为链路层可达,但网络层不可达;同时,经过网桥转发多个VLAN的以太网数据帧时,每个VLAN都对应不同的IP网段,当VLAN数量众多时,也很难通过配置网桥IP地址来保证对每个VLAN的主机网络层可达;就算通过配置能让Linux网桥设备在每个VLAN中拥有对应的IP地址,也无法解决当需要代理的TCP连接的目的地址,需要通过某个VLAN的默认网关转发的情况,因为每个VLAN都有不同的默认网关,但是Linux网桥设备只能配置一个默认网关,该网关不一定对目的地址可达。
公开号为CN102447708B的中国专利公开了一种应用层透明代理技术的通信实现方法,该方法直接通过网络协议栈二层转发的方式实现代理,该方法仅采用服务器的IP地址作为源地址与客户端建立TCP连接,在客户端与代理服务主机之间,路由不可达时,无法实现“回应包通过数据链路层转发,通向客户端”,因数据包会在做路由选择的时候被丢弃。也就是说该方法无法解决代理服务器为网桥设备,该网桥设备与A和B主机在网络层不可达时(不如IP不同段)的TCP代理问题。
发明内容
本发明所要解决的技术问题是:克服代理服务器仅为链路层Linux网桥设备且在网络层分别与主机A和主机B不可达时无法实现TCP透明代理功能的问题,提出一种Linux网桥设备上实现TCP透明代理的方法及***。
本发明解决上述技术问题,采用的技术方案是:
Linux网桥设备上实现TCP透明代理的方法,包括主机A与主机B建立TCP连接以及该TCP连接建立完毕后主机A与主机B之间的TCP数据报文处理,所述主机A与主机B建立TCP连接包括如下步骤:
S1、主机A向主机B发出TCP的SYN报文请求建立TCP连接,记该SYN报文为SYN报文一;
S2、Linux网桥设备截获所述SYN报文一,记录SYN报文一的信息,把TCP连接重定向给Linux网桥设备内的TCP代理进程模块,TCP代理进程模块伪装主机B发送对应的SYN ACK报文给主机A,主机A回复相应的ACK报文,如此Linux网桥设备完成与主机A的TCP连接的建立,记该TCP连接对应的Socket为Socket1;
S3、TCP代理进程模块向主机B发送TCP的SYN报文请求建立TCP连接,记该SYN报文为SYN报文二,记该TCP连接对应的Socket为Socket2,并设置经Socket2发出的报文均打上标记,记为Mark X;
S4、通过配置的策略路由使得带有Mark X的SYN报文二绕过Linux网桥设备内部的路由选择,进行源地址转换,将SYN报文二中的源IP地址和源端口转换为SYN报文一中的源IP地址和源端口;通过配置的静态ARP使得SYN报文二绕过Linux网桥设备内部的ARP查询过程,将SYN报文二送至Linux网桥设备内的网桥模块;
S5、截获SYN报文二,进行目的地址转换,将SYN报文二的目的MAC地址和源MAC地址转换为SYN报文一中的目的MAC地址和源MAC地址;将SYN报文二填上以太网头部发送给SYN报文一的链路层目的主机;
S6、主机B收到SYN报文二后回复对应的SYN ACK报文,该SYN ACK报文被重定向至TCP代理进程模块,TCP代理进程模块回复对应的ACK报文,如此Linux网桥设备伪装成主机A完成与主机B的TCP连接的建立。
优选的,所述主机A与主机B之间的TCP数据报文处理包括主机A到主机B的TCP数据报文处理,所述主机A到主机B的TCP数据报文处理包括如下步骤:
T1、主机A向主机B发送TCP数据报文,记为TCP数据报文一;
T2、Linux网桥设备截获所述TCP数据报文一,重定向TCP数据报文一至TCP代理进程模块,TCP代理进程模块通过Socket1读取TCP数据报文一所携带的数据,将读取到的数据经Socket2发出,记从Socket2发出的TCP数据报文为TCP数据报文二;
T3、通过配置的策略路由使得TCP数据报文二绕过Linux网桥设备内部的路由选择,将TCP数据报文二中的源IP地址和源端口转换为TCP数据报文一中的源IP地址和源端口;通过配置的静态ARP使得TCP数据报文二绕过Linux网桥设备内部的ARP查询过程,将TCP数据报文二送至Linux网桥设备内的网桥模块;
T4、截获TCP数据报文二,将TCP数据报文二的目的MAC地址和源MAC地址转换为TCP数据报文一中的目的MAC地址和源MAC地址;将TCP数据报文二填上以太网头部发送给TCP数据报文一的链路层目的主机。
优选的,所述主机A与主机B之间的TCP数据报文处理包括主机B到主机A的TCP数据报文处理,所述主机B到主机A的TCP数据报文处理包括如下步骤:
U1、主机B向主机A发送TCP数据报文,记为TCP数据报文三;
U2、Linux网桥设备截获所述TCP数据报文三,重定向TCP数据报文三至TCP代理进程模块,TCP代理进程模块通过Socket2读取TCP数据报文三所携带的数据,将该TCP数据报文三中携带的数据经Socket1发出并打上标记,记该标记为Mark Y,记从Socket1发出的TCP数据报文为TCP数据报文四;
U3、通过配置的策略路由使得TCP数据报文四绕过Linux网桥设备内部的路由选择,将TCP数据报文四中的源IP地址和源端口转换为TCP数据报文三中的源IP地址和源端口;通过配置的静态ARP使得TCP数据报文四绕过Linux网桥设备内部的ARP查询过程,将TCP数据报文四送至Linux网桥设备内的网桥模块;
U4、截获TCP数据报文四,将TCP数据报文四的目的MAC地址和源MAC地址转换为TCP数据报文三中的目的MAC地址和源MAC地址;将TCP数据报文四填上以太网头部发送给TCP数据报文一的链路层目的主机。
优选的,所述步骤S2中Linux网桥设备截获所述SYN报文一的步骤包括:采用Linux网桥设备中的netfilter模块在PREROUTING点增加HOOK来截获所述SYN报文一;
当所述步骤T2存在时,步骤T2中Linux网桥设备截获所述TCP数据报文一的步骤包括:采用Linux网桥设备中的netfilter模块在PREROUTING点增加的HOOK来截获所述TCP数据报文一;
当所述步骤U2存在时,步骤U2中Linux网桥设备截获所述TCP数据报文三的步骤包括:采用Linux网桥设备中的netfilter模块在PREROUTING点增加的HOOK点来截获所述TCP数据报文三。
优选的,所述步骤S2中记录SYN报文一的信息包括至少记录SYN报文一的源IP地址、目的IP地址、源端口、目的端口、源MAC地址和目的MAC地址。
优选的,所述步骤S2中把TCP连接重定向给Linux网桥设备内的TCP代理进程模块的步骤包括:进行目标地址转换将SYN报文一中的目的IP地址和目的端口转换为Linux网桥设备的本地IP地址和TCP代理进程模块监听的端口;
当所述步骤T2存在时,步骤T2中重定向TCP数据报文一至TCP代理进程模块的步骤包括:进行目标地址转换将TCP数据报文一中的目的IP地址和目的端口转换为Linux网桥设备的本地IP地址和TCP代理进程模块监听的端口;
当所述步骤U2存在时,步骤U2中重定向TCP数据报文三至TCP代理进程模块的步骤包括:进行目标地址转换将TCP数据报文三中的目的IP地址和目的端口转换为Linux网桥设备的本地IP地址和TCP代理进程模块监听的端口。
优选的,所述步骤S3中TCP代理进程模块伪装成主机A向主机B发送TCP的SYN报文请求建立TCP连接的步骤包括:TCP代理进程模块获取SYN报文一的目的IP地址和目的端口,根据该目的IP地址和目的端口创建Socket2。
优选的,所述配置的策略路由为将带有标记Mark X或MrakY的报文均通过设定的与网桥模块同网段的网关转发;所述配置的静态ARP为将带有Mark X或MrakY的报文中的目的MAC地址设置为所述网关的目的MAC地址。
优选的,所述步骤S5中截获SYN报文二采用的方法为:采用Linux网桥设备中的netfilter模块在MAC地址查表之前增加HOOK来截获SYN报文二,记该HOOK点为BR_ENTRY;
当所述步骤T4存在时,采用Linux网桥设备中的netfilter模块在MAC地址查表之前增加HOOK来截获TCP数据报文二;
当所述步骤U4存在时,采用Linux网桥设备中的netfilter模块在MAC地址查表之前增加HOOK来截获TCP数据报文四。
为了解决上述技术问题,本发明还提供了Linux网桥设备上实现TCP透明代理的***,包括Linux网桥设备,所述Linux网桥设备包括网桥模块、TCP代理内核模块、路由选择模块、地址转换模块、Socket通信模块和TCP代理进程模块;
网桥模块用于数据链路层的通信;
TCP代理内核模块用于截获报文,记录报文信息,根据需要修改报文的目的MAC地址和源MAC地址,TCP代理内核模块包括netfilter模块;
路由选择模块用于执行正常的路由转发功能;
地址转换模块用于实现源地址转换和目的地址转换功能;
Socket通信模块用于建立TCP代理进程模块与主机A的套接字及TCP代理进行模块与和主机B的套接字;
TCP代理进程模块用于伪装成目的主机与源主机建立TCP连接,并伪装成源主机与目的主机建立新的TCP连接,主机A和主机B互为源主机和目的主机;
地址解析模块用于ARP查询。
本发明的有益效果是:
当主机A与主机B不在同一个网络段,通过截获主机A的原始报文后绕过路由选择以及ARP查询发送给网桥模块,并且修改发出去的数据包的源端口和源IP地址为原始报文中的源端口和源IP地址,在网桥通过目的MAC地址选择发送端口之前,将数据包的以太网头部的目的MAC地址和源MAC地址改为原始报文目的MAC地址和源MAC地址后发送给原始报文的链路层目的主机。如此即可实现代理服务器仅为链路层网桥设备且在网络层分别与主机A和主机B不可达时主机A与主机B的TCP透明代理功能。
附图说明
图1为本发明背景技术中的拓扑结构图;
图2为本发明实施例的拓扑结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下对本发明进行进一步详细说明。
如图2所示,以主机A与Linux网桥设备链路层可达且主机B与Linux网桥设备链路层也可达的情况进行举例说明本发明的思想,Linux网桥设备上实现TCP透明代理的***包括Linux网桥设备,该Linux网桥设备包括网桥模块、TCP代理内核模块、路由选择模块、地址转换模块、Socket通信模块和TCP代理进程模块。
网桥模块用于数据链路层的通信;
TCP代理内核模块用于截获报文,记录报文信息,根据需要修改报文的目的MAC地址和源MAC地址,TCP代理内核模块包括netfilter模块;
路由选择模块用于执行正常的路由转发功能。
地址转换模块用于实现源地址转换和目的地址转换功能;
Socket通信模块包括Socket1和Socket2,Socket1为发起主机A与伪装成主机B的TCP代理程序通信使用的Socket;Socket2为TCP代理程序伪装成主机A后发起的新的TCP连接对应的Socket。
TCP代理进程模块工作在用户态的进程,其作用是伪装成目的主机与源主机建立TCP连接,并伪装成源主机与目的主机建立新的TCP连接,主机A和主机B根据通信方向的不同互为源主机和目的主机。
地址解析模块用于ARP查询。
其中,Netfilter模块是Linux 2.4.x引入的一个子***,它作为一个通用的抽象的框架,提供一整套的HOOK(钩子函数)的管理机制,netfilter模块架构就是在整个网络流程的若干位置放置了一些检测点(HOOK点),而在每个检测点可以注册一个钩子函数(HOOK),让数据包经过HOOK点时可以进入钩子函数进行内部处理。下面的PREROUTING和BR_ENTRY均为netfiler模块的HOOK点。
Linux网桥设备上实现TCP透明代理的方法包括主机A与主机B建立TCP连接以及该TCP连接建立完毕后主机A与主机B之间的TCP数据报文处理,主机A与主机B建立TCP连接包括如下步骤:
S1、主机A向主机B发出TCP的SYN报文请求建立TCP连接,记该SYN报文为SYN报文一;
S2、Linux网桥设备截获SYN报文一,记录SYN报文一的信息,把TCP连接重定向给Linux网桥设备内的TCP代理进程模块,TCP代理进程模块伪装主机B发送对应的SYN ACK报文给主机A,主机A回复相应的ACK报文,如此Linux网桥设备完成与主机A的TCP连接的建立,记该TCP连接对应的Socket为Socket1;
其中,为了保证能准确的截取到SYN报文一,上述Linux网桥设备截获SYN报文一的步骤包括:采用Linux网桥设备中的netfilter模块在PREROUTING点增加HOOK来截获SYN报文一;为了保证后续的源地址转换和目标地址转换的顺利进行,记录SYN报文一的信息,该信息包括SYN报文一的源IP地址、目的IP地址、源端口、目的端口、源MAC地址和目的MAC地址,,若存在虚拟局域网时,还需记录VLAN(虚拟局域网)编号。
把TCP连接重定向给Linux网桥设备内的TCP代理进程模块的步骤可包括:通过地址转换模块进行目标地址转换将SYN报文一中的目的IP地址和目的端口转换为Linux网桥设备的本地IP地址和TCP代理进程模块监听的端口,如此把TCP连接重定向给Linux网桥设备内的TCP代理进程模块。
S3、TCP代理进程模块向主机B发送TCP的SYN报文请求建立TCP连接,记该SYN报文为SYN报文二,记该TCP连接对应的Socket为Socket2,并设置经Socket2发出的报文均打上标记,记为Mark X;
其中,TCP代理进程模块获取SYN报文一的目的IP地址和目的端口,根据该目的IP地址和目的端口创建Socket2,此时SYN报文二的源IP地址和源端口分别为TCP代理进程模块所在的Linux网桥设备的IP地址和Socket2所监听的端口,SYN报文二的目的地址和目的端口与SYN报文一中的一致,为了方便后续的策略路由和静态APR在获取到有相关标记的报文时能进行特殊的处理,则设置经Socket2发出的报文均打上标记Mark X。
S4、通过配置的策略路由使得带有Mark X的SYN报文二绕过Linux网桥设备内部的路由选择,进行源地址转换,将SYN报文二中的源IP地址和源端口转换为SYN报文一中的源IP地址和源端口;通过配置的静态ARP使得SYN报文二绕过Linux网桥设备内部的ARP查询过程,将SYN报文二送至Linux网桥设备内的网桥模块;
其中,可通过配置的策略路由将带有标记Mark X或MarkY的报文均通过设定的与网桥模块同网段的网关转发,如此便欺骗路由选择模块让其认为目的主机三层数据可达,数据包或者报文在这里就不会被丢弃了;例如网桥模块的IP地址为1.1.1.2时,将网关的IP地址设置为1.1.1.1,将网关的MAC地址设置为任何一个合法的单播MAC地址例如a0:11:22:33:44:55,根据策略路由设置将带有标记Mark X的SYN报文二通过1.1.1.1这个网关转发。地址转换模块中进行源地址转换,将SYN报文二中的源IP地址和源端口转换为SYN报文一中的源IP地址和源端口;通过配置的静态ARP使得SYN报文二绕过Linux网桥设备内部的ARP查询过程,将SYN报文二送至Linux网桥设备内的网桥模块,其中静态ARP可为为将带有Mark X或MrakY的报文中的目的MAC地址设置为网关的目的MAC地址即上述举例的a0:11:22:33:44:55;
S5、截获SYN报文二,进行目的地址转换,将SYN报文二的目的MAC地址和源MAC地址转换为SYN报文一中的目的MAC地址和源MAC地址;将SYN报文二填上以太网头部发送给SYN报文一的链路层目的主机;
其中,TCP代理内核模块可通过BR_ENTRY点在在MAC地址查表之前截获SYN报文二,进行目的地址转换,将SYN报文二的目的MAC地址和源MAC地址转换为SYN报文一中的目的MAC地址和源MAC地址;鉴于主机B与Linux网桥设备之间可能还有别的路由器,将SYN报文二填上以太网头部发送给SYN报文一的链路层目的主机;
S6、主机B收到SYN报文二后回复对应的SYN ACK报文,该SYN ACK报文被重定向至TCP代理进程模块,TCP代理进程模块回复对应的ACK报文,如此Linux网桥设备伪装成主机A完成与主机B的TCP连接的建立。
至此,主机A到主机B之间的通讯连接建立完毕。
主机A与主机B的TCP连接建立后便可进行正常的通信,主机A到主机B的TCP数据报文处理包括如下步骤:
T1、主机A向主机B发送TCP数据报文,记为TCP数据报文一;
T2、Linux网桥设备截获所述TCP数据报文一,重定向TCP数据报文一至TCP代理进程模块,TCP代理进程模块通过Socket1读取TCP数据报文一所携带的数据,将读取到的数据经Socket2发出,记从Socket2发出的TCP数据报文为TCP数据报文二;
其中,TCP代理内核模块可通过PREROUTING点的HOOK截获TCP数据报文一,地址转换模块进行目标地址转换将TCP数据报文一中的目的IP地址和目的端口转换为Linux网桥设备的本地IP地址和TCP代理进程模块监听的端口,重定向TCP数据报文一至TCP代理进程模块,TCP代理进程模块通过Socket1读取TCP数据报文一所携带的数据,将读取到的数据经Socket2发出,并对相应的TCP数据报文标记Mark X,记从Socket2发出的TCP数据报文为TCP数据报文二。
T3、通过配置的策略路由使得TCP数据报文二绕过Linux网桥设备内部的路由选择,将TCP数据报文二中的源IP地址和源端口转换为TCP数据报文一中的源IP地址和源端口;通过配置的静态ARP使得TCP数据报文二绕过Linux网桥设备内部的ARP查询过程,将TCP数据报文二送至Linux网桥设备内的网桥模块;
通过可通过配置的策略路由将带有标记Mark X或MarkY的报文均通过设定的与网桥模块同网段的网关转发,如此便欺骗路由选择模块让其认为目的主机三层数据可达,数据包或者报文在这里就不会被丢弃了;上述策略路由使得TCP数据报文二绕过Linux网桥设备内部的路由选择,将TCP数据报文二中的源IP地址和源端口转换为TCP数据报文一中的源IP地址和源端口;通过上述静态ARP可使得TCP数据报文二绕过Linux网桥设备内部的ARP查询过程,将TCP数据报文二送至Linux网桥设备内的网桥模块;
T4、截获TCP数据报文二,将TCP数据报文二的目的MAC地址和源MAC地址转换为TCP数据报文一中的目的MAC地址和源MAC地址;将TCP数据报文二填上以太网头部发送给TCP数据报文一的链路层目的主机。
其中,TCP代理内核模块可通过BR_ENTRY点在在MAC地址查表之前截获TCP数据报文二,将TCP数据报文二的目的MAC地址和源MAC地址转换为TCP数据报文一中的目的MAC地址和源MAC地址;将TCP数据报文二填上以太网头部发送给TCP数据报文一的链路层目的主机。
主机B到主机A的TCP数据报文处理包括如下步骤:
U1、主机B向主机A发送TCP数据报文,记为TCP数据报文三;
U2、Linux网桥设备截获所述TCP数据报文三,重定向TCP数据报文三至TCP代理进程模块,TCP代理进程模块通过Socket2读取TCP数据报文三所携带的数据,将该TCP数据报文三中携带的数据经Socket1发出并打上标记,记该标记为Mark Y,记从Socket1发出的TCP数据报文为TCP数据报文四;
其中,TCP代理内核模块可通过PREROUTING点的HOOK截获TCP数据报文三,地址转换模块进行目标地址转换将TCP数据报文三中的目的IP地址和目的端口转换为Linux网桥设备的本地IP地址和TCP代理进程模块监听的端口,重定向TCP数据报文三至TCP代理进程模块,TCP代理进程模块通过Socket2读取TCP数据报文三所携带的数据,将该TCP数据报文三中携带的数据经Socket1发出,并对相应的TCP数据报文标记Mark Y,记从Socket1发出的TCP数据报文为TCP数据报文四;
U3、通过配置的策略路由使得TCP数据报文四绕过Linux网桥设备内部的路由选择,将TCP数据报文四中的源IP地址和源端口转换为TCP数据报文三中的源IP地址和源端口;通过配置的静态ARP使得TCP数据报文四绕过Linux网桥设备内部的ARP查询过程,将TCP数据报文四送至Linux网桥设备内的网桥模块;
其中,通过上述策略路由使得TCP数据报文四绕过Linux网桥设备内部的路由选择,将TCP数据报文四中的源IP地址和源端口转换为TCP数据报文三中的源IP地址和源端口;通过上述静态ARP使得TCP数据报文四绕过Linux网桥设备内部的ARP查询过程,将TCP数据报文四送至Linux网桥设备内的网桥模块;
U4、截获TCP数据报文四,将TCP数据报文四的目的MAC地址和源MAC地址转换为TCP数据报文三中的目的MAC地址和源MAC地址;将TCP数据报文四填上以太网头部发送给TCP数据报文一的链路层目的主机。
其中,TCP代理内核模块可通过BR_ENTRY点在在MAC地址查表之前截获TCP数据报文四,将TCP数据报文四的目的MAC地址和源MAC地址转换为TCP数据报文三中的目的MAC地址和源MAC地址;将TCP数据报文四填上以太网头部发送给TCP数据报文一的链路层目的主机。
Claims (13)
1.Linux网桥设备上实现TCP透明代理的方法,其特征在于,包括主机A与主机B建立TCP连接以及该TCP连接建立完毕后主机A与主机B之间的TCP数据报文处理,所述主机A与主机B建立TCP连接包括如下步骤:
S1、主机A向主机B发出TCP的SYN报文请求建立TCP连接,记该SYN报文为SYN报文一;
S2、Linux网桥设备截获所述SYN报文一,记录SYN报文一的信息,把TCP连接重定向给Linux网桥设备内的TCP代理进程模块,TCP代理进程模块伪装主机B发送对应的SYN ACK报文给主机A,主机A回复相应的ACK报文,如此Linux网桥设备完成与主机A的TCP连接的建立,记该TCP连接对应的Socket为Socket1;
S3、TCP代理进程模块向主机B发送TCP的SYN报文请求建立TCP连接,记该SYN报文为SYN报文二,记该TCP连接对应的Socket为Socket2,并设置经Socket2发出的报文均打上标记,记为Mark X;
S4、通过配置的策略路由使得带有Mark X的SYN报文二绕过Linux网桥设备内部的路由选择,进行源地址转换,将SYN报文二中的源IP地址和源端口转换为SYN报文一中的源IP地址和源端口;通过配置的静态ARP使得SYN报文二绕过Linux网桥设备内部的ARP查询过程,将SYN报文二送至Linux网桥设备内的网桥模块;
S5、截获SYN报文二,进行目的地址转换,将SYN报文二的目的MAC地址和源MAC地址转换为SYN报文一中的目的MAC地址和源MAC地址;将SYN报文二填上以太网头部发送给SYN报文一的链路层目的主机;
S6、主机B收到SYN报文二后回复对应的SYN ACK报文,该SYN ACK报文被重定向至TCP代理进程模块,TCP代理进程模块回复对应的ACK报文,如此Linux网桥设备伪装成主机A完成与主机B的TCP连接的建立。
2.如权利要求1所述的Linux网桥设备上实现TCP透明代理的方法,其特征在于,所述主机A与主机B之间的TCP数据报文处理包括主机A到主机B的TCP数据报文处理,所述主机A到主机B的TCP数据报文处理包括如下步骤:
T1、主机A向主机B发送TCP数据报文,记为TCP数据报文一;
T2、Linux网桥设备截获所述TCP数据报文一,重定向TCP数据报文一至TCP代理进程模块,TCP代理进程模块通过Socket1读取TCP数据报文一所携带的数据,将读取到的数据经Socket2发出,记从Socket2发出的TCP数据报文为TCP数据报文二;
T3、通过配置的策略路由使得TCP数据报文二绕过Linux网桥设备内部的路由选择,将TCP数据报文二中的源IP地址和源端口转换为TCP数据报文一中的源IP地址和源端口;通过配置的静态ARP使得TCP数据报文二绕过Linux网桥设备内部的ARP查询过程,将TCP数据报文二送至Linux网桥设备内的网桥模块;
T4、截获TCP数据报文二,将TCP数据报文二的目的MAC地址和源MAC地址转换为TCP数据报文一中的目的MAC地址和源MAC地址;将TCP数据报文二填上以太网头部发送给TCP数据报文一的链路层目的主机。
3.如权利要求1所述的Linux网桥设备上实现TCP透明代理的方法,其特征在于,所述主机A与主机B之间的TCP数据报文处理包括主机B到主机A的TCP数据报文处理,所述主机B到主机A的TCP数据报文处理包括如下步骤:
U1、主机B向主机A发送TCP数据报文,记为TCP数据报文三;
U2、Linux网桥设备截获所述TCP数据报文三,重定向TCP数据报文三至TCP代理进程模块,TCP代理进程模块通过Socket2读取TCP数据报文三所携带的数据,将该TCP数据报文三中携带的数据经Socket1发出并打上标记,记该标记为Mark Y,记从Socket1发出的TCP数据报文为TCP数据报文四;
U3、通过配置的策略路由使得TCP数据报文四绕过Linux网桥设备内部的路由选择,将TCP数据报文四中的源IP地址和源端口转换为TCP数据报文三中的源IP地址和源端口;通过配置的静态ARP使得TCP数据报文四绕过Linux网桥设备内部的ARP查询过程,将TCP数据报文四送至Linux网桥设备内的网桥模块;
U4、截获TCP数据报文四,将TCP数据报文四的目的MAC地址和源MAC地址转换为TCP数据报文三中的目的MAC地址和源MAC地址;将TCP数据报文四填上以太网头部发送给TCP数据报文一的链路层目的主机。
4.如权利要求2所述的Linux网桥设备上实现TCP透明代理的方法,其特征在于,所述步骤S2中Linux网桥设备截获所述SYN报文一的步骤包括:采用Linux网桥设备中的netfilter模块在PREROUTING点增加HOOK来截获所述SYN报文一;
步骤T2中Linux网桥设备截获所述TCP数据报文一的步骤包括:采用Linux网桥设备中的netfilter模块在PREROUTING点增加的HOOK来截获所述TCP数据报文一。
5.如权利要求3所述的Linux网桥设备上实现TCP透明代理的方法,其特征在于,所述步骤S2中Linux网桥设备截获所述SYN报文一的步骤包括:采用Linux网桥设备中的netfilter模块在PREROUTING点增加HOOK来截获所述SYN报文一;
步骤U2中Linux网桥设备截获所述TCP数据报文三的步骤包括:采用Linux网桥设备中的netfilter模块在PREROUTING点增加的HOOK点来截获所述TCP数据报文三。
6.如权利要求1或2或3所述的Linux网桥设备上实现TCP透明代理的方法,其特征在于,所述步骤S2中记录SYN报文一的信息包括至少记录SYN报文一的源IP地址、目的IP地址、源端口、目的端口、源MAC地址和目的MAC地址。
7.如权利要求2所述的Linux网桥设备上实现TCP透明代理的方法,其特征在于,所述步骤S2中把TCP连接重定向给Linux网桥设备内的TCP代理进程模块的步骤包括:进行目标地址转换将SYN报文一中的目的IP地址和目的端口转换为Linux网桥设备的本地IP地址和TCP代理进程模块监听的端口;
步骤T2中重定向TCP数据报文一至TCP代理进程模块的步骤包括:进行目标地址转换将TCP数据报文一中的目的IP地址和目的端口转换为Linux网桥设备的本地IP地址和TCP代理进程模块监听的端口。
8.如权利要求3所述的Linux网桥设备上实现TCP透明代理的方法,其特征在于,所述步骤S2中把TCP连接重定向给Linux网桥设备内的TCP代理进程模块的步骤包括:进行目标地址转换将SYN报文一中的目的IP地址和目的端口转换为Linux网桥设备的本地IP地址和TCP代理进程模块监听的端口;
步骤U2中重定向TCP数据报文三至TCP代理进程模块的步骤包括:进行目标地址转换将TCP数据报文三中的目的IP地址和目的端口转换为Linux网桥设备的本地IP地址和TCP代理进程模块监听的端口。
9.如权利要求1所述的Linux网桥设备上实现TCP透明代理的方法,其特征在于,所述步骤S3中TCP代理进程模块伪装成主机A向主机B发送TCP的SYN报文请求建立TCP连接的步骤包括:TCP代理进程模块获取SYN报文一的目的IP地址和目的端口,根据该目的IP地址和目的端口创建Socket2。
10.如权利要求1或2或3所述的Linux网桥设备上实现TCP透明代理的方法,其特征在于,所述配置的策略路由为将带有标记Mark X或MrakY的报文均通过设定的与网桥模块同网段的网关转发;所述配置的静态ARP为将带有Mark X或MrakY的报文中的目的MAC地址设置为所述网关的目的MAC地址。
11.如权利要求2所述的Linux网桥设备上实现TCP透明代理的方法,其特征在于,所述步骤S5中截获SYN报文二采用的方法为:采用Linux网桥设备中的netfilter模块在MAC地址查表之前增加HOOK来截获SYN报文二,记该HOOK点为BR_ENTRY;
步骤T4中,采用Linux网桥设备中的netfilter模块在MAC地址查表之前增加HOOK来截获TCP数据报文二。
12.如权利要求3所述的Linux网桥设备上实现TCP透明代理的方法,其特征在于,所述步骤S5中截获SYN报文二采用的方法为:采用Linux网桥设备中的netfilter模块在MAC地址查表之前增加HOOK来截获SYN报文二,记该HOOK点为BR_ENTRY;
步骤U4中,采用Linux网桥设备中的netfilter模块在MAC地址查表之前增加HOOK来截获TCP数据报文四。
13.Linux网桥设备上实现TCP透明代理的***,其特征在于,包括Linux网桥设备,所述Linux网桥设备包括网桥模块、TCP代理内核模块、路由选择模块、地址转换模块、Socket通信模块和TCP代理进程模块;
网桥模块用于数据链路层的通信;
TCP代理内核模块用于截获报文,记录报文信息,根据需要修改报文的目的MAC地址和源MAC地址,TCP代理内核模块包括netfilter模块;
路由选择模块用于执行正常的路由转发功能;
地址转换模块用于实现源地址转换和目的地址转换功能;
Socket通信模块用于建立TCP代理进程模块与主机A的套接字及TCP代理进行模块与和主机B的套接字;
TCP代理进程模块用于伪装成目的主机与源主机建立TCP连接,并伪装成源主机与目的主机建立新的TCP连接,主机A和主机B互为源主机和目的主机;
地址解析模块用于ARP查询。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811458579.0A CN109547452B (zh) | 2018-11-30 | 2018-11-30 | Linux网桥设备上实现TCP透明代理的方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811458579.0A CN109547452B (zh) | 2018-11-30 | 2018-11-30 | Linux网桥设备上实现TCP透明代理的方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109547452A CN109547452A (zh) | 2019-03-29 |
CN109547452B true CN109547452B (zh) | 2021-04-02 |
Family
ID=65852119
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811458579.0A Active CN109547452B (zh) | 2018-11-30 | 2018-11-30 | Linux网桥设备上实现TCP透明代理的方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109547452B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111447144A (zh) * | 2020-04-01 | 2020-07-24 | 中核武汉核电运行技术股份有限公司 | 一种基于透明代理的应用路由方法 |
CN112671869B (zh) * | 2020-12-15 | 2023-01-10 | 北京天融信网络安全技术有限公司 | 网桥透明代理方法、装置、电子设备及存储介质 |
CN114125030B (zh) * | 2021-11-30 | 2024-07-19 | 北京天融信网络安全技术有限公司 | 连接跟踪方法、装置、电子设备和计算机可读存储介质 |
CN114268470B (zh) * | 2021-12-06 | 2024-06-07 | 深圳飞音时代网络通讯技术有限公司 | 一种报文的传输方法、装置及设备 |
CN115499410B (zh) * | 2022-07-29 | 2023-06-23 | 天翼云科技有限公司 | 基于Linux的NAT穿透方法、装置、设备及存储介质 |
CN116233237B (zh) * | 2022-12-13 | 2024-01-26 | 山东安控信息科技有限公司 | 一种透明代理网关机及其工作方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1437115A (zh) * | 2002-02-08 | 2003-08-20 | 联想(北京)有限公司 | 实现防火墙交换式透明代理的方法 |
CN101394364A (zh) * | 2008-10-30 | 2009-03-25 | 西安电子科技大学 | 基于双网卡的MIPv6无缝切换方法 |
US7864788B2 (en) * | 2007-03-13 | 2011-01-04 | Cymphonix Corporation | System and method for bridging proxy traffic in an electronic network |
CN103491065A (zh) * | 2012-06-14 | 2014-01-01 | 中兴通讯股份有限公司 | 一种透明代理及其实现方法 |
CN104994137A (zh) * | 2015-05-27 | 2015-10-21 | 四川卫士通信息安全平台技术有限公司 | 一种网络透明代理的方法 |
CN106230898A (zh) * | 2016-07-21 | 2016-12-14 | 网宿科技股份有限公司 | 网络***、代理服务器及其应用的数据处理方法及*** |
CN108667675A (zh) * | 2018-08-14 | 2018-10-16 | 浙江亿邦通信科技有限公司 | 一种通信方法、通信设备及通信专线备网方法 |
-
2018
- 2018-11-30 CN CN201811458579.0A patent/CN109547452B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1437115A (zh) * | 2002-02-08 | 2003-08-20 | 联想(北京)有限公司 | 实现防火墙交换式透明代理的方法 |
US7864788B2 (en) * | 2007-03-13 | 2011-01-04 | Cymphonix Corporation | System and method for bridging proxy traffic in an electronic network |
CN101394364A (zh) * | 2008-10-30 | 2009-03-25 | 西安电子科技大学 | 基于双网卡的MIPv6无缝切换方法 |
CN103491065A (zh) * | 2012-06-14 | 2014-01-01 | 中兴通讯股份有限公司 | 一种透明代理及其实现方法 |
CN104994137A (zh) * | 2015-05-27 | 2015-10-21 | 四川卫士通信息安全平台技术有限公司 | 一种网络透明代理的方法 |
CN106230898A (zh) * | 2016-07-21 | 2016-12-14 | 网宿科技股份有限公司 | 网络***、代理服务器及其应用的数据处理方法及*** |
CN108667675A (zh) * | 2018-08-14 | 2018-10-16 | 浙江亿邦通信科技有限公司 | 一种通信方法、通信设备及通信专线备网方法 |
Non-Patent Citations (1)
Title |
---|
基于Linux的双出口透明网关的实现;杨伟等;《计算机应用与软件》;20070831;第24卷(第8期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN109547452A (zh) | 2019-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109547452B (zh) | Linux网桥设备上实现TCP透明代理的方法及*** | |
US9448821B2 (en) | Method and system for realizing virtual machine mobility | |
EP1693996B1 (en) | Automatic discovery of psuedo-wire peer addresses in ethernet-based networks | |
CN112671628B (zh) | 业务服务提供方法及*** | |
EP3065358A1 (en) | Method and device for message forwarding | |
JP2019526983A (ja) | ブロードバンドリモートアクセスサーバの制御プレーン機能と転送プレーン機能の分離 | |
CN101043430B (zh) | 一种设备之间网络地址转换的方法 | |
EP2456130A1 (en) | System for network deployment and method for mapping and data forwarding thereof | |
JP2013504959A (ja) | バーチャルプライベートネットワークの実現方法及びシステム | |
WO2015143802A1 (zh) | 业务功能链处理方法及装置 | |
US20230097324A1 (en) | Layer-2 network extension over layer-3 network using layer-2 metadata | |
CN107948150B (zh) | 报文转发方法及装置 | |
US11677717B2 (en) | Unified network service that connects multiple disparate private networks and end user client devices operating on separate networks | |
WO2021073555A1 (zh) | 业务服务提供方法及***、远端加速网关 | |
WO2017107871A1 (zh) | 访问控制方法和网络设备 | |
CN103685588A (zh) | 客户端模式下无线网络设备网桥转发报文的方法及装置 | |
JP3858884B2 (ja) | ネットワークアクセスゲートウェイ及びネットワークアクセスゲートウェイの制御方法並びにプログラム | |
JP6386166B2 (ja) | IPv4とIPv6との間の翻訳方法及び装置 | |
CN107547403B (zh) | 报文转发方法、协助方法、装置、控制器及主机 | |
JP4925130B2 (ja) | 通信制御方法およびシステム | |
CN110752989A (zh) | 一种东西向流量转发方法与装置 | |
JP2012085208A (ja) | Lispネットワークの通信方法 | |
WO2016078235A1 (zh) | 基于PNAT向IPv6过渡的网络转换实现方法、装置 | |
CN108809795A (zh) | 一种局域网环境中透明分流方法和装置 | |
CN117439815B (zh) | 一种基于反向透明桥接的内网穿透***及方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |