很多时候我们有远程办公的需求, 但是市面上的 teamview、向日葵等第三方速度都很慢.用着很难受
此时可以考虑使用Frp自己搭建一个"远程控制中继", 当然前提是自己有一台云服务器, 或者任何具备公网ip地址的主机.
内容大纲
1 简介
本质上来说, frp 是个很好用的专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议. 可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网. 反代3389端口实现远程控制仅仅是其中一种用途.
本文以windows的远程访问服务(默认3389端口)为例, 简单说明frp的使用方式.
更多信息需要去frp官方文档中查看
github中文文档链接: https://github.com/fatedier/frp/blob/master/README_zh.md
2 工作原理
首先假想一个美剧里经常出现的例子(见下图)
想象1个监狱, 监狱中有2个牢房A,B, 监狱门口有个会客厅;
现在有俩人来探亲, 王二蛋想见他老婆珊珊, 他改如何操作?珊珊住在牢房里,肯定不能到处跑,只能在牢房内呆着, 同样监狱管理员也不可能放王二蛋进去牢房里自己找,这怎么办呢,只能在大门口盖一个房子作为会客厅作为中继站点,实现见面聊天的需求.
具体就是 让所有想见亲戚朋友的犯人每天早上写个申请表,并签名,其中就有珊珊,
然后会客厅有个编号44444的工作人员, 每天会根据申请列个总体名单出来,这天, 王二蛋想见他老婆珊珊,会客厅工作人员44444一查看名单,名单里确实有个叫珊珊的,编号是44401, 于是把这44401叫来会客厅, 二蛋顺利和他老婆珊珊 隔着玻璃打了电话, 至此皆大欢喜
后来,牢房B的妍妍也想见她男朋友, 便提交了申请,她的编号是44402
这意味着, 下次探视, 王二蛋可以同时和珊珊、妍妍隔着玻璃打电话, 想到这里,二蛋幸福的笑了
回过头再缕一下, 这基本就是FRP的工作原理了.
故事中的概念 | frp中的概念 |
---|---|
牢房 | 被访问主机 |
牢房A的犯人珊珊 | 主机A的远程桌面端口3389 |
会客厅 | 任意有公网IP的主机,作为中继 |
珊珊写的申请表 | 配置文件 frpc.ini |
会客厅的名单 | 配置文件 frps.ini |
王二蛋 | 主动访问端 |
姗姗的编号44401 | 主机A的frpc.ini配置文件中指定的remote_port |
妍妍的编号44402 | 主机B的frpc.ini配置文件中指定的remote_port |
编号44444的工作人员 | frpc.ini中指定的server_port frps.ini中指定的bind_port |
现在把上边儿的故事翻译一下:
你家里有一台主机A,你有很重要的资料在上边
你经常需要出差, 远程控制这台主机, 你查了百度发现只需要开启windows自带的远程桌面就行(默认是3389端口)
但是你的网络是家用宽带, 没有公网地址, 离开家就访问不到了
你租了一台云服务器(假设ip为1.1.1.1)作为中继跳转平台, 因为它有公网IP.所以你出差也能访问到这个云服务器,进而跳转到家里的主机
你在云服务器上配置了frps.ini文件, 并运行程序
你在自家主机A上配置了 frpc.ini文件,并运行程序终于你出差了, 你随便找了台电脑, win + R 输入mstsc,
输入远程地址1.1.1.1:44401
中继服务器收到你的请求,查看列表,找到了始终都建立TCP链接的被控主机01, 将请求转发给它的3389端口, 输入账号密码,登陆成功你顺利远程连上了你家里的电脑, 迫不及待的打开了 "我的电脑/D盘/学习/马克思主义纲领/中日关系/纪录片", 至此,皆大欢喜,岁月静好
后来, 你又去好朋友家做客, 并在他的主机B 上也配置了 frpc.ini文件,启动了程序, 并和他要到了密码.
这意味着, 下次出差, 你将有机会同时学习美日两国的历史文化. 想到这里,你幸福的笑了
3 配置
配置极为方便, 用户可以根据需要, 选择简易版以及进阶功能版, 两者分别对应2个配置文件,有现成的模版,简单改动即可成功部署.
一般情况下简易版即可, 但若要考虑安全问题以及传输性能, 则可以研究下进阶版, 目前进阶版的一些功能仍然不稳定,并且配置使用很不方便(主控端也需要开启frpc)
3.1 简易版搭建过程:
3.1.1 被控主机A 配置:
首先配置frpc.ini文件
[common]
server_addr = 1.1.1.1
server_port = 44444
token = abc123
[host_A]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 44401
保存后 需要 win +R 输入 cmd ,
随后使用cd 切换到frp配置文件路径下, 启动frpc(必须通过命令行启动, 也可以写个bat文件, 即可双击执行)
frpc.exe -c frpc.ini
3.1.2 中继服务器端配置:
首先修改文件 frps.ini
[common]
bind_port = 44401
token = abc123
保存后, 就可以运行了.
建议放在虚拟终端 screen 中运行,yum或者apt安装一个挺快的
./frps -c frps.ini
3.2 进阶版配置相关
进阶版的配置文件为frpc_full.ini 和 prps_full.ini, 相对于简易版,其中增加了很多其他功能,例如以下几点
① web页面管理
可以直接在web页面查看到连接信息等
② stcp 安全连接
简易版的tcp穿透相当于将被控主机的端口直接暴露在公网上, 有安全风险
stcp在其基础上增加一个验证密钥的环节,更安全. 但同时也需要主控端也启用frpc程序,这就显得很不方便
③ xtcp 实现p2p的连接
简易版的tcp穿透,所有的流量都需要经过中继服务器中转, 而国内的云服务器带宽都很低(普遍1M,土豪忽略…), 导致有时候体验并不是特别好. xtcp是在原有基础上, 在主控端新开一个frpc程序, 这样主控和被控端通过点对点方式连接, 中继服务器只起到控制协调的作用.
xtcp一般都与stcp配合使用
3.3 附注: windows 开机自启配置
百度了下windows开机执行脚本的方法,大概有2种
3.3.1 方法① 放到指定目录下
将脚本放到这个目录下 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
经过测试,发现这种方法开机后,还需要登录之后才会开始运行,但对于远程桌面来说,我frp没起来,无法连 上mstsc,那我还如何登录账号?所以很无奈只能使用以下方法来实现了