资讯专栏INFORMATION COLUMN

使用frp搭建内网穿透

zzbo / 1154人阅读

摘要:内网穿透的应用场景对开发人员来说,一个典型的应用场景就是针对第三方授权通常是和支付回调的开发调试。通过将应用部署在本机,再利用内网穿透工具对外提供服务,这样就能,既节约服务器租用费用,又能提升服务器的硬件配置。

内网穿透的概念

内网穿透,即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透。——来自百度百科。

简单来说,就是让互联网(外网)的设备能访问局域网(内网)的设备提供的服务,这里的设备通常是电脑。

内网穿透的应用场景

对开发人员来说,一个典型的应用场景就是针对第三方授权(通常是oauth2.0)和支付回调的开发调试。通过内网穿透工具将第三方SDK的回调地址映射到本机开发环境,从而实现实时调式。

其次是节约部署成本(通常是公网服务器费用)。通过将应用部署在本机,再利用内网穿透工具对外提供服务,这样就能,既节约服务器租用费用,又能提升服务器的硬件配置。

本文适用于第一种情况,即低频率开发调式用。

内网穿透的搭建工具 1、ngrok

这是一个国外的穿透工具,1.0版本是开源的,目前2.0以上版本已经闭源,并且提供免费和收费的服务。

2、frp

这是一个国内的开源工具,目前最新版本为0.26.0,有比较详尽的中文文档,并且一直在维护更新。

由于frp一直开源,并且维护积极、更新频繁,再加上中文文档加持,本文最终选择了frp作为搭建工具。

注:frp自主搭建需要一个有公网ip的服务器,本文使用阿里云ECS。

frp下载和版本选择

官方github release地址,目前最新版本是0.26.0

版本选择说明:

frp_0.26.0_darwin_amd64.tar.gz —— 适用于Mac OS系统

frp_0.26.0_freebsd_386.tar.gz —— 适用于FreeBSD 32位系统

frp_0.26.0_freebsd_amd64.tar.gz —— 适用于FreeBSD 64位系统

frp_0.26.0_linux_386.tar.gz —— 适用于Linux 32位系统

frp_0.26.0_linux_amd64.tar.gz —— 适用于Linux 64位系统

frp_0.26.0_linux_arm.tar.gz —— 适用于Linux 32位嵌入式系统

frp_0.26.0_linux_arm64.tar.gz —— 适用于Linux 64位嵌入式系统

frp_0.26.0_linux_mips.tar.gz

frp_0.26.0_linux_mips64.tar.gz

frp_0.26.0_linux_mips64le.tar.gz

frp_0.26.0_linux_mipsle.tar.gz

frp_0.26.0_windows_386.zip —— 适用于Windows 32位系统

frp_0.26.0_windows_amd64.zip —— 适用于Windows 64位系统

本文服务器系统为CentOS7 64位,选择了frp_0.26.0_linux_adm64.tar.gz;本机系统为Mac OS X,于是选择了frp_0.26.0_darwin_amd64.tar.gz。

下载方式:

1、直接点击链接,使用浏览器下载到本机。利用ssh工具连接到阿里云ECS,再使用lrzsz工具的rz命令将frp_0.26.0_linux_amd64.tar.gz上传到服务器,而压缩包frp_0.26.0_darwin_amd64.tar.gz直接在本机解压。

注:ssh工具、lrzsz实用工具的安装和用法可自行搜索。

2、终端命令方式

2.1、服务器

使用wget下载

wget https://github.com/fatedier/frp/releases/download/v0.26.0/frp_0.26.0_linux_amd64.tar.gz

解压

tar -xzvf frp_0.26.0_linux_amd64.tar.gz

2.2、本机

使用curl下载

curl -O https://github.com/fatedier/frp/releases/download/v0.26.0/frp_0.26.0_darwin_amd64.tar.gz

解压

tar -xzvf frp_0.26.0_darwin_amd64.tar.gz
frp压缩包文件说明

每个压缩包解压后都包含以下文件和一个systemd文件夹:

frpc —— 客户端可执行二进制文件

frpc_full.ini —— 包含全部配置项的客户端配置文件

frpc.ini —— 客户端使用的配置文件,包含最简配置

frps —— 服务端可执行二进制文件

frps_full.ini —— 包含全部配置项的服务端配置文件

frps.ini —— 服务端使用的配置文件,包含最简配置

systemd —— 文件夹,用于将frpc和frps添加为服务的配置,linux下使用systemd作为守护程序、mac os使用launchd作为守护程序

注:服务端只需用到frp_0.26.0_linux_amd64目录下的frps相关文件,本机(客户端)只需用到frp_0.26.0_darwin_amd64目录下的frpc相关文件。

服务端配置和启动

1、在服务器上打开frps.ini:

vi frps.ini

注:确保当前已进入工作目录/root/frp_0.26.0_linux_amd64/。

2、配置frps要监听的端口:按下i进入编辑模式,在末尾增加一行:vhost_http_port = 8080,使frps.ini最终配置如下:

[common]
bind_port = 7000
vhost_http_port = 8080

注:vhost_http_port监听的端口不能被占用,否则会导致frps不能启动,端口可根据实际需要修改;bind_port端口为frp服务端和客户端连接通信的端口,默认为7000。

3、保存配置并退出:按下Esc,输入:wq。

4、启动frps程序:

./frps -c ./frps.ini

注:如遇permission denied错误,表明frps可能没有运行权限,则先赋权:

chmod 700 frps

然后再次执行启动命令。

客户端配置和启动

1、在本机进入frp_0.26.0_darwin_amd64目录,打开frpc.ini文件;

2、以配置访问内网的web服务(常见情形)为例,最终修改frpc.ini如下:

[common]
server_addr = x.x.x.x
server_port = 7000

[web]
type = http
local_ip = 127.0.0.1
local_port = 3000

注:x.x.x.x为运行frps的服务器公网ip,local_port为本机启动web服务对应的端口,请根据实际情况修改。

3、启动frpc程序:

sudo ./frpc -c ./frpc.ini

注:此时frpc会通过7000端口尝试与frps建立通信连接,如果一切顺利,则终端会提示连接成功;但实际情况却显示连接失败,因为还少了两个步骤:

一、需要登录阿里云控制台将7000端口加入阿里云ECS安全组的入站规则里面,同理还需将8080端口加入。具体操作参考:添加安全组规则;

二、将7000和8080加入服务器防火墙规则,具体操作参考:CentOS7使用firewalld打开关闭防火墙与端口。

当一切就绪,frpc启动并连接成功后,打开浏览器输入http://x.x.x.x:8080就能访问到本机http://127.0.0.1:3000的服务(当然本机web服务需要处于启动状态)。

至此,一个最简配置的基于frp的内网穿透便搭建完成,更多配置和用法,请参考官方文档:frp官方中文文档。

扩展:将服务端frps添加为service

通过上面在终端直接启动frps的方式,会占用终端,并且停止和重启等管理操作也不方便。

为了方便管理frps的启动、停止、重启和开机自启,我们需要将frps添加为系统service,通过systemd守护程序来管理。

在frp_0.26.0_linux_amd64目录里的systemd目录下,已经为我们准备好了添加service的模板:

frpc.service

frpc@.service

frps.service —— 服务端使用此模板

frps@.service

1、进入目录/root/frp_0.26.0_linux_amd64/systemd,编辑frps.service:

cd /root/frp_0.26.0_linux_amd64/systemd
vi frps.service

2、将user=nobody改为user=root,并保存;

注:root表示运行frps的用户。

3、其中服务运行配置项为:ExecStart=/usr/bin/frps -c /etc/frp/frps.ini,我们需要将二进制文件frps复制或移动到到/usr/bin目录,配置文件frps.ini复制或移动到/etc/frp目录,而/etc/frp目录不存在,需要手动创建一个。

3.1、复制frps到/usr/bin目录:

cp ~root/frp_0.26.0_linux_amd64/frps /usr/bin

3.2、创建frp目录,并复制frps.ini到/etc/frp目录:

cd /etc
mkdir frp
cp ~root/frp_0.26.0_linux_amd64/frps.ini /etc/frp

4、将frps.service移动到/etc/systemd/system目录:

mv ~root/frp_0.26.0_linux_amd64/systemd/frps.service /etc/systemd/system

5、完成以上步骤,我们就可以愉快使用systemctl管理frps了:

启动frps:

systemclt start frps

停止frps:

systemclt stop frps

重启frps:

systemctl restart frps

查看frps状态:

systemctl status frps

开机启动frps:

systemctl enable frps

同样地本机也可以通过这种方式将客户端程序frpc添加为service进行管理,不同的是Mac OS使用的是launchd而非systemd来管理,具体操作方法请自行搜索,但如果仅仅是作为开发调试的低频使用目的,仿佛没有必要将客户端添加到frpc,毕竟终端一条启动命令就可以搞定。更多实战经验分享请参考:我的个人博客

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/46252.html

相关文章

  • 使用frp搭建内网穿透

    摘要:内网穿透的应用场景对开发人员来说,一个典型的应用场景就是针对第三方授权通常是和支付回调的开发调试。通过将应用部署在本机,再利用内网穿透工具对外提供服务,这样就能,既节约服务器租用费用,又能提升服务器的硬件配置。 内网穿透的概念 内网穿透,即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透。——来自百度百科。 简单来说,就是让...

    xushaojieaaa 评论0 收藏0
  • 使用Frp内网穿透快速搭建Web应用实践

    一、背景 笔者最近折腾docker服务比较多,这几天想把在内网中的服务搬到公网当中,但docker对内存要求较高,而云服务高内存的服务器又比较贵,家里虽然有一台旧笔记本内存还可以,但是没有公网IP地址,视乎还是没有办法,就在纠结的时候想起FRP这个内网穿透软件,重新回顾了一下搭建方法,发现搭建步骤较为简单,为了以后有所参考,所以把搭建步骤详细记录了下来。 二、操作步骤 配置服务端 配置客户端 检...

    fengxiuping 评论0 收藏0
  • 使用Frp内网穿透快速搭建Web应用实践

    一、背景 笔者最近折腾docker服务比较多,这几天想把在内网中的服务搬到公网当中,但docker对内存要求较高,而云服务高内存的服务器又比较贵,家里虽然有一台旧笔记本内存还可以,但是没有公网IP地址,视乎还是没有办法,就在纠结的时候想起FRP这个内网穿透软件,重新回顾了一下搭建方法,发现搭建步骤较为简单,为了以后有所参考,所以把搭建步骤详细记录了下来。 二、操作步骤 配置服务端 配置客户端 检...

    dadong 评论0 收藏0
  • ngrok内网穿透服务器搭建及配置(附 frp 配置)

    摘要:作为一个内网穿透的小工具,有时可能会时常更改配置等,所以作为本地的一个开机启动的小服务即可。设置开机启动输入命令设置开机启动开启查看状态停止内网穿透配置相对于另一款国内大牛做的要显的更加轻量安全易配置些。 12月18日更新 添加 frp 配置 前言 内网穿透,无需多言,用处多多。首先强力推荐一款Sunny大大搭建的ngrok服务好用的不行,而且有免费选项,感觉平时够用了。那么,为什么自...

    李昌杰 评论0 收藏0
  • frp 和 nginx 搭建一个内网穿透服务器

    摘要:相关资料下载相关文档下载下载地址选择对应的版本进行下载如果是需要下载版本下载后我的服务端是客户端是服务端需要关注的文件是客户端需要关注的文件是或者是注意,如果运行的环境是就要运行版本的,也就是后缀的配置服务端配置文件服务端需要开启的端口与客 相关资料 frp下载 :https://github.com/fatedier/frp 相关文档: https://github.com/fa...

    Lemon_95 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<