Frp多级代理

文章的内容是对于多级代理的介绍
基于反向代理工具Frp多级代理案例介绍

1.原理介绍

  1. 首先,frpc 启动之后,连接 frps,并且发送一个请求 login(),之后保持住这个长连接,如果断开了,就重试
  2. frps 收到请求之后,会建立一个 listener 监听来自公网的请求
  3. 当 frps 接受到请求之后,会在本地看是否有可用的连接( frp 可以设置连接池),如果没有,就下发一个 msg.StartWorkConn 并且 等待来自 frpc 的请求
  4. frpc 收到之后,对 frps 发起请求,请求的最开始会指名这个连接是去向哪个 proxy 的
  5. frps 收到来自 frpc 的连接之后,就把新建立的连接与来自公网的连接进行流量互转
  6. 如果请求断开了,那么就把另一端的请求也断开
连接图

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
2
Linux:     ./frps -c ./frps.ini
Windows: frps.exe -c frps.ini
  • VPS上Frps的配置
1
2
3
4
5
6
[common]
bind_port = 7666 # 服务器监听端口
token = 520 # 这个token之后在客户端会用到
dashboard_port = 7501 # frp管理后台端口,请按自己需求更改
dashboard_user = admin # frp管理后台用户名和密码,请改成自己的
dashboard_pwd = admin
  • 运行成功

Frps

  • 控制台界面

控制台1

(2) 启动frp客户端

  • 在192.168.0.105启动客户端
1
2
Linux:     ./frpc -c ./frpc.ini
Windows: frpc.exe -c frpc.ini
  • 192.168.0.105上Frpc的配置
1
2
3
4
5
6
7
[common]
server_addr = XX.XX.XX.XX # vps的IP地址
server_port = 7666 # 服务器监听端口
[plugin_socks]
type = tcp
remote_port = 9999 # 转发至服务器的接收端口
plugin = socks5 # 使用socks5加密
  • 运行成功

frp1

  • 控制台

控制台

发现Vps上面控制台已经成功显示客户端上线,frps和frpc的流量已经建立了连接

(3) 启动Proxifier连接

Proxifier介绍

Proxifier是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。

Proxifier连接

  • 连接我们的代理服务器地址和转发出来的端口

服务器

  • 代理服务器连接完成之后,设置代理规则,到达的网段地址

代理规则1

  • 设置完规则之后,我们尝试连接一下10.10.10.x这个网段,看看第一层的代理是否连通

10.10.10.101

3.2 Frp实现第二层网络的功能

现在我们的一层网络代理,只能访问到10.10.10.xx这个网段,所以现在192.168.0.105这台机器充当frp服务端和frp客户端以便访问第二层网络192.168.216.XX。

(1) 启动frp的服务端

1
2
Linux:     ./frps -c ./frps.ini
Windows: frps.exe -c frps.ini
  • frp服务端配置
1
2
3
[common]
bind_addr = 10.10.10.150
bind_port = 7666

(2) 启动frp的客户端

  • frp客户端配置
1
2
3
4
5
6
7
8
9
10
[common]
server_addr = XX.XX.XX.XX
server_port = 7666
[http_proxy]
type = tcp
remote_port = 9999
#plugin = socks5,不能加上这个
#相较于一级代理,增加如下两个配置
local_ip = 10.10.10.150
local_port = 9999
  • 运行成功

frps1

frp1

(3) 在192.168.216.128中启动frp的客户端

  • frp客户端配置
1
2
3
4
5
6
7
[common]
server_addr = 10.10.10.150
server_port = 7666
[http_proxy]
type = tcp
remote_port = 9999
plugin = socks5

(4) 启动Proxifier连接

  • 在代理规则中加入另一个网段的地址,可以方便进行访问请求。

代理规则

  • 设置完规则之后,我们尝试连接一下192.168.216.XX这个网段,看看第二层的代理是否连通

192.168.216.128

按照这种反向代理的方法,不管是第几层网络我们都能访问到。从而实现了内网中的多级代理功能。


谢谢大家观赏文章!
------ 本文结束感谢您的阅读 ------