FRP 可用于内网穿透的高性能的反向代理应用

由于现阶段IPv4地址的缺乏导致我们不能为每一台机器配上公网IP地址,我们与机器处于同一局域网下时可以很方便的远程,当我们更换网络环境时由于机器配的是私有IP地址导致我们无法正常远程机器,此时需要内网穿透来解决我们的问题,frp是目前我知道一个比较方便的内网穿透工具。

Frp(Link)是发布在Github上的一个项目,使用简单并且有中文文档,使用frp首先需要有一台在公网上的机器作为跳板,如果使用frp来访问内网的web服务则需要一个域名并将域名的A记录解析到对应公网机器的IP上,frp的具体工作模式如下图所示:《FRP  可用于内网穿透的高性能的反向代理应用》

首先需要从frp项目的发布页面(Link)下载适合自己使用的版本,我的个人需求是远程处于公司或家里的Linux系统机器,Windows有很多远程工具例如Teamview故不在考虑范围之内,一般Linux系统运行在x86_64架构的机器上所以只需要下载frp_0.13.0_linux_amd64.tar.gz并解压即可(公网机器和内网机器均需要下载)。

使用SSH访问内网机器:

首先在公网机器上进入解压后的frp目录,使用命令vim frps.ini编辑服务端配置文件,内容如下:

[common]
bind_port = 7000                              #服务端需要打开的端口
dashboard_port = 7500                         #控制面板所使用的端口
dashboard_user = xxxxxx                       #控制面板用户名
dashboard_pwd = xxxxxxxxxx                    #控制面板密码

此处打开了frp自带的dashboard,使用控制面板可以很清楚的查看在线或掉线的客户端,如果不需要控制面板只需保留前两行配置即可。保存退出后使用命令./frps -c ./frps.ini启动frp服务(一般会配合screen命令使frp一直运行在后台),服务端配置完成。

然后在处于内网环境的机器上进入解压后的frp目录,使用命令vim frpc.ini编辑客户端配置文件,内容如下:

[common]
server_addr = xxx.xxx.xxx.xxx                 #服务端的公网IP地址
server_port = 7000                            #服务端打开的端口

[ssh]                                         #客户端ssh名称,此名称在不同客户端下不能重名
type = tcp                                    #由于使用SSH访问内网机器此处填写tcp
local_ip = 127.0.0.1                          #本地IP,一般不会变
local_port = 22                               #客户端ssh端口,内网环境一般22不变,如有变化根据实际情况填写
remote_port = 6000                            #本地frp端口,用户服务端访问

保存退出后使用命令./frpc -c ./frpc.ini启动frp服务(一般会配合screen命令使frp一直运行在后台),服务端配置完成。

此时通过浏览器访问服务端IP:7500会提示输入用户名和密码,输入成功后浏览器web页面上点击Proxies > TCP即可出现如下页面,并显示客户端已经online(Name与Port根据客户端配置不同会有不同显示):

《FRP  可用于内网穿透的高性能的反向代理应用》

客户端上线后在服务端使用命令ssh -oPort=6000 [email protected]来远程客户端(此处用户名根据实际情况填写),提示输入密码时输入客户端用户名对应的密码即可,具体操作页面如下显示:

[[email protected] ~]# ssh -oPort=6000 [email protected]
[email protected]'s password: 
Last login: Sat Sep 23 15:24:15 2017 from localhost
[[email protected] ~]#

最后一行可以发现已经成功远程到客户端上,至此SSH访问内网机器完成。

访问部署于内网的web服务:

Frp不仅可以用户SSH内网穿透,也可用户访问内网的web服务,在原有服务端的配置 上加上http的端口配置即可,具体配置如下:

[common]
bind_port = 7000                              #服务端需要打开的端口
dashboard_port = 7500                         #控制面板所使用的端口
dashboard_user = xxxxxx                       #控制面板用户名
dashboard_pwd = xxxxxxxxxx                    #控制面板密码
#以下一行为新添加配置
vhost_http_port = 8080                        #用于访问内网web服务的端口

保存退出后使用命令./frps -c ./frps.ini启动frp服务(一般会配合screen命令使frp一直运行在后台),服务端配置完成。

在需要访问的内网web服务器上解压进入到frp目录,使用命令vim frpc.ini编辑客户端配置文件,内容如下:

[common]
server_addr = xxx.xxx.xxx.xxx                 #服务端的公网IP地址
server_port = 7000                            #服务端打开的端口

[openstack]                                   #内网web命名名称
type = http                                   #访问内网web此处改为http
local_port = 80                               #本地web访问端口
custom_domains = xxxx.xxxxx.xxxxxx            #服务端ip对应的域名

保存退出后使用命令./frpc -c ./frpc.ini启动frp服务(一般会配合screen命令使frp一直运行在后台),服务端配置完成。

此时通过浏览器访问服务端IP:7500会提示输入用户名和密码,输入成功后浏览器web页面上点击Proxies > HTTP即可出现如下页面,并显示客户端已经online(Name与Port根据客户端配置不同会有不同显示):

《FRP  可用于内网穿透的高性能的反向代理应用》

显示内网web客户端上线后访问服务端IP对应的域名(xxxx.xxxxx.xxxxxx:8080)即可访问位于内网的web服务,至此frp访问内网web服务完成。

更多新功能以后再介绍。

点赞
  1. Dong说道:

    学习了,不过配置有点晕,
    在网上找到了一个开源的Holer配置一个Access key就可以外网访问了
    https://github.com/Wisdom-Projects/holer

    1. admin说道:

      也是刚开始写这些东西,项目在gitgub有配置说明的,写的肯定比我好!!!

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注