巧用Frp实现不同局域网的PC机之间互通,助力远程办公!

编程

问题分析

当通信双方都处于同一个局域网内,双方电脑可以互ping的时候,我们可以直接通讯,但是如果处于不同局域网之间,那么直接通讯是受到影响的,特别是双方的宽带运营商还是不同运营商的时候(哪怕是同一个都没办法啊),想要直接通讯简直就是没辙啊。当开发RPC应用时,特别是双方都有自己的服务时,想要做一个对接测试怎么办?网络不同怎么测?或许有的童鞋会说,不是可以连接到服务器吗?大家都放在服务器上面测不就完事了!对于这个答案我不认为是错误的,但是我认为是比较麻烦的,因为我们的程序可能面临调试,面临随时修改代码,在服务器上调试是非常麻烦的(哪有IDEA好用啊!),修改一行代码都需要重新编译,上传,运行……这个工作量太大了,不知道各位看官是否能接收得了,反正我接收不了。处于这样的原因,我们需要寻求一个解决的办法!

VPN的局限性

对于VPN的使用,估计大多数看官应该都不陌生,但是在我的理解(我司用的VPN)是没有分配得到ip的,也就是说(我估计而已),通过VPN连接到VPN Server之后,VPN Server保存着你这个电脑的socket,由于TCP是全双工的,当你的电脑发出请求时,VPN帮你请求,再然后把请求回来的数据转发回去给你的电脑。换而言之,你的电脑其实并没有直接跟服务器进行通信。

基于这种思路,那么VPN服务器和本地电脑之间只是通过套接字进行通信(全双工),而不是通过主动发起请求的形式和本地电脑进行通信,因为本地主机相对VPN服务器来说是没有一个可见的ip地址的,那么基于VPN的改造能否实现两台不同局域网的电脑之间进行"全双工"通信呢?理论上来说是没问题的,无非是将数据包进行一个中转,但是所使用的VPN软件是否支持这样的配置就有待商榷了(起码我知道我司的不OK),鉴于这种情况下,我们就不要在VPN这个层面上折腾了,没啥意义。

frp内网穿透

针对VPN的局限性,让我想到能不能使用内网穿透进行通信呢?我之前也写过博客介绍内网穿透相关原理和技术,在这里不展开,想了解得童鞋可以点开我的个人主页找到之前的博客进行了解下。言归正传,在VPN的基础上,我们再内网的一台服务器搭建frp隧道是否可行呢?根据以上的分析,我们从单方面进行讨论,当一台电脑与中转服务器连接时,会得到一条链路。这条链路是全双工的,当外界请求发往中转服务器某个端口时,可以指定将这个端口接收到的数据包从这条链路返回(也可能不是这样,我个人理解),然后再将这个数据包转发至这台电脑指定的应用端口,例如tomcat的8080(如果看文字觉得有点绕,可以看图!)。

注:图中中转服务器对外暴露的端口收到数据包之后,到底是直接从内网穿透的链路将数据回写给客户端还是转发给frps服务端端口,由这个端口收到数据之后再从内网穿透的链路回写给客户端未曾考证,以免误人子弟,特此说明,如有了解得童鞋也可以评论告诉我 。

上面已经说完单方面的情况(单台电脑的情况),那么如果是两台不同局域网的电脑需要通信,其实就是如法炮制另一方面(另外一台需要通信的电脑也可以这样做明白不)则可以做到一个伪局域网的效果。

具体实现和配置

上面介绍了那么多原(fei)理(hua),是时候说点实(gan)现(huo)了,具体请往下看。

  1. 先在内网寻找一台服务器,充当代理转发的中转服务器。具体是什么系统没有过多的要求(为了方便连接,可以先把防火墙关闭)。

  2. 在这台代理转发的服务器上安装frp,并启动frps。如果没有frp软件的可以到frp下载进行下载。下载跟自己操作系统对应的版本,此外,客户端和服务器版本需要对应。

  3. 配置

中转服务器配置,编辑frps.ini

[common] 

bind_port = 7000

以上配置其实就是默认的配置

启动服务端

nohup ./frps -c ./fprs.ini > ./frps.log 2>&1 &

客户端配置,编辑frpc.ini

[common]

# 转发服务器IP

server_addr = 192.168.3.122

server_port = 7000

# 下面这个[tcp],名字可以随便起,但是不同的客户端连接同一个服务端时,不能重复

[tcp]

type = tcp

local_ip = 127.0.0.1

# 本地应用的端口,收到数据后会转发到这个端口

local_port = 8080

# 中转服务器暴露给外面访问的端口

remote_port = 8888

在这里我们通常用的是Windows系统的PC,下面以Windows举例,在控制台进入frp解压目录之后,运行以下命令。

frpc.exe -c frpc.ini

执行命令之后,出现以下日志则表示成功了

  1. 到这里,就可以通过访问中转服务器的ip:暴露的端口(上面配置应该是192.168.3.122:8888)就可以将请求转到本地的PC机监听的8080端口应用进行处理了。

补充说明

  • 上面大多数举例是只单方面的连接,两台或多台不同局域网的机器之间通信的配置都是一样的,只是各个机器在中转服务器暴露出的端口不能一样,必须唯一。
  • 上面说到的内网服务器,换成阿里云的VPS是否可以?可以的,这个时候配置的server_addr就是一个公网ip,我这里配置内网的服务器主要是因为我的应用需要连接数据库等在内网的机器,必须连接VPN,刚好公司内网又有可以使用的服务器,所以就不配置阿里云的机器了。
  • 水平有限,如有地方说得不对请各位看官不吝赐教!

以上是 巧用Frp实现不同局域网的PC机之间互通,助力远程办公! 的全部内容, 来源链接: utcz.com/z/513375.html

回到顶部