个人博客,记录知识防止遗忘
Frp工作原理及配置介绍
Frp工作原理及配置介绍

Frp工作原理及配置介绍


很多时候我们有远程办公的需求, 但是市面上的 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

这意味着, 下次探视, 王二蛋可以同时和珊珊、妍妍隔着玻璃打电话, 想到这里,二蛋幸福的笑了

image.png

回过头再缕一下, 这基本就是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文件,启动了程序, 并和他要到了密码.

这意味着, 下次出差, 你将有机会同时学习美日两国的历史文化. 想到这里,你幸福的笑了

image.png

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,那我还如何登录账号?所以很无奈只能使用以下方法来实现了

3.3.2    方法② windows的任务计划管理程序


创建
image.png
image.png
image.png
image.png
image.png

image.png

验证
image.png

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注