title: 十分钟快速搭建frp的ssh和http的内网穿透
date: 2017-11-19 17:52:58
tags:

内网穿透
frp
category: 网络
frp简介

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https 协议。frp目前最新版本为0.13.0,frp目前仍然处于前期开发阶段,未经充分测试与验证,不推荐用于生产环境。

其实关于frp的使用官方文档已经说明得很详细了,本篇文章是对于frp的一个快速搭建,更详细的内容还请参考官方文档

环境准备

在开始之前我们需要准备的东西有一台需要做内网穿透的内网服务器(后文称为客户端),一台可以访问外网的服务器(后文称为服务端)(阿里云等)以及一个已经备案的域名(仅做ssh内网穿透不需要)。

安装

上述所需的服务器以及域名都已经准备好之后便可以开始进行frp的配置,首先我们需要在frp的release页面下载frp已经打包好的发布版。点击这里可以直接下载0.13.0的linux版本

外网服务器SSH环境配置

首先将frp的安装包上传到外网服务器,linux建议放到/usr/local/frps目录下,使用tar命令解压frp安装包

tar -zxvf frp_0.13.0_linux_amd64.tar.gz
接着进入frp的解压目录下

cd /usr/local/frps/frp_0.13.0_linux_amd64
进入目录中可以看到 frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE 这七个文件
frpc:客户端可执行程序
frpc_full.ini:客户端所有配置项(可以再此文件查看frp的所有的配置项)
frpc.ini:客户端配置项
frps:服务端可执行程序
frps_full.ini:服务端所有配置项(可以再此文件查看frp的所有的配置项)
frps.ini:服务端配置项
LICENSE:许可证
在服务端我们不需要客户端的可执行程序和配置,为了避免误操作,我们可以先删除掉所有客户端的配置

rm -rf frpc frpc_full.ini frpc.ini
接下来可以对服务端配置进行修改。

vi frps.ini
可以看到服务端的默认配置如下:

[common]
bind_port = 7000
默认的配置信息中只有一个绑定端口为7000,意思是我们在外网服务器中绑定7000端口和客户端进行通信。注:端口可以自定义,但是需要客户端和服务端进行统一。阿里云服务器需要在esc管理中配置安全组规则中添加7000端口

接着在服务端使用如下命令启动程序

./frps -c frps.ini
这行命令的意思是根据frps.ini这个配置文件去启动frps

看到外网服务器打印出如下信息,表示启动成功

但是这样退出启动控制台程序便中断了。于是我们通常选择后台启动。在linux中使用如下命令进行后台启动。然后运行的日志会输出到当前目录的nohup.log文件中

nohup ./frps -c frps.ini &
以上是外网服务器最基本的一个配置。十分简单

内网服务器SSH环境配置

内网服务器与外网服务器一样,首先将安装包上传到内网服务器的/usr/local/frpc目录下,然后删除掉我们不需要的服务端文件

rm -rf frps frps_full.ini frps.ini
接着修改我们的客户端配置文件frpc.ini

vi frpc.ini
可以看到客户端默认配置如下:

[common]
server_addr = 120.79.17.158
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[common]表示以下配置信息是一些公用配置信息
server_addr是我们服务端即外网服务器的公网访问ip
server_port是我们前面在服务端配置的frps.ini中bind_port中对应的端口。需保持两边一致
[ssh]表示以下配置信息是我们使用ssh连接内网服务器时需要的一些配置信息
type 是连接类型,ssh方式连接就用tcp
local_ip 是本机ip,直接使用127.0.0.1即可
local_port 是本地ssh端口,ssh默认端口为22
remote_port 是外网服务器请求过来的端口 注:阿里云服务器需要在esc管理中配置安全组规则中添加6000端口
了解了如上配置后,我们对配置进行相应的修改。修改为对应的信息后,既可以使用如下命令启动客户端程序

./.frpc -c frpc.ini
这行命令的意思是根据frpc.ini这个配置文件去启动frpc

看到内网服务器打印出如下信息表示启动成功:

启动成功后可以直接通过外网服务器ip加上内网服务器配置的remote_port进行ssh连接
如:

ssh 120.79.17.158 -p 6000
就可以发现我们可以直接通过公网ip登录内网服务器了

外网服务器HTTP配置

通常我们在开发的时候想让别人通过外网可以直接访问到我们的系统,以便于调试和测试,我是在做微信开发的时候需要使用到内网穿透的http服务,于是我们需要在frp中添加http服务的内网穿透配置
在外网服务器的frps.ini中添加http服务配置如下:

[common]
bind_port = 7000
vhost_http_port = 6001

bind_port和之前做ssh时是一个意思。也是为了和客户端建立通信的端口,只需要在之前的配置文件中添加上vhost_http_port = 6001,这个配置意思是让别人在访问我们的服务器6001端口时。frp将http请求转发到内网服务器
服务端的http请求配置到这里就结束了

内网服务器HTTP配置

内网服务器需要在frpc.ini中添加上如下内容:

[web]
type = http
local_port = 80
custom_domains = wannabe.fun

[web]表示我们的配置是一个web服务
type表示我们的请求方式是http方式
local_port表示我们的本地服务端口号为80
custom_domains表示配置为一个已经备案的域名(必填,并且需要域名可用,开始我认为这个不是必须的,于是花了很长时间,),并且域名解析配置为外网服务器ip
以上配置完成后,我们就可以使用wannabe.fun:6001访问到我们部署在内网服务器的80端口的服务了。