frq1-反向代理概述
Posted 顺治天下
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了frq1-反向代理概述相关的知识,希望对你有一定的参考价值。
frq 是 fast reverse proxy. 三个单词的缩写,快速、反向、代理。
frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。
Network Address Translation NAT的工作原理和每个阶段的状态。
1 概述
1.1 简介
1.2 分类
NAPT是使用最普遍的一种转换方式,在HomeGW中也主要使用该方式。它又包含两种转换方式:SNAT和DNAT。
(1)源NAT(Source NAT,SNAT):修改数据包的源地址。源NAT改变第一个数据包的来源地址,它永远会在数据包发送到网络之前完成,数据包伪装就是一具SNAT的例子。
(2)目的NAT(Destination NAT,DNAT):修改数据包的目的地址。Destination NAT刚好与SNAT相反,它是改变第一个数据懈的目的地地址,如平衡负载、端口转发和透明代理就是属于DNAT。
1.3 应用
NAT主要可以实现以下几个功能:数据包伪装、平衡负载、端口转发和透明代理。
数据伪装: 可以将内网数据包中的地址信息更改成统一的对外地址信息,不让内网主机直接暴露在因特网上,保证内网主机的安全。同时,该功能也常用来实现共享上网。
端口转发: 当内网主机对外提供服务时,由于使用的是内部私有IP地址,外网无法直接访问。因此,需要在网关上进行端口转发,将特定服务的数据包转发给内网主机。
负载平衡: 目的地址转换NAT可以重定向一些服务器的连接到其他随机选定的服务器。(不是很明白)
失效终结: 目的地址转换NAT可以用来提供高可靠性的服务。如果一个系统有一台通过路由器访问的关键服务器,一旦路由器检测到该服务器当机,它可以使用目的地址转换NAT透明的把连接转移到一个备份服务器上。(如何转移的?)
透明代理: NAT可以把连接到因特网的HTTP连接重定向到一个指定的HTTP代理服务器以缓存数据和过滤请求。一些因特网服务提供商就使用这种技术来减少带宽的使用而不用让他们的客户配置他们的浏览器支持代理连接。(如何重定向的?)
2 原理
2.1 地址转换
NAT的基本工作原理是,当私有网主机和公共网主机通信的IP包经过NAT网关时,将IP包中的源IP或目的IP在私有IP和NAT的公共IP之间进行转换。
2.2 连接跟踪
NAT Gateway在收到响应包后,就需要判断将数据包转发给谁。此时如果子网内仅有少量客户机,可以用静态NAT手工指定;但如果内网有多台客户机,并且各自访问不同网站,这时候就需要连接跟踪(connection track)。如下图所示:
2.3 端口转换
以上述客户机访问服务器为例,当仅有一台客户机访问服务器时,NAT Gateway只须更改数据包的源IP或目的IP即可正常通讯。但是如果Client A和Client B同时访问Web Server,那么当NAT Gateway收到响应包的时候,就无法判断将数据包转发给哪台客户机,如下图所示。
此时,NAT Gateway会在Connection Track中加入端口信息加以区分。如果两客户机访问同一服务器的源端口不同,那么在Track Table里加入端口信息即可区分,如果源端口正好相同,那么在时行SNAT和DNAT的同时对源端口也要做相应的转换,如下图所示。(这里的理解灰常重要)
内网穿透原理
简单地说,内网穿透依赖于 NAT 原理,根据 NAT 设备不同大致可分为以下 4 大类(前3种NAT类型可统称为cone类型):
全克隆(Full Cone):NAT 把所有来自相同内部 IP 地址和端口的请求映射到相同的外部 IP 地址和端口上,任何一个外部主机均可通过该映射反向发送 IP 包到该内部主机
限制性克隆(Restricted Cone):NAT 把所有来自相同内部 IP 地址和端口的请求映射到相同的外部 IP 地址和端口;但是,只有当内部主机先给 IP 地址为 X 的外部主机发送 IP 包时,该外部主机才能向该内部主机发送 IP 包
端口限制性克隆(Port Restricted Cone):端口限制性克隆与限制性克隆类似,只是多了端口号的限制,即只有内部主机先向 IP 地址为 X,端口号为 P 的外部主机发送1个 IP 包,该外部主机才能够把源端口号为 P 的 IP 包发送给该内部主机
对称式NAT(Symmetric NAT):这种类型的 NAT 与上述3种类型的不同,在于当同一内部主机使用相同的端口与不同地址的外部主机进行通信时, NAT 对该内部主机的映射会有所不同;对称式 NAT 不保证所有会话中的私有地址和公开 IP 之间绑定的一致性;相反,它为每个新的会话分配一个新的端口号;导致此种 NAT 根本没法穿透
内网穿透的作用就是利用以上规则,创建一条从外部服务器到内部设备的 “隧道”,具体的 NAT 原理等可参考 内网打洞、网络地址转换NAT原理
NAT 穿透原理
我们打开浏览器访问 Google,Google 与我们主机之间如何通信?
假设我们主机 IP 为192.168.0.100,路由器 LAN IP 为192.168.0.1,WAN IP 为211.22.145.234(这是一个公网 IP),Google 服务器 IP 为74.125.204.101。
详细通信流程如下:
主机构建 HTTP 请求数据包,目标 IP 为74.125.204.101,目标端口80/443,源 IP 为192.168.0.100,源端口随机生成,假定为5000。
主机检查目标 IP 地址,发现不在一个网段,数据包丢给默认网关192.168.0.1。
路由器 LAN 口收到数据包,构建 NAT 映射,随机生成端口,假定为5500,这样映射就是 :5500 -> 192.168.0.100:5000。WAN 口收到的数据包,如果目标端口是5500,则转发给内网 IP 为192.168.0.100的机器的5000端口。
路由器修改数据包的源端口为5500,源 IP 地址为211.22.145.234,使用 WAN 口将数据包发送出去。
Google 服务器收到请求,构建响应 HTTP 数据包,目标 IP 地址211.22.145.234,目标端口为5500。
路由器 WAN 口收到数据包,目标端口为5500,查询 NAT 表,发现对应的机器是192.168.0.100:5000,所以修改目标 IP 为192.168.0.100,目标端口为5000。并通过 LAN 口发送给主机。
主机接收到数据包,完成这一次通信。
从上面可以看出,内网机器能够和外网通信,全靠拥有公网 IP 的路由器做交通枢纽。
路由器通过查询 NAT 表,来确定数据包该发送给内网哪台机器。
所以内网多台机器都可以通过这一台路由器和外网进行通信。这极大的节省了宝贵的公网 IP 资源。
frq 就是利用以上原理实现了内网穿透的工具,只是稍有不同,交换的工具从路由器变成了我们具有固定 IP 的 VPS。
当然原理没有大变,都是找一个公网服务器做中介。此处成为服务器 A。流程如下。
1. 本地内网主机和服务器A构建一条连接2. 用户访问服务器A3. 服务器A联系本地内网主机获取内容4. 服务器A将获取到的内容发送给用户5. 通过上面的流程,就实现了用户访问到了我们内网的内容。
那么帮助我们实现这个功能的程序就是 frq 。通过在服务器上安装 frq ,我们就可以和本地主机构建一条隧道。来让外网用户访问本地主机的内容。
以上是关于frq1-反向代理概述的主要内容,如果未能解决你的问题,请参考以下文章