Frp服务实现内网穿透
编辑因为平时会需要部署一些服务在手机上,同时也需要公网访问手机搭建的服务,所以这里使用内网穿透的方式实现;当前市面上有名的花生壳内网穿透服务,还是不错的,即使是免费的也有不错的体验,付费的也很方便,没有什么障碍,适合新手和没有自己服务器的开发人员调用自己的服务
但是作为一个技术宅,还是有需要了解内网穿透自己搭建一下的,毕竟有自己的服务器还是需要利用起来,下面来使用frp来实现内网穿透
frp简介
frp
是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。
架构图
下载Release版本下载地址
将 frps 及 frps.ini 放到具有公网 IP 的机器上。
将 frpc 及 frpc.ini 放到处于内网环境的机器上。
注意:一定要下载和CPU架构一致的版本,不然会出先如下错误
环境搭建
我这里会使用最常用的场景,通过内网穿透访问本地或者本地同一局域网的服务
-
准备阶段:首先下载官方对应的包(服务器和客户端都是同一个),我的是阿里云服务器,我一直以为是arm64的没想到是amd64的以为之前出现了上述的问题,重新下载对应的包解决,
wget https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_freebsd_amd64.tar.gz
然后解压,进入解压目录 -
服务端配置,有时想要让其他人通过域名访问或者测试我们在本地搭建的 web 服务,但是由于本地机器没有公网 IP,无法将域名解析到本地的机器,通过 frp 就可以实现这一功能,以下示例为 http 服务,https 服务配置方法相同, vhost_http_port 替换为 vhost_https_port, type 设置为 https 即可。
[common]
#frp绑定服务,对应客户端的server_addr
bind_port = 7000
# 绑定http服务
vhost_http_port = 8080
这里如果
vhost_http_port
设置为80端口,那么客户端就不可以使用80 端口了,另外使用的端口需要在云服务器后台开启安全组,如果有防火墙也需要开启对应的端口
- 客户端配置:
[common]
server_addr = 这里配置远程服务器的IP或者域名
# 这里和远程服务器的端口对应一致
server_port = 7000
# 映射到和本机同一局域网下的主机,远程访问方式为 http://remote_addr,因为是80 端口所以可以不用带上端口
[aweme]
type = tcp
local_ip = 192.168.0.101
local_port = 8080
remote_port = 80
# 映射到本机,远程访问方式为 http://remote_addr:6666
[myserver2]
type = tcp
local_ip = 127.0.0.1
local_port = 8081
remote_port = 6666
参数解释:
-
server_addr
:云服务器地址 -
server_port
:和云服务器中frps.ini的bind_port值一致 -
[aweme]
:一个配置组名,可以随意配置字符串,只要和其他组名区分开就行 -
type
:tcp或者udp,映射web或者ssh端口都是tcp -
local_ip
:需要映射的内网主机ip,本机写127.0.0.1就可以 -
local_port
:需要映射的内网主机端口 -
remote_port
:使用云服务器哪个端口访问linux1 -
[myserver2]
:配置组名,每个配置组名必须不同 -
type
:同上 -
local_ip
:内网中linux2的IP -
local_port
:linux2上需要映射的端口,此处配置的是tcp的6666端口 -
remote_port
:使用云服务器哪个端口访问linux2,每个配置组中的remote_port不能相同
- 服务端与客户端的启动
服务端启动 ./frps -c ./frps.ini
客户端启动 ./frpc -c ./frpc.ini
后台运行,以服务端为例子 ./frps -c ./frps.ini &
关闭后台运行 ,以客户端为例子 :
misty@misty-PC:~/MyFile/frp_0.29.0_linux_amd64$ ps -ef |grep frpc
misty 29845 15833 0 17:18 pts/7 00:00:00 ./frpc -c ./frpc.ini
misty 29874 15833 0 17:18 pts/7 00:00:00 grep frpc
misty@misty-PC:~/MyFile/frp_0.29.0_linux_amd64$ kill -9 29845
环境搭建之官网域名绑定方式
- 客户端配置
[common]
server_addr = 47.56.205.132
server_port = 7000
[web]
# 类型为http
type = http
# 映射到局域网下的本机和端口
local_ip = 192.168.0.101
local_port = 8080
# 绑定到自定义域名
custom_domains = misty.cloud
- 服务端配置和上面一样
[common]
# frp绑定服务,对应客户端的server_addr
bind_port = 7000
# 绑定http服务,这里的配置影响映射服务的调用端口,因为是根据域名绑定的所以是 `域名+端口`的方式访问
vhost_http_port = 8080
-
启动服务器和客户端
./frpc -c ./frpc.ini
./frps -c ./frps.ini
-
将
misty.cloud
的域名 A 记录解析到IP x.x.x.x
,如果服务器已经有对应的域名,也可以将 CNAME 记录解析到服务器原先的域名。 -
通过浏览器访问 http://misty.cloud:8080 即可访问到处于内网机器上的 web 服务,端口为服务端
vhost_http_port
配置的端口。
实例测试
首先保证本地的 192.168.0.101:8080
可以正常调通,然后通过远程的80端口映射到本地8080端口测试调用,发现也是可以的;
扩展:frp映射不同局域网内的主机
可以 在云服务器端复制frps.ini
为frps_1.ini、frps_2.ini
,将其中bind_port值改为不同,分别启动即可,当然需要注意安全组和防火墙问题,相信你已经很熟练了
总结
官方说这个项目还在开发阶段,不推荐商业测试,但是作为开发人员,还是很有用的,也许会有小伙伴表示都有自己的服务器了,为什么还需要这么个东西呢?我觉得出于一下几点
- 服务器配置成本考虑
- 出于简单易用方便测试方面考虑,直接可以调用本地服务提供给调用方接口,还是很舒服的,可以节约开发阶段的时间,提高开发测试的效率,统一环境问题
- 为了多了解一点东西,可以装一波嘛...
- 性能方面,经过我的实测是高于花生壳的(免费版),哪怕我的服务器配置已经很低了
- 0
- 0
-
分享