内网穿透神器——frp


frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp、 udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。

如果你之前用过ngrok,一定不会对frp的功能陌生。ngrok 开源版好久没更新了,高级版需要花钱。

内网穿透

通俗的讲,我在本地启动了个http服务,只能在局域网访问,怎么能让局域网外的人瞧瞧呢?这就需要内网的服务摆脱限制,穿透到外网去,顾名思义了 “内网穿透”。

哲学三问之:有什么用

做过 微信开发 么,在验证 远程服务地址 的时候,需要频繁的修改,或者远程服务器不能随意修改,有固定的发布日期。

你可以在本地修改,通过内网穿透 映射到到一个远程服务地址, 微信链接到这个远程地址,其实链接的是本地开发环境。等全部功能开发完毕,统一部署到正式的远程服务器上,这方便的很啊。

通过自定义域名访问部署于内网的 web 服务

下载

服务器端

需要先买好一台vps,部署好环境,ip是 x.x.x.x,并在防火墙上开启5555、3000端口。服务器端运行的是 frp-s命令。

# frps.ini 文件
[common]
bind_port = 5555
vhost_http_port=3000 # 远程服务要映射的端口号

运行 frps -c ./frps.ini

本地服务

本地端运行的是 frp-c命令。

# frpc.ini 文件
[common]
server_addr = x.x.x.x
server_port = 5555

[web]
type = http
local_port = 3000 #本地服务3000端口
custom_domains = x.x.x.x 

运行 frpc -c ./frpc.ini

启动本地服务

确保启动frps,再启动frpc,最后在启动本地的http服务。
好比有个nodejs项目, 使用 npm start 启动服务。

过程

本地3000端口的服务,映射到了 x.x.x.x:3000
localhost:3000 => frpc => 5555端口 => frps => x.x.x.x:3000

访问端口可以不一样,本地8000端口的服务,映射到了 x.x.x.x:4000
localhost:8000 => frpc => 5555端口 => frps => x.x.x.x:4000

你也可以用不同的端口映射
localhost:8000 => frpc => 6666端口 => frps => x.x.x.x:4000

都可以通过配置文件进行修改

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=3kh51td0b3ggw


参考:

http://wjp2013.github.io/tool/frp/
https://github.com/fatedier/frp/blob/master/README_zh.md
https://blog.ilemonrain.com/linux/frp-for-proxyconnect.html
https://www.jianshu.com/p/057e3266f380
https://github.com/cnlh/nps