利用FRP实现内网穿透

几个概念

frp

FRP (Fast Reverse Proxy) 是一个可用于内网穿透的高性能的反向代理应用,支持TCP,UDP,HTTP,HTTPS协议。

项目地址:
https://github.com/fatedier/frp/releases

正向代理

正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从原始服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转交并且将获得的内容返回给客户端。正向代理的情况下客户端必须要进行一些特别的设置才能使用。

比如我们平时用的翻墙工具就属于正向代理的一种应用。
01.png

反向代理

反向代理正好相反。对于客户端来说,反向代理就好像目标服务器。并且客户端不需要进行任何设置。客户端向反向代理发送请求,接着反向代理判断请求走向何处,并将请求转交给客户端,使得这些内容就好似他自己一样,一次客户端并不会感知到反向代理后面的服务,也因此不需要客户端做任何设置,只需要把反向代理服务器当成真正的服务器就好了。
02.png

安装部署frp

准备工作

1.拥有公网ip的设备

作为反向代理服务器,外网访问内网设备时通过此设备进行访问。

2.域名(非必须)

域名的作用仅仅是为了方便记忆,有了域名在访问时就不需要输入那些难以记忆的数字进行访问了。

下载安装程序

GitHub下载frp程序,如果是64位系统下载“amd64”结尾的zip包,如果是32位系统就下载“386”结尾的zip包。

下载完成后分别在客户端和服务端选择一个合适的位置直接解压出来就可以了。

服务端

放行端口

因为博主使用的是阿里云的学生机,默认是没有放行其它端口的,所以在配置frp之前需要配置一下入方向的安全组规则:
03.png

编辑配置文件

在上面过程中解压出来的文件包含有frps.ini和frps_full.ini两个配置文件,frps_full.ini是全配置,里面所有的配置都有,玩法很多,感兴趣的可以研究一下。将下面配置代码复制到frps.ini后保存:

[common]
bind_port = 7000 ;要绑定的端口

dashboard_user = admin ;控制台的用户名
dashboard_pwd = password ;控制台的密码
dashboard_port = 7500 ;控制台的端口

在配置文件所在位置按住shift右键打开cmd或power shell,执行命令:
cmd:

frps -c frps.ini

power shell:

.\frps.exe -c frps.ini

客户端(内网设备)

编辑配置文件

将如下代码复制到frpc.ini中:

[common]
server_addr = 1.2.3.4 ;服务器的 IP
server_port = 7000 ;服务器上设置的服务绑定端口

[RDP] ;这个是反向代理的名称,可以随意设置
type = tcp ;RDP 是 TCP 协议的
local_ip = 127.0.0.1 ;本机IP,可以直接使用127.0.0.1
local_port = 3389 ;远程桌面的默认端口
remote_port = 7001 ;外网访问的端口

在配置文件所在位置按住shift右键打开cmd或power shell,执行命令:
cmd:

frpc -c frpc.ini

power shell:

.\frpc.exe -c frpc.ini

开启远程桌面(非必须)

如果你配置frp是为了使用远程桌面,而恰巧你的内网设备又是win7或win10等桌面版系统,那么你还需要右击“此电脑”,选择“系统”——“远程设置”——“允许远程连接至此电脑”。而如果是server版本直接忽略此步骤即可。

至此,你已经可以使用你的ip加端口号的形式访问你的相应服务了。

绑定域名

设置域名解析

设置自己的域名解析,添加一条A类记录指向你的公网ip。
04.png

配置frpc.ini

在刚才复制的配置之后添加如下内容即可:

custom_domains = xxx.yourdomain.xxx

这样,你就可以使用域名+端口的形式访问你的服务了。

Linux环境后台运行frp

在Linux环境下使用frp与Linux并没有太大的区别,配置文件的写法都一样,主要是frp的后台运行,因为如果我们使用ssh方式登录服务器的方式,启动了frp服务,当断开ssh连接的时候frp服务也就随之关闭。这里有两种后台运行frp服务的方式:

使用nohup

首先进入frp的解压目录!
服务端:

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

客户端:

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

使用screen

首先进入frp的解压目录!
服务端:

screen -S frp  # 创建一个screen
./frps -c ./frps.ini

客户端:

screen -S frp  # 创建一个screen
./frpc -c ./frpc.ini

Windows开机自动连接

为了能够让Windows开机启动后能够自动连接到frp服务端,需要添加一个开机时启动的计划任务,Windows计划任务不过多介绍,没用过的可以Google/百度。

在frp程序所在目录新建一个记事本文件,内容如下:

CreateObject("WScript.Shell").Run "cmd /c frpc -c frpc.ini",0

05.png
也就是启动frpc程序,然后将.txt修改为.vbs格式,然后再新建一个Windows计划任务,将这个vbs脚本程序添加进去就ok了。