基于反向代理工具Frp多级代理案例介绍
1.原理介绍
- 首先,frpc 启动之后,连接 frps,并且发送一个请求 login(),之后保持住这个长连接,如果断开了,就重试
- frps 收到请求之后,会建立一个 listener 监听来自公网的请求
- 当 frps 接受到请求之后,会在本地看是否有可用的连接( frp 可以设置连接池),如果没有,就下发一个 msg.StartWorkConn 并且 等待来自 frpc 的请求
- frpc 收到之后,对 frps 发起请求,请求的最开始会指名这个连接是去向哪个 proxy 的
- frps 收到来自 frpc 的连接之后,就把新建立的连接与来自公网的连接进行流量互转
- 如果请求断开了,那么就把另一端的请求也断开
2.模拟环境
网络拓扑图如下,为了实现多级代理的功能,只有同层间的网络才能互相访问,不同网段之间是不能进行访问的
vps: XX.XX.XX.XX ;攻击者:192.168.0.X
- 第一层网络:192.168.0.0/24
- 第二层网络:10.10.10.0/24
- 第三层网络:192.168.216.0/24
多级代理实现过程
内网的环境中一般只有一层,没有做比较大的限制,⽐如说A 主机的⽹段是 192.168.0.X ,内⽹其他主机的⽹段也是 192.168.0.X,或者没有对其他网段做逻辑隔离限制。那么就可以直接搭建简单的一层内⽹隧道;那么如果⽬标内⽹有⼆层(10.10.10.X )、三层(192.168.216.X),每⼀层主机的⽹段只能和上⼀层的⽹段相互访问,那么这个时候我们应该怎样做,才能从第⼀层访问到最后⼀层,直到把整个内网的网段都能进行整体的访问,这就需要多级代理的功能点。
3.功能实现
3.1 Frp实现第一层网络的功能
(1) 启动frp的服务端
- 在我们的VPS上面启动服务端
1 | Linux: ./frps -c ./frps.ini |
- VPS上Frps的配置
1 | [common] |
- 运行成功
- 控制台界面
(2) 启动frp客户端
- 在192.168.0.105启动客户端
1 | Linux: ./frpc -c ./frpc.ini |
- 192.168.0.105上Frpc的配置
1 | [common] |
- 运行成功
- 控制台
发现Vps上面控制台已经成功显示客户端上线,frps和frpc的流量已经建立了连接
(3) 启动Proxifier连接
Proxifier介绍
Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。
Proxifier连接
- 连接我们的代理服务器地址和转发出来的端口
- 代理服务器连接完成之后,设置代理规则,到达的网段地址
- 设置完规则之后,我们尝试连接一下10.10.10.x这个网段,看看第一层的代理是否连通
3.2 Frp实现第二层网络的功能
现在我们的一层网络代理,只能访问到10.10.10.xx这个网段,所以现在192.168.0.105这台机器充当frp服务端和frp客户端以便访问第二层网络192.168.216.XX。
(1) 启动frp的服务端
1 | Linux: ./frps -c ./frps.ini |
- frp服务端配置
1 | [common] |
(2) 启动frp的客户端
- frp客户端配置
1 | [common] |
- 运行成功
(3) 在192.168.216.128中启动frp的客户端
- frp客户端配置
1 | [common] |
(4) 启动Proxifier连接
- 在代理规则中加入另一个网段的地址,可以方便进行访问请求。
- 设置完规则之后,我们尝试连接一下192.168.216.XX这个网段,看看第二层的代理是否连通
按照这种反向代理的方法,不管是第几层网络我们都能访问到。从而实现了内网中的多级代理功能。