frp的使用

2019年6月30日 0 作者 筱枫

最近因为一些原因,在公司的内网搭建了web服务器,但有时需要从外网访问,此时就需要用到内网穿透工具

本来有考虑用ngrok,但最关键的就是其2.x版本不开源,1.x的版本据其readme

上所说,具有bug,所以考虑了一下,还是采用frp

用法很简单,完全照着官方教程来即可

首先在有固定公网ip的服务器上配置frps

# frps.ini
[common]
bind_port = 7000

接着在内网服务器上配置frpc

# frpc.ini
[common]
server_addr = x.x.x.x
server_port = 7000

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

这样就完成了,之后很简单的进行启用就可以进行通信

其实frp本身是带有一个http(s)的web服务器,但是我所使用的外网服务器是使用了80端口,所以需要配置nginx进行反向代理

proxy_pass http://127.0.0.1:6000

ok,这样就彻底完成了

由于内网服务器使用https,所以nginx反向代理时也使用https,这样一份ssl证书就需要配置两遍,否则无法访问。

以下是frp的端口之间关系图,之前误以为需要反向代理的端口是7000,导致怎么都没有代理成功,后来才知道是6000….

如图示,访问者通过端口6000访问frps,而frps则进行转发,将6000端口的数据直接通过7000端口转发至内网服务器frpc,内网服务器再转发web端,如此便完成一次请求,原理其实很简单,而且如果要求不高的话,也可以采用ssh的远程转发功能

ssh -R localhost:6000:localhost:80 用户名@服务器ip

上面这段是将远程服务器(即公网服务器)的2000端口通过ssh转发至本地的80端口来进行访问

当中转发所走的端口,就是ssh的22端口,这样也可以实现内网穿透,但并不适合长时间使用,主要是它的主要用途不在这里,所以,专业的事情,还是交给专业的来做吧~