前言
由于之前做devops,需要给用户支持,为了方便远程,首先使用的是向日葵,但是这个收费就算了,收费后效果也不大(很显然著的是去年疫情时候远程办公),后面就查询有没远程工具,继而发现了frp,觉得很好用,配置对于首次使用的人来说,稍微有点复杂,因此记录下。
frp介绍
frp简单来说就是个内网穿透工具,提供了支持tcp的转发,这也是我们最常用的功能,下载地址和文档请参考frp github ,文档
如果配置ssh、http,也是类似,具体参考文档
使用frp进行远程桌面
windows默认提供了远程桌面功能,但是由于电脑都是局域网,没有公网ip,是无法进行远程桌面的,如果使用内网穿透工具frp,就可以实现。
配置frp tcp
以家中电脑远程办公室电脑为例
1.准备一个云服务端(具有公网ip,比如阿里云、腾讯云、京东云等),在云服务器上安装frp
从github下载frp,解压后frp目录是/etc/frp
服务端配置
#vim /etc/frp/frps.ini文件
#文件 frps.ini
[common]
bind_port = 7000
#启动frp
nohup /etc/frp/frps -c /etc/frp/frps.ini &
客户端(办公室电脑)配置
同理下载frp安装包,解压后(目录D:\tools\frp_0.31.2_windows_amd64),编辑frpc.ini文件
#frpc.ini
[common]
server_addr = 云服务器ip
server_port = 7000
#不能相同
[office_demo_mstsc]
type = tcp
local_ip = 127.0.0.1
local_port = 3389 #3389是windows的远程桌面端口,如果是ssh默认是22
remote_port = 7002 #把云服务器的7002映射到办公pc的3389端口,即远程桌面端口
Windows开机启动frp
winkey+r,输入shell:startup
,进入开机启动目录,创建frpc.vbs
文件,内如如下
set ws=wscript.createobject("wscript.shell")
ws.run "D:\tools\frp_0.31.2_windows_amd64\frpc.exe -c D:\tools\frp_0.31.2_windows_amd64\frpc.ini",0
双击frpc.vbs
启动frp,在Windows进程中可以查看到frpc.exe
,同时在云服务器netstat -an |grep 700
,发下7002端口处理监听状态。
这样就可以从家中电脑进行远程桌面到办公室电脑: 远程地址 云服务器ip:7002
,输入办公室电脑账户密码即可登录。
这个做法就是使用的frp的tcp转发功能,把云服务器的7002端口流量转发到办公电脑的3389端口,这种方法简单,但是由于把内网的办公电脑暴露到了外网,不安全。我由于使用此方法远程家中电脑,由于家里电脑密码太简单,导致被电脑被黑,电脑密码被修改而无法登陆。因此要考虑使用安全的远程方法。
配置stcp
stcp即securt tcp,安全的tcp
由于frp tcp需要把内网端口暴露到公网,无法保证安全性,当然电脑密码设置的复杂也可以,但是谁天天去输入那么复杂的密码登录电脑呢,很不方便,因此采用安全的方式进行远程桌面,frp提供了stcp即secret tcp,安全的tcp,这种方式流量也是经过云服务器,但是内网端口并不进行暴露,而且经过认证,很安全。
云服务器配置
#vim /etc/frp/frps.ini文件
[common]
bind_port = 7000
token = 123456 #token配置,客户端要保持一致,也可以不加
dashboard_port = 7501 #dashboard端口,在浏览器输入 云服务ip:7501 即可访问查看
dashboard_user = frp
dashboard_pwd = frp123456 #建议密码复杂
#启动
nohup /etc/frp/frps -c /etc/frp/frps.ini &
在浏览器输入 云服务ip:7501 即可访问查看仪表盘
日志直接查看/etc/frp/nohup文件即可
公司电脑配置(受控方)
[common]
server_addr = 云服务器ip
server_port = 7000
token = 123456 # 如果服务端设置了token,那客户端要保持一致才连得上
#服务名不能相同,
[office_demo_mstsc]
type = stcp #使用stcp
sk = mstsc123 #安全key,访问端也要保持一致
local_ip = 127.0.0.1
local_port = 3389
#remote_port = 7002 #发现去除了公网监听 stcp模式以服务名的形式匹配,不再需要remote_port
同理,使用自己编写的frp.vbs脚本进行启动
家里电脑配置(控制方)
[common]
server_addr = 云服务器ip
server_port = 7000
token = 123456 # 如果服务端设置了token,那客户端要保持一致才连得上
#访问公司电脑
[office_demo_mstsc_visitor]
type = stcp
# stcp 的访问者
role = visitor
sk = mstsc123 #保持和受控方frp内的sk相同,否则无法通过
# 要访问的 stcp 代理的名字
server_name = office_demo_mstsc #受控方的服务名称
# 绑定本地端口用于访问 SSH 服务
bind_addr = 127.0.0.1
bind_port = 7555 #本地监听端口
然后家中电脑 mstsc,输入127.0.0.1:7555
输入公司电脑的账户密码即可访问
这种方式最安全,受控方只能被配置的使用方(自己家里电脑)远程。但是比较麻烦
同理,如果要使用公司电脑控制家中电脑,在两边的frpc.ini配置即可。
参考 https://gofrp.org/docs/examples/