用开源免费的内网穿透工具 frp,实现远程桌面控制

frp:将内网机器通过公网 IP 连接起来

 frp 是一个可用于内网穿透的高性能的反向代理应用,可以作为两个内网机器通过公网 IP 进行桥接的桥梁。通过其支持各种服务和传输协议,我们就可以实现一系列远程控制操作。(frp 的 Github 主页上也用结构图解释了具体的工作原理,感兴趣的话可以前往了解。)

用开源免费的内网穿透工具 frp,实现远程桌面控制插图

 实现下面所有操作的前提是:你需要拥有一台有公网 IP 的云服务器。而经过我的测试,即便是带宽仅为 1M 小水管的云服务器也可以支撑几乎后面的所有操作。我接下来的操作中,被控目标主机 PC 操作系统是: Windows 10 v2004,云服务器为 CentOS 7.8。控制端为 Windows 10 v 1909。

 首先,我们需要对拥有公网的云服务器进行设置,根据云主机的系统版本从 frp 的 GitHub 中下载最新版本的运行包 ,对于 Linux 版本,我的策略是下载到本地,然后通过 7zip 完全解压,之后将其中的 frps 以及 frps.ini 这两个文件通过 SFTP 工具(比如 WinSCP 或者 Xftp )传输到目录 /etc下, 如’frp_0.58.1_linux_amd64.tar.gz’, 通过命令 tar -zxvf frp_0.58.1_linux_amd64.tar.gz 进行解压。

用开源免费的内网穿透工具 frp,实现远程桌面控制插图1

接着,使用 SSH 工具进入到该目录,通过 Vim 打开 frps.toml。

用开源免费的内网穿透工具 frp,实现远程桌面控制插图2

 默认的监听端口是 7000。如果希望更换端口,可以按键盘上的 i 键开启编辑,将其中的 bind_port 中后面的端口改为你想要的端口,然后按 ESC 关闭编辑模式,最后输入:wq保存编辑。
注: dashhoard为可视化面板, 可配可不配. 在网络安全组中将 18076 端口设置为进站出站的放行策略
通过 xxx.xx.xxx.xx:18076进行访问, 可通过Proxies查看是否 服务器 和 被控制端电脑 是否正常连接.

用开源免费的内网穿透工具 frp,实现远程桌面控制插图3

 我们需要开启 frp 的服务端,对于 Linux 主机,可以执行这一条命令来将其作为进程放到系统后台运行:
nohup /etc/frp_0.58.1_linux_amd64/frps -c /etc/frp_0.58.1_linux_amd64/frps.toml & &> /dev/null

执行后,我们可以通过 netstat -lnp|grep 7000看一下进程是否正常运行。
用开源免费的内网穿透工具 frp,实现远程桌面控制插图4

另附frp后台运行和停止操作

  1. 运行
nohup ./frps -c frps.ini >/dev/null 2>&1 &

或者客户端

nohup ./frpc -c ./frpc.ini >/dev/null 2>&1 &
  1. 停止
    先找到这个进程
ps -aux|grep frp| grep -v grep
root      3600  0.1  0.1 110188  9484 pts/0    Sl   15:04   0:00 ./frpc -c ./frpc.ini

执行之后如果显示这样则成功了
然后kill -9 进程号

kill -9 3600

 到这里,云端服务的操作基本上就完成了。如果你使用的云服务商的主机绑定了安全组,需要手动登录服务器的云控制台,在网络安全组中将 7000 端口设置为进站出站的放行策略

使用 frp 内网穿透实现 RDP 远程桌面

 在针对 Windows 系统的远程控制中,兼容性最好的当然是 RDP 远程桌面——无需安装第三方软件,非常简单容易进行设置。微软也在其他系统平台上推出了微软远程桌面客户端,让你几乎能在所有的主流平台上实现远程控制 Windows 主机。

 首先,我们需要设置一下被控 PC 端(也就是希望被远程控制的设备)在 从从 frp 的 GitHub 中下载最新版本的运行包 中下载对应的执行包,这里因为内网目标被控主机是 Windows 11,因此需要下载 Windows 版本。

解压缩之后, 使用编辑器对 frpc.toml 文件进行编辑。

用开源免费的内网穿透工具 frp,实现远程桌面控制插图5

frpc.toml 文件中主要分为两个部分,最上面[common]是和云端服务器通信的部分,因此server_addr填写的是对应的云服务器的 ip 地址,而下面这个server_port则是刚才我们在服务端所设置的bind_port,两者需要保持一致。token也是同样的道理.

用开源免费的内网穿透工具 frp,实现远程桌面控制插图6

 其中local_ip 指的是本机处于内网的 IP 地址,如果你是自己使用,只需要写 127.0.0.1 即可,而 local_port 指的是对应的服务端口,RDP 服务端口就是 3389。
至于 remote_port 就是远程用来映射的端口,最后根据原理,如果想通过远程桌面控制当前内网主机,其对应的地址就是:[server_port]:[remote_port](公网服务器 IP:映射的端口号)

如果你使用的云服务商的主机绑定了安全组,需要手动登录服务器的云控制台,在网络安全组中将 7002 端口设置为进站出站的放行策略

 完成之后点击保存,接着我们需要对电脑的远程进行设置。右键点击「此电脑」-「属性」,找到「远程设置」,在「远程桌面」中勾选「允许远程连接到此计算机」,同时取消「仅允许运行使用网络级别身份验证的远程桌面的计算机连接」的勾选,然后点击「确定」。

用开源免费的内网穿透工具 frp,实现远程桌面控制插图7

 最后,我们需要打开 Windows 防火墙给以上服务予以放行,在控制面板\所有控制面板项\Windows Defender 防火墙\允许的应用中点击「更改设置」,然后在下面找到「远程桌面」和「远程桌面(webSocket)」并分别勾选上「专用」和「公用」

用开源免费的内网穿透工具 frp,实现远程桌面控制插图8

 之后我们文件所在的目录,按住键盘上的shift键后右键选择「在此处打开 Powershell 窗口」,执行以下命令来开启 frp 客户端:
.\frpc.exe -c frpc.toml
 如果下面的终端输入显示有[RDPv] start proxy success 则表示实际上服务已经成功开启,使用控制端的「微软远程桌面」应该就可以实现远程控制了。

windos自启动

 虽然这样实现了远程控制,但 frp 的客户端运行却需要一直在前台开启 Powershell 终端。其实,完全可以使用更加高效率的做法:将可执行文件打包成系统服务,然后让服务在后台自动运行。
windwos利用”任务计划程序”。在Frp同目录下新建一个”start.bat” 文件。接着,右键编辑这个 start.bat:

@echo off
:home
frpc -c frpc.toml
goto home

在windows管理工具里找到”计划任务程序”,添加”start.bat”文件的开机自启任务

用开源免费的内网穿透工具 frp,实现远程桌面控制插图9

用开源免费的内网穿透工具 frp,实现远程桌面控制插图10

用开源免费的内网穿透工具 frp,实现远程桌面控制插图11

用开源免费的内网穿透工具 frp,实现远程桌面控制插图12

用开源免费的内网穿透工具 frp,实现远程桌面控制插图13

用开源免费的内网穿透工具 frp,实现远程桌面控制插图14

Linux自启动

设置frp开机自启,创建service服务文件

sudo vim /etc/systemd/system/frpc.service

填入如下信息,ExecStart参数请自行替换路径

[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target

[Service]
Restart=on-failure
RestartSec=5
ExecStart=nohup /etc/frp_0.58.1_linux_amd64/frps -c /etc/frp_0.58.1_linux_amd64/frps.toml & &> /dev/null

[Install]
WantedBy=multi-user.target

刷新服务列表:

sudo systemctl daemon-reload

设置开机自启动

sudo systemctl enable frpc

关闭开机自启

sudo systemctl disable frpc

启动服务

sudo systemctl start frpc

停止服务

sudo systemctl stop frpc
Lyndon
Lyndon

对世界的各种充满着好奇, 探索一切未知.

文章: 37

留下评论

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