[内网穿透] 使用Frp在Linux上实现内网穿透

[内网穿透] 使用Frp在Linux上实现内网穿透

介绍

近期在开发的过程中有一台服务器还没来得及托管到数据中心,暂时放在工作室,但工作室没有公网IP,正好我有一台闲置的云服务器,故使用frp进行内网穿透,以便外网能够连接ssh以及实现网页的访问。

Frp 是一款开源的软件,能够轻松实现内网穿透,方便服务器上架前远程的调试。

本文重点在于搭建frp内网穿透服务器,具体内网穿透原理在这里不多赘述,大家自行查阅资料。

使用前准备

1.一台处于内网的主机

2.一台公网Linux服务器

3.Frp

详细步骤

Frp的配置包含客户端和服务端

服务端 (有公网ip的服务器)

1.从GitHub上下载Frp

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

2.解压Frp

tar -zxvf frp_0.13.0_linux_amd64.tar.gz

3.切换到Frp所在目录

cd frp_0.13.0_linux_amd64

4.观察目录结构

ls

从目录结构我们可以看出 目录中包含了几个ini文件,其中我们要用到的是客户端的ini文件,顾名思义就是frps.ini,c即server。

5.编辑配置文件

1
2
3
[common]
bind_port = 7000
vhost_http_port = 2333

bind_port就是客户端与服务器通讯的端口,随便定义一个自己喜欢的端口,一定要开放的,空闲的。默认是7000。
vhost_http_port就是与自己内网服务器http请求连接的端口。

6.运行frp服务端

这一步会在下文客户端配置完成时细讲。

客户端 (没有公网的服务器)

1.从GitHub上下载Frp

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

2.解压Frp

tar -zxvf frp_0.13.0_linux_amd64.tar.gz

3.切换到Frp所在目录

cd frp_0.13.0_linux_amd64

4.观察目录结构

ls

从目录结构我们可以看出 目录中包含了几个ini文件,其中我们要用到的是客户端的ini文件,顾名思义就是frpc.ini,c即client。
下面让我们编辑它

5.编辑配置文件

配置文件如下:

1
2
3
[common]
server_addr = xx.xx.xx.xx
server_port = 7000

7000端口是frp客户端与服务端通讯的端口,必须与服务端上的端口相同,这是后面所有通讯的基础,所以必须配置正确。

接下来,我们来配置web访问。刚才我们已经在远程服务器上开放了2333端口,用于web的访问。现在我们对客户端进行配置。

客户端配置如下:(直接继续往下写)

1
2
3
4
[web]
type = http
local_port = 80
custom_domains = www.yeliheng.com

type字段我们设置为http协议,local_port就是本地端口的意思,我这边本地是80端口。如果我们需要通过域名进行访问我们就绑定域名,将custom_domains填入,这边我的域名是www.yeliheng.com

到此,我们客户端与服务端的配置文件全部编辑完成。只差一步即可完成内网穿透。

6.运行frp

frp有几个参数,这边我们用到的只是-c参数。具体的参数可前往GitHub查看详细手册。

首先,我们需要先把服务端跑起来,先运行服务端的原因在于服务端运行后会等待客户端连接,防止客户端连接服务器失败自动退出。

cd到frp的安装目录下,然后执行如下指令:

./frps -c frps.ini &

运行后一般不会返回任何提示,具体的信息请直接查看日志。(frps.log)

在末尾加一个&表示后台运行。

接下来启动frp客户端

在客户端输入:

./frpc -c frpc.ini &

这时 客户端与服务端将建立连接,内网穿透全部完成。

我们现在可以通过外网访问内网资源了。

浏览器输入域名:2333即可访问刚才配置的web

Tips

若要实现frp稳定处于后台运行并且跟随服务器开机自启,有多种解决方案。经过测试,我极力推荐使用pm2作为解决方案。十分稳定并且相当于守护进程,进程崩溃则自动重启进程。pm2的用法请见我的下一篇blog。