FRP 内网穿透

需求背景

最近小王公司接个对接公众账号应用开发的项目,其中有个功能需求是”用户关注公众账号后发送特定消息后公众账号需要回复一个二维码海报“。了解需求后,便查看了微信接口文档说明,公众账号需要配置一个回调地址做通知。经验丰富的小王,一看很简单嘛,便分分钟对接微信文档实现了功能,部署时需要把程序开发好的服务部署到公司的公网测试服务器上进行调试,一来一回半天时间没有了!咋办呢? 为了节约小时,有什么方法能让回调地址直接到通知到自己的电脑上进行调试呢。百度了下,原来方法挺多,什么natapp啊,花生壳啊,frp ,对比下,netapp,花生壳高级点的功能都要收费, frp 需要自己配置,但是需要一台公网服务器穿透,正好公司有一台闲置的服务器,于是便搭建了内网穿透进行调试,很快项目顺利完成验收上线。

拓扑图

FTP 需要公网服务器上转一个服务端应用,在需要穿透的内网机器需要安装一个客户端程序,完成配置启动应用后,即可进行外网访问,十分方便,搭建过程10分钟内就能搞定。

介绍

GitHub 地址:https://github.com/fatedier/frp

通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

•客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。•采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。•代理组间的负载均衡。•端口复用,多个服务通过同一个服务端端口暴露。•多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。•高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。•服务端和客户端 UI 页面。

服务端安装

•下载安装

# 进入服务器进入进行wget 下载 cd /usr/local wget https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_arm64.tar.gz # 解压 tar -zxvf frp_0.24.1_linux_amd64.tar.gz #进入目录删除客户端配置 cd frp_0.24.1_linux_amd64/ rm -f frpc rm -f frpc.ini

配置服务器配置文件 frps.ini

[common] #服务器监听端口 bind_port = 7000 #对网穿透http端口 vhost_http_port =80 #管理页面防访问端口 dashboard_port = 7500 # dashboard's username and password are both optional,if not set, default is admin. dashboard_user = admin dashboard_pwd = 123456

启动

./frps -c ./frps.ini

访问看dashboard, dashboard 中可以看到连接穿透的客户端信息。

http://47.104.17.91:7500

客户端配置

同上服务器端下载安装包解压配置,删除frps.ini 文件,只配置客户端配置 frpc.ini

[common] #服务端地址 server_addr = 47.104.17.91 #服务端监听端口,对应服务器bind_port server_port = 7000 #应用名称 [my_web] # 协议 type = http #本地应用端口名称 local_port = 8888 #访问穿透域名 custom_domains = test.monkeytit.com

启动

./frpc -c ./frpc.ini

本地启动一个测试springboot 服务,端口8888 项目

解析域名到咱们的外网服务器 test.monkeytit.com

访问测试

http://test.monkeytit.com/callback

TCP 穿透例子

比如咱们在家想对公司一台内网服务器进行管理,可以配置一个远程穿透的SSH 服务。配置如下

[common] #服务端地址 server_addr = 47.104.17.91 #服务端监听端口,对应服务器bind_port server_port = 7000 [test_ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 222

这样配置,咱们就可以通过 ssh root@47.104.17.91[1] -p 222 进行连接内网服务器进行管理。

•特别注意: 如果使用的是阿里云或者腾讯云做穿透,需要把Server的bind_port、vhost_http_port、dashboard_port 端口,配置安全组入站规则中,否则可能访问不通

References

[1] root@47.104.17.91: mailto:root@47.104.17.91