前言

由于我的实验室主机处于校园网内网,所以我只有登录校园网才能进行 SSH 远程连接。如果我处在外网中,那我就与我的主机失去联系了。今天我无意中接触到了一个很好用的内网穿透工具——FRP,顿时来了兴趣,花了一段时间将其部署在我的阿里云主机以及实验室主机上。这样我在外网也可以顺利的使用 SSH 远程连接到我的实验室主机了。

准备

  • 一台具有公网 IP 的设备:我的阿里云主机
  • 一台处于内网中的设备:我的实验室主机

FRP 介绍

FRP 全名:Fast Reverse Proxy。FRP 是一个使用 Go 语言开发的高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务。FRP 支持 TCP、UDP、HTTP、HTTPS等协议类型,并且支持 Web 服务根据域名进行路由转发。

FRP 的作用

  • 利用处于内网或防火墙后的机器,对外网环境提供 HTTP 或 HTTPS 服务。
  • 对于 HTTP, HTTPS 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个 80 端口。
  • 利用处于内网或防火墙后的机器,对外网环境提供 TCP 和 UDP 服务,例如在家里通过 SSH 访问处于公司内网环境内的主机。

FRP 的安装

首先获得 FRP 的下载地址:https://github.com/fatedier/frp/releases

服务端安装

下载 FRP:

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

解压

tar --xzvf frp_0.29.0_linux_amd64.tar.gz

为了便于操作,更改文件夹名

mv frp_0.29.0_linux_amd64/ frp

修改配置

cd frp
vim frps.ini

内容如下

[common]
bind_port = 7000        # frp服务的端口
vhost_http_port = 8889  # frp的http服务的端口

启动服务

./frps -c frps.ini      # 前台直接启动,测试看日志方便

我们就成功启动一个监听在 7000 端口的 FRP 服务端。
另外我们也可以在后台启动:

nohup ./frps -c ./frps.ini &

另外如果和我一样使用阿里云主机的话,还需要在安全组配置中打开端口。

客户端安装

和在服务端安装类似

wget https://github.com/fatedier/frp/releases/download/v0.29.0/frp_0.29.0_linux_amd64.tar.gz
tar --xzvf frp_0.29.0_linux_amd64.tar.gz
mv frp_0.29.0_linux_amd64/ frp
cd frp
vim frpc.ini

内容如下:

[common]
server_addr = *.*.*.*    # 服务端的公网 IP
server_port = 7000       # 服务端设定的端口号

[ssh]                    # SSH 配置
type = tcp               # 表示转发的类型,我们只用到 TCP
local_ip = 127.0.0.1     # 本地 IP
local_port = 22          # 本地ssh服务端口
remote_port = 6000       # 远程连接时使用的端口

[http]
type = http              # 协议格式
local_ip = 127.0.0.1
local_port = 4000        # 本地服务端口
custom_domains = **.**   # 域名

同时我们也要将此域名解析到我们的服务端公网 IP
启动服务

./frpc -c ./frpc.ini

同样,可以再后台启动

nohup ./frpc -c ./frpc.ini &

测试

SSH 测试

在一台处于外网的设备的终端上输入:

ssh -p remote_port端口号 客户端的用户名@服务端的公网IP

成功的话,输入密码即可进入系统。

HTTP 测试

在本地启动一个 4000端口的 http 服务,比如调试我的 Hexo 博客。

hexo s

然后在处在外网的设备的浏览器上访问

http://**.**:8889/

即可看到我的博客内容,即页面成功显示内网服务返回的内容。