Frp+Proxifier反向代理实现内网穿透
前言
近期被某个抽象比赛的虚拟机卡红温了,而又因为线下赛主赛场在外地,我们只能使用这个赛方提供的虚拟机远程接入比赛内网,体验很不好,于是想着搞内网穿透了。
内网穿透
已知有三台机器ABC,A为本机,B为赛方提供的可连接公网并可访问内网的跳板机,C则为内网服务器。
正常来说,我们通过本机是无法直接访问到C这个内网服务器的,这时候就需要用到内网穿透,让B这个跳板机作为中间商进行流量的转发。
在赛时完成整套搭建后,实际上有4台主机参与了整个交互:
非内网主机A
内网跳板机B
内网服务器C
公网服务器D
A本地安装
Proxifier
通过D进行代理D上安装Frp服务端双向接受来自A和B的信息
B上安装Frp客户端,作为被代理的一方,与C直接交互
最终实现A可以直接访问C
Frp反向代理+Proxifier实现内网穿透
最终我选择的解决方案使用Frp
进行反向代理,并使用Proxifier
实现本地客户端的全局代理。
需要明确的是,服务端指的是你所连接的公网服务器,客户端是实际需要被内网穿透的跳板机。
简单来说公网服务器就是服务端,能够访问内部局域网服务的就是客户端,客户端可以是你的本机,也可以是一个跳板机。
你首先需要:
- 一台有着公网IP的服务器;
- Frp (V36.2)客户端与服务端;
- Proxifier客户端 (亲测可用的密钥:
5EZ8G-C3WL5-B56YG-SCXM9-6QZAP
)。
Frp搭建
首先你需要选择对应系统版本的Frp:
1 | uname -m # 查看linux系统架构 |
服务端
以下以unbuntu22.04
作为服务端为例。
基础配置
首先将下载的Frp文件上传至你的公网服务器中。
依次执行:
1 | sudo mkdir /opt/frp # 存放软件路径 |
成功完成所需文件准备。
然后需要进行配置文件设置:
1 | vim frps.ini |
将文件内容修改为这样的基础配置,可根据自身情况进行修改:
1 | [common] |
解释:
1 | [common] |
同时如果是云服务器,需要在云服务器的安全组中放行对应端口。
如果开启了防火墙,需要放行开放的端口:
1 | firewall-cmd --zone=public --add-port=7000/tcp --permanent #开放7000端口,其他端口也依次开放 |
尝试运行:
1 | ./frps -c ./frps.ini |
像这样便是成功运行了。
如果运行报错,大概率是frp版本有误,重新检查一下该选择哪个架构版本。
开机自启动
接下来可配置开机自启动,临时用一下就不需要了:
1 | vim /lib/systemd/system/frps.service |
将文件内容修改为:
1 | [Unit] |
然后重载服务:
1 | systemctl daemon-reload |
基本操作:
1 | systemctl start frps #启动frps |
客户端
以下以window11
作为客户端为例。
基础配置
首先将frp文件下载到合适的位置并解压,进入到解压后的目录,并在该目录处打开终端。
同样的,删除frps
开头的文件,这些是服务端的组件,客户端不需要。
打开frpc.ini
修改内容为:
1 | [common] |
解释:
1 | [common] |
启动服务:
1 | ./frpc.exe -c frpc.ini |
没有报错的话,应该就已经实现了内网穿透,其他主机可以通过服务端socks5进行代理后就可以访问到该客户端的内网服务了
Proxifier的使用
Proxifier
是一个知名的代理工具,它允许用户将网络应用程序通过代理服务器进行连接。它本身只是一个代理管理的工具,可以设置和管理代理连接,但并不提供代理服务器。
下载安装好Proxifier
后,确保服务端与客户端服务均是开启状态。
依次点击Profile -> Proxy Serves -> add
,然后在address
栏输入服务端ip
,和frpc.ini
中设置的remote_port
,Protocol
选择为socks5
勾选上Enable
,用户名和密码是frpc.ini
中设置的,最后点击check
测试连接
测试通过说明已经成功连接上了,点击OK
保存
最后打开Profile -> Procification Rules
,将Action
选项中选择刚刚保存的代理服务器并点击OK
保存即可
为了避免流量较大,一般来说会将Target Hosts
设置为内网ip,参考设置:
1 | localhost; 127.0.0.1; %ComputerName%; ::1;10.*.*.*;172.*.*.*;192.168.*.*; |
完成所有配置后,此时如果在客户端中的局域网开启了一个WEB服务,那么公网其他主机便可以使用Proxifier通过服务端socks5的代理直接访问到内网的WEB服务。
在linux中可使用ProxyChains
,此处不再赘述。