linux下部署frp客户端服务端实践
简介:
今天有一个这样的需求,部署在公司内部局域网虚拟机上的服务需要在外网能够访问到,这不就是内网穿透的需求吗,之前通过路由器实现过,现在公司这块路由器不具备这个功能了,于是开始查找自己搭建的方案,找到目前市面上一些主流的内网穿透工具有:Ngrok,Natapp,花生壳,Ssh、autossh,Frp,Lanproxy,Spike。这里选用了Frp作为技术实现方案。
一、frp是什么?
如下是github官网介绍https://github.com/fatedier/frp/blob/dev/README_zh.md 。frp是一个专注于内网穿透的高性能的反向代理应用,支持TCP,UDP,HTTP,HTTPS等多种协议。可以将内网服务以安全、便捷的方式通过具有公网IP节点的中转暴露到公网。
那么多方案这里选用frp的主要原因是frp 是一个国内的免费且开源的项目。
二、需求
如图所示,这次的需求是需要把内部局域网部署的服务暴露到外网用户访问,这里使用了一台阿里云服务器来进行内网穿透服务器。
三、解决方案
frp需要部署服务端和客户端,这里需要清楚服务器是外网机器,客户端是需要内网服务机器。
3.1、frp下载和版本选择
1、frp官网
https://gofrp.org/docs/
下载frp:https://github.com/fatedier/frp (注意: 客户端和服务端版本要一致)
我这边服务器系统都是CentOS7 64位,于是选择了frp_0.38.0_linux_adm64.tar.gz
2、服务器上使用wget下载
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
3、解压
tar -xzvf frp_0.38.0_linux_amd64.tar.gz
4、frp压缩包文件说明
每个压缩包解压后都包含以下文件和一个systemd文件夹:
frpc —— 客户端可执行二进制文件
frpc_full.ini —— 包含全部配置项的客户端配置文件
frpc.ini —— 客户端使用的配置文件,包含最简配置
frps —— 服务端可执行二进制文件
frps_full.ini —— 包含全部配置项的服务端配置文件
frps.ini —— 服务端使用的配置文件,包含最简配置
systemd —— 文件夹,用于将frpc和frps添加为服务的配置,linux下使用systemd作为守护程序、mac os使用launchd作为守护程序
注:只需用到frp_0.38.0_linux_amd64目录下的frps相关文件
3.2、配置和启动
1、服务端(阿里云)
1.1、在服务器上打开frps.ini
vi frps.ini
注:确保当前已进入工作目录/root/frp_0.38.0_linux_amd64/
1.2、配置frps要监听的端口:按下i进入编辑模式,在末尾增加一行:vhost_http_port = 8087,使frps.ini最终配置如下:
注: vhost_http_port监听的端口不能被占用,否则会导致frps不能启动,端口可根据实际需要修改;bind_port端口为frp服务端和客户端连接通信的端口,默认为7000。
frps dashboard 通过浏览器查看 frp 的状态以及代理统计信息展示
1.3、启动frps程序
frp在后台运行:
nohup ./frps -c frps.ini & > frp.log
2、客户端(虚拟机)
2.1、在本机进入frp_0.38.0_linux_amd64目录,打开frpc.ini文件;
2.2、以配置访问内网的web服务(常见情形)为例,最终修改frpc.ini如下:
2.3、启动frpc程序:
nohup ./frpc -c ./frpc.ini & > frp.log
注:此时frpc会通过7000端口尝试与frps建立通信连接,看到如下日志这说明连接建立成功
服务端 7000端口, 和8087端口(根据自己端口变换) ,需要确保端口已经开放外部访问
总结:
到此第二节中的需求已经完成,这里只是使用了frp的http代理功能,frp还有其他的功能特性,感兴趣的可以到官网进行学习。