frp 内网穿透实践

in 工作记录 with 0 comment

通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网。

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

https://github.com/fatedier/frp
https://gofrp.org/docs/setup/

为什么使用 frp?

在开发支付相关业务的时候,因为付款后必须有公网的回调地址。
所以完整流程的测试必须在拥有公网IP的服务器上测试...

开发微信公众号网页时,微信认证的授权回调必须有公网地址。
所以完整流程的测试必须在拥有公网IP的服务器上测试...

提供给第三方接口时,需要部署在拥有公网IP的服务器上测试...

重复着上传代码、重启、报错、修改,上传、重启、报错这个无限循环。

说实话,我蛮习惯这个步骤的,测试环境我也从来不打包,都是零散的class文件
替换还是很快的。

反正Java的热编译难用的要死。

唯一的不足就是羸弱的云服务器拖拖拉拉的启动往往要好几十秒,往往盯着Log,看着启动日志一行行冒出来发呆。

终于在一次次重复操作中,我厌烦了,懒惰占领了高地,抽点时间来找找更方便的方式吧!

用frp实现公网访问内网服务

下载frp软件

https://gofrp.org/docs/

frps

部署在公网服务器上的frp server端

部署&测试

我用的frp_0.38.0_linux_amd64版本
编辑frps.ini配置文件
image.png
服务端这里主要在配置文件中增加:

bind_port 服务的端口号
为了方便使用,最好也配置上Dashboard,frp提供了web端的控制访问
dashboard_port web端的访问端口号
dashboard_user 配置一个用户名
dashboard_pwd 配置一个密码

服务器放行所需要的端口

测试启动

./frps -c frps.ini

访问服务器dashboard_port端口号,登录
image.png

后台启动(启动后关闭shh)

nohup ./frpc -c ./frpc.ini >> ./frpc.log 2>&1

frpc

部署在内网服务器上的frp client端

TCP穿透

image.png

[common] 中配置服务端的地址端口

[这里是内网服务的名字自定义]
type = tcp
local_ip 内网服务的ip
local_port 内网服务的端口
remote_port 服务端暴露出的端口

测试启动

./frpc -c frpc.ini
查看服务端的Dashboard中是否上线 (看日志也行)
image.png

后台启动

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

域名配置?

这里我直接用Nginx反向代理了,frp也提供了域名配置功能,但是我想都走80和443端口,很多服务都之前依赖的Nginx..

配置开机自启动

客户端的机器经常需要重启啊之类的,这里主要思路是加个开机执行的脚本就好,但是查阅到别人的脚本都是有点问题的,又自己折腾了一番。

我是CentOS7环境!

  1. cd /etc/rc.d/init.d
  2. cd vim frps.sh
#!/bin/bash
# chkconfig: 2345 10 90
# description: frpc

rm -rf  /root/frp/frpc.log

/root/frp/frpc -c /root/frp/frpc.ini >> /root/frp/frpc.log 2>&1

这个脚本我执行的时候有点问题,frpc启动的时候网络连接失败,所以命令就执行失败了。
(我猜可能是网络还没启动的原因,这个脚本执行太早,本地网络环境比较复杂。)

于是我加了两行

#!/bin/bash
# chkconfig: 2345 10 90
# description: frpc
function waitPort() {
    while ! nc -vz $1 $2; do
        sleep 2
    done
}

waitPort www.baidu.com 80

rm -rf  /root/frp/frpc.log

/root/frp/frpc -c /root/frp/frpc.ini >> /root/frp/frpc.log 2>&1

先用nc去看百度是否是通的,通了再执行...

netcat 安装 yum -y install netcat

补充:
sh设置执行权限

chmod +x frpc.sh

添加脚本到开机自动启动项目中

chkconfig --add frpc.sh
chkconfig frpc.sh on