frp内网穿透工具使用,附远程桌面

时间:2024-03-05 09:52:15

前言

由于之前做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/