这篇文章上次修改于 328 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

起因,之前一直在用的远程维护工具受限了。
只好自己动手,使用FRP搭建反向代理,远程维护目标电脑了。

FRP中文文档:https://github.com/fatedier/frp/blob/master/README_zh.md

FRP下载地址:https://github.com/fatedier/frp/releases

使用FRP的TCP反向代理方式

服务端部署

我用的是CentOS6.5系统的VPS,下面介绍的是Linux下的部署方法。

Windows下方法更简单,可以参考后面的客户端部署。

下载FRP

下载对应32/64位linux版本的FRP。,放到目录/root/frp下。

编辑服务端配置文件

我因为不太会用Linux上的编辑器,只好用FTP工具连接SSH端口。先下载配置文件,再编辑上传的笨办法,来修改配置文件。

编辑服务端配置文件:frps.ini

[common]
# 绑定端口
bind_port = 9000
# 允许连接的端口
allow_ports = 9001-9050
# 控制台用户名
dashboard_user = user
# 控制台密码
dashboard_pwd = password
# 控制台端口
dashboard_port = 9100

这之后还要设置一下iptables,允许这些端口的外部访问。

设置自启动

编辑文件/etc/rc.d/rc.local文件,添加一行:

nohup /root/frp/frps -c /root/frp/frps.ini >/root/frp/log.txt 2>&1 &

最后重启VPS。

使用浏览器访问控制台(IP:9100),如果可以访问,就表示配置成功了。

客户端部署

客户端的系统是Windows。

下载FRP

下载对应32/64位windows版本的FRP。

编辑配置文件

编辑配置文件:frpc.ini

[common]
# 服务端IP
server_addr = 1.2.3.4
# 服务端端口
server_port = 9000

# 自定义名称 这里用于远程桌面
[mstsc]
# 模式 TCP反向代理
type = tcp
# 客户端端口 这里设置的远程桌面端口3389
local_port = 3389
# 服务端端口
remote_port = 9001

启动FRP客户端

可以用命令行启动,也可以新建一个批处理文件。启动命令:

frpc.exe -c frpc.ini

我用的方式,在frpc.exe的同目录下,创建一个批处理文件,用于启动FRP客户端并隐藏控制台窗口。

@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
:begin
REM
frpc.exe -c frpc.ini

双击执行该批处理文件,任务管理器里能看到frpc进程就表示成功了。

批处理文件还可以放到启动文件夹下,开机启动。

使用反向代理

启动远程桌面,远程服务端IP+远程端口号(如:1.2.3.4:9001),就可以远程目标电脑了。

使用FRP的STCP方式

直接使用FRP的TCP反向代理的模式。

优点是访客端不用额外运行程序,直接访问即可。

缺点是安全性不高,客户端的远程桌面端口相当于暴露再公网上了。这种方式更适合于发布网站。

并且,服务端需要消耗双倍的流量,所有交互都经过服务端中转。

FRP还提供了STCP的方式,使被控端(后面称为客户端)和主控端(后面称为访客端)可以点对点直接连接。

访客端也需要配置并运行FRP,安全性更高一些。

服务端配置

[common]
# 绑定端口
bind_port = 9000
# 允许连接的端口
allow_ports = 9001-9050
# 绑定UDP端口 STCP模式要用到
bind_udp_port = 9051
# 口令密码
token = token
# 控制台用户名
dashboard_user = user
# 控制台密码
dashboard_pwd = password
# 控制台端口
dashboard_port = 9100
# 日志文件
log_file = ./frps.log
# 日志级别
log_level = info
# 日志保存天数
log_max_days = 3

客户端配置

[common]
# 服务端IP
server_addr = 1.2.3.4
# 服务端端口
server_port = 9000
# 口令密码
token = token

# 自定义名称 这里使用内网的远程桌面工具NoMachine
[NoMachine]
# 模式 stcp
type = stcp
# 密码
sk = password
# 本机IP
local_ip = 127.0.0.1
# 绑定端口
local_port = 4000

访客端配置

[common]
# 服务端IP
server_addr = 1.2.3.4
# 服务端端口
server_port = 9000
# 口令密码
token = token

# 自定义名称
[NoMachine_VISITOR]
# 模式 stcp
type = stcp
# 角色 访客端
role = visitor
# 客户端设置的名称
server_name = NoMachine
# 密码
sk = password
# 本机IP
bind_addr = 127.0.0.1
# 绑定端口
bind_port = 4100

其中,server_name和sk要与客户端配置的一致。

使用

因为windows的远程桌面,客户端现场回显示登录界面。所以使用了谷歌的开源远程桌面工具NoMachine。

服务端、客户端、访客端的FRP都运行之后,访客端的NoMachine访问127.0.0.1:4100,就可以远程客户端了。