现状
客户端能主动连接到服务器,但是内网服务器无法主动发外流量,流量单方面能通
图片0
这是提供了一种思路
需求
内网服务器(windows系统)有时候需要连网下载各种工具,需要将虚拟机的流量转发到PC,然后通过PC代理去公网,最后实现内网服务器的上网需求。
分析
- 利用frp实现客户端主动连接内网服务器,建立连接,后面利用这条连接转发内网报文
- 利用某ray软件实现将内网服务器的流量通过frp建立的连接转发到客户端,最后再由客户端把报文转发到公网
实现工具介绍
所需工具均可以在网上找到
- frp
通过frpc主动向frps发起请求建立连接,其中.toml文件分别是各自的配置文件
图片1 - 某ray软件N-core
这算是某ray软件的一种图像化客户端,主要关注某ray软件N.exe,后面是图形化的配置
图片2 - 某ray软件
这是某ray软件的服务端,从客户端转发过来的流量最终通过服务端转发到公网,其中某ray软件.exe是客户端主程序,config.json是配置文件
图片3
大致流程分析
- 内网服务器开启frps,开始监听
- 客户端开启frpc,主动向内网服务器的监听口发起请求,并建立连接
- 内网服务器开启某ray软件的客户端,通过配置代理,将本机的流量代理,并通过frp建立的连接,将报文转发到客户端
- 客户端的某ray软件服务器将收到的报文进行转发,最后实现内网服务器上网的需求
配置流程
frp的配置
- 内网服务器的配置
在内网服务器配置frps.toml,使用默认的7000端口即可,注意防止端口冲突
bindPort:是指frp服务端开启的端口,frp客户端向这个端口发起请求建立连接
图片4
命令行进入frp所在文件夹,并执行:frps.exe -c frps.toml(-c的意思是指定用frps.toml的配置文件)
服务器端开始监听
图片5 - 客户端的配置
在客户端配置frpc.toml,具体配置如下:
serverAddr:配置内网服务器的地址,即服务端的地址
serverPort:服务器端设置的绑定端口,向这个端口发起请求建立连接,默认配置的7000端口
name:随意写
type:流量类型,我们主要使用http等tcp业务,这里配置tcp即可
localIP:客户端的监听IP,一般就是127.0.0.1
localport:客户端的监听端口,后面某ray软件监听的流量会转发到这个端口
remoteport:服务端会开放的端口,之后会利用这个端口将流量转发到localIP的localport
图片6
命令行进入frp所在文件夹,并执行:frpc.exe -c frpc.toml,客户端将主动发起请求建立与服务器的连接
图片7
此时frp的连接隧道已经建立,后续将通过该连接转发报文
某ray软件配置
-
内网服务器的配置
内网服务器配置某ray软件客户端,双击某ray软件.exe,即可打开图形化客户端;左上角服务器创建vmess,地址选127.0.0.1,端口就是前面frp开启监听的本地接口,生成一个用户ID,其他的默认即可
图片8
之后导出配置,后面给服务器端使用,命名为config即可(默认是config.json)
图片9
内网服务器的右下角可以选择代理的范围,这里点击全局,正常web的流量均会进行代理,并且开启系统代理的自动配置系统代理即可
图片10
图片11 -
客户端配置
客户端配置某ray软件的服务端,将上一步在内网服务器的某ray软件客户端生成的配置替换客户端PC的config.json配置
图片12
进入某ray软件所在命令行,使用:某ray软件.exe run 启用即可
图片13
至此,配置已完成
效果验证
在浏览器中访问百度,可以成功访问
图片14
注意事项
- 需保证某ray软件的客户端和服务端所在的设备时间一致,否则代理会有问题,原因是某ray软件有确认时间的机制,在某ray软件官网有详细介绍
图片15