用开源免费的内网穿透工具 frp,实现远程桌面和文件传输 | 您所在的位置:网站首页 › win远程桌面端口超级vps管理器 › 用开源免费的内网穿透工具 frp,实现远程桌面和文件传输 |
作为一个 IT 技术人员,我时常需要通过远程控制公司 PC 来进行一系列的 IT 运维操作。目前能实现远程控制操作的大多数工具都需要另外付费(商业或者企业环境),免费版本也存在相当多的限制,例如远程控制的带宽有限制,文件传输的稳定性也大受影响。 因此,如果能利用现有的一些资源和开源工具,实现商业软件才能实现的远程控制功能,对我来说会方便不少。在经历了一番探索后,我利用 frp 这样的内网穿透工具,组合目前电脑本身自带的工具,实现了诸如远程桌面控制,远程文件传输,远程 CMD 等一系列的操作,基本上代替了商用的远程传输工具。 frp:将内网机器通过公网 IP 连接起来frp 是一个可用于内网穿透的高性能的反向代理应用,可以作为两个内网机器通过公网 IP 进行桥接的桥梁。通过其支持各种服务和传输协议,我们就可以实现一系列远程控制操作。(frp 的 Github 主页上也用结构图解释了具体的工作原理,感兴趣的话可以前往了解。) ![]() 实现下面所有操作的前提是:你需要拥有一台有公网 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 。 ![]() 接着,使用 SSH 工具进入到该目录,通过 Vim 打开 frps.ini。 ![]() 默认的监听端口是 7000。如果希望更换端口,可以按键盘上的 i 键开启编辑,将其中的 bind_port 中后面的端口改为你想要的端口,然后按 ESC 关闭编辑模式,最后输入:wq保存编辑。 我们需要开启 frp 的服务端,对于 Linux 主机,可以执行这一条命令来将其作为进程放到系统后台运行: nohup /etc/frp/frps -c /etc/frp/frps.ini & &> /dev/null 执行后,我们可以通过 netstat -lnp|grep 7000看一下进程是否正常运行。到这里,云端服务的操作基本上就完成了。如果你使用的云服务商的主机绑定了安全组,需要手动登录服务器的云控制台,在网络安全组中将 7000 端口设置为进站出站的放行策略。 使用 frp 内网穿透实现 RDP 远程桌面在针对 Windows 系统的远程控制中,兼容性最好的当然是 RDP 远程桌面——无需安装第三方软件,非常简单容易进行设置。微软也在其他系统平台上推出了微软远程桌面客户端,让你几乎能在所有的主流平台上实现远程控制 Windows 主机。 首先,我们需要设置一下被控 PC 端(也就是希望被远程控制的设备)在 frp 的 GitHub 下载页面 中下载对应的执行包,这里因为内网目标被控主机是 Windows 10,因此需要下载 Windows 版本。 解压缩之后,将其中的 frpc.exe 以及 frpc.ini 拷贝到 C:\ftp 这个目录下面,然后使用编辑器对 frpc.ini 文件进行编辑。 ![]() frpc.ini 文件中主要分为两个部分,最上面[common]是和云端服务器通信的部分,因此server_addr填写的是对应的云服务器的 ip 地址,而下面这个server_port则是刚才我们在服务端所设置的bind_port,两者需要保持一致。 ![]() 下面部分是针对需要内网穿透的服务,比如针对 RDP 的代码写法如下: [RDP]type = tcplocal_ip = 127.0.0.1local_port = 3389remote_port = 7002其中local_ip 指的是本机处于内网的 IP 地址,如果你是自己使用,只需要写 127.0.0.1 即可,而 local_port 指的是对应的服务端口,RDP 服务端口就是 3389。 至于 remote_port 就是远程用来映射的端口,最后根据原理,如果想通过远程桌面控制当前内网主机,其对应的地址就是: [server_port]:[remote_port](公网服务器 IP:映射的端口号) 完成之后点击保存,接着我们需要对电脑的远程进行设置。右键点击「此电脑」-「属性」,找到「远程设置」,在「远程桌面」中勾选「允许远程连接到此计算机」,同时取消「仅允许运行使用网络级别身份验证的远程桌面的计算机连接」的勾选,然后点击「确定」。 ![]() 最后,我们需要打开 Windows 防火墙给以上服务予以放行,在控制面板\所有控制面板项\Windows Defender 防火墙\允许的应用中点击「更改设置」,然后在下面找到「远程桌面」和「远程桌面(webSocket)」并分别勾选上「专用」和「公用」。 ![]() 之后我们打开c:\frp目录,按住键盘上的shift键后右键选择「在此处打开 Powershell 窗口」,执行以下命令来开启 frp 客户端: .\frpc.exe -c frpc.ini 如果下面的终端输入显示有[RDP] start proxy success 则表示实际上服务已经成功开启,使用控制端的「微软远程桌面」应该就可以实现远程控制了。 ![]() 接下来我们就可以用控制端的 PC 测试一下,打开「远程桌面连接」,然后在「计算机」这一栏中输入云主机的公网 IP 后映射的端口号,比如我设置的 7002,然后点击连接。 ![]() 然后在弹出的警告中选择「是」。 ![]() 输入远程主机的登录用户名和密码之后,你就可以通过远程桌面来控制内网中的被控主机了! 除了正常的操作之外,你还可以实现一定程度的文件传输,比如说你可以从控制端的 PC 中复制文件并在远程桌面点击粘贴来实现文件传输,其实这个操作和那些商业远程控制软件非常类似,传输的速度和云服务器的公网带宽有关。 ![]() 虽然这样实现了远程控制,但 frp 的客户端运行却需要一直在前台开启 Powershell 终端。其实,完全可以使用更加高效率的做法:将可执行文件打包成系统服务,然后让服务在后台自动运行。 这里我们通过这个 winsw 小工具来实现,在其 GitHub 的 releases 页面中下载 对应 .net 运行时的版本,如果你使用的是 Windows 10 那么可以直接下载「WinSW.NET461.exe」这个文件,同时需要下载「sample-minimal.xml」这个配置文件,然后将两者下载到 frp 对应的 C:\frp 这个文件夹,分别改名为「winsw.exe」和「winsw.xml」。 ![]() 使用代码编辑器打开「winsw.xml」,将配置文件修改为: frp frp frp service frpc.exe -c frpc.ini reset点击保存之后,在 powershell 终端中按下ctrl + c 结束此前的 frpc 进程,然后输入.\winsw install 来安装服务,然后再输入.\winsw start 来启动服务,期间如果弹出 UAC 点击允许即可,这样 frp 就被安装成系统服务在后台默默运行了。 ![]() 虽然使用远程桌面可以覆盖远程控制中大部分的使用场景,但如果遇到需要传输文件的场景,远程控制简单的复制粘贴效率就比较低了。 通常远程文件传输可以通过 FTP 服务来解决。但 FTP 在服务配置上相当麻烦,一方面需要安装额外的第三方软件,并不能使用系统现成的软件来实现;另一方面服务相关的设置上都相当复杂。Windows 10 从 v1809 开始原生支持 OpenSSH,这让文件传输有了新的选择——通过 SSH 协议实现文件传输,无论是功能实现还是操作都变得既简单又高效。 首先我们需要在 Windows 10 上安装 openSSH 这个组件,打开 「Windows 设置 - 应用 - 可选功能」,点击「添加功能」找到 「OpenSSH 服务器」和「OpenSSH 客户端」点击安装。 ![]() 之后打开「控制面板 - 管理工具」中「服务」,找到「OpenSSH Authentication Agent」以及「OpenSSH SSH Server」两个服务,都将其修改为「自动」并立即启动。 ![]() 之后再次打开防火墙设置控制面板\所有控制面板项\Windows Defender 防火墙\允许的应用,找到「OpenSSH Server」看是否已经勾选了「专用」和「公用」,之后重启 PC。 ![]() 重启之后,打开 PowerShell 并进入 c:\frp 目录中,输入.\winsw stop 暂停服务,使用编辑器打开 frpc.ini,添加有关 ssh 的映射配置: [ssh]type = tcplocal_ip = 127.0.0.1local_port = 22remote_port = 6000这里远程的映射端口为 6000,更改完成之后保存,并使用 PowerShell 输入.\winsw start 重启 frp 服务。至此被控端的 SSH 映射就已经配置完毕了。 下面我们来实验一下,从控制端 PC 打开 ssh 客户端(举例客户端为 Xshell),在新建会话中的「主机」一栏输入公网云服务器的 IP 地址,在端口号处输入此前设置的映射端口号 6000,点击「连接」。 ![]() 在弹出的对话框中,输入被控电脑的登录账户和密码(如果绑定了 Microsoft ID 就输入此 ID),完成连接之后你就可以看到终端显示为被控主机的用户目录。我们通过 SSH 协议连接到了被控主机的 Powershell 终端中,这也间接说明 SSH 服务已经开启成功了。 ![]() 既然已经可以通过 SSH 连接,那么使用相同的协议传输文件也是顺理成章。点击 Xshell 功能栏中的 Xftp 就可以直接打开对应的主机文件目录,然后我们可以输入诸如/D:/这样的路径来进入到不同的存储空间中,文件传输也和传统的 FTP 客户端无疑,只需要选择文件或者文件夹后点击传输即可。 唯一需要说明的是,如果右侧目录是被控主机系统文件夹,则无法从控制端将文件传输过去,原因是权限不够(这牵涉到 Windows 和 Unix 下用户权限上存在差异)。 ![]() 本文中,我们使用 frp 这个内网穿透工具以及一个拥有公网 IP 的云服务器。成功实现了一系列商业远程控制软件的功能,需要额外安装的软件都是免费软件或者是开源软件,甚至只是开启系统自带的功能而已。如果你不希望为远程控制功能再额外花钱,不妨按照本文的步骤操作一番。 > 下载少数派 客户端、关注 少数派公众号 ,了解更多 Windows 玩法 🚀 |
CopyRight 2018-2019 实验室设备网 版权所有 |