网络工具-内网穿透frp

Posted by 周思进 on June 27, 2021

之前文章4G网络下可以DDNS么?有讲到无法通过 DDNS 服务来访问 4G 设备的情况,那有其他办法来访问么?

内网穿透工具可以解决这个问题。

再说具体的工具之前,先简单说明下正向代理和反向代理的概念。


正向代理

正向代理是客户端明确知道代理端的存在,客户端想访问服务器,并不是直接发请求到服务器端,而是将数据包请求发送到正向代理服务器,由代理服务器转发到目标服务器。

这样做的好处有:
1、缓存
如下图所示,当有多个客户端访问同一服务器资源,只要有其中一个客户端访问过了,代理服务器就可以缓存下来,这样其他客户端也要访问相同资源的时候,代理服务器就可以直接返回,而不需要再发送请求到目标服务器。节省带宽的同时加速了客户获取资源的速度,这应该也是代理最早的需求点。

image

2、访问无法访问的网站,如 google 网站
这应该是最能感受到正向代理存在的例子了吧,都需要在手机上或者 PC 上装个软件才行

3、记录用户访问记录,公司网络限制等等。


反向代理

而随着网站的客流量越来越大,一台服务器明显处理不过来的情况下,就需要多台服务器来提供服务,这个时候就需要用到反向代理服务器了,客户认为的目标服务器实际是反向代理服务器,由反向代理服务器根据负载均衡再转发到后台的服务器上,这个过程中,客户其实是感知不到的,是完全透明的,如下图所示

image

反向代理除了负载均衡,也同样会进行缓存,还能过滤问题请求,保证后台服务器的安全等等。


工具选择

简单介绍了下正向代理和反向代理,那么对于前面 4G 设备想要访问的情况,是需要用到哪种代理呢?只能是反向代理,因为如果是正向代理,正向代理服务器仍旧是存在无法访问 4G 设备的问题。

我们所说的内网穿透工具也就是用于反向代理的工具。

内网穿透的工具种类很多,常用的有 ngrok、netapp、frp、nps,这类都是基于 go 语言开发,ngrok 使用的是国外服务器,netapp 是国内基于 ngrok 进行的二次开发,不过跟花生壳一样都需要注册账户,存在免费和收费版本。

还有 smarGate 等不少网上可搜索到的内网穿透工具,但感觉都没有 frp 这样不需要注册,配置也及其简单方便。


配置

frp 工具下载地址:
https://github.com/fatedier/frp/releases

直接下载可执行文件即可,如果对于下载哪个犯愁,可以看看之前写的Linux命令-uname一文。

FRP 的配置文件也简单明了,如服务器端配置如下(这里的服务器指公网可访问的一台服务器):

# frps.ini
[common]
bind_port = "输入想要绑定的服务端口"
token = 12345678 # 强烈建议设置,当然该值自己随意设置,这样客户端接入需要同样传递相同的 token 值才能访问

启动服务端程序

./frps -c ./frps.ini


客户端配置如下(此文场景则是4G设备了):

# frpc.ini
[common]
server_addr = "服务器IP地址"
server_port = "上面配置中绑定的服务端口"
token = 12345678 #得跟服务器对上

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

启动客户端程序

./frpc -c ./frpc.ini


实现原理

以上面配置为例,服务器端会开放 6000 端口,用于 SSH 连接该服务器的 6000 端口就像直接访问 4G 设备的 22 端口一样了。

在设备启动 frpc 客户端的时候,会启用一个临时端口与服务器的 6000 端口建立连接,后面服务器在 6000 端口接收到数据时,就会通过该已建立的连接将请求数据转发到设备上,FRP 客户端则会将接收数据内部转发到 127.0.0.1 绑定 IP 的 22 端口上。