阿里云ECS+frpc/frps+RDP_CnC 实现内网穿透远程桌面,无公网家庭版Win10台式机变身远程工作站
起因
我有一台性能比较好的台式电脑。除了打游戏以外,我平时的一些不复杂的科学计算(MATLAB)和仿真(主要是 Keysight ADS)也会使用它。
但是在教室上课或者其他不在宿舍的场景下,我只能依靠笔记本电脑来使用上述软件,
一是笔记本本身性能有限,计算速度慢;
二是哪怕速度已经不快的情况下,笔记本还必须是插电使用,
否则要么很快耗尽电池电量,要么在省电模式下进一步降低计算速度,总之就是很不方便。
我希望能够在不在宿舍的时候也能使用台式电脑的算力。
遭遇的技术困难
- 我的宿舍网络是运营商拉的家用宽带,营业厅说什么也不给公网 IP。
- 我的台式机操作系统是购买时预装的 Windows 10 家庭中文版,重装专业版系统意味着我需要重装许多的软件,折腾且花时间。
采取的方案
用内网穿透解决远程访问的网络问题,用 RDP_CnC 工具解决家庭中文版系统没有远程桌面功能的问题。
实操
配置远程桌面
我在 GitHub 上找到了这个开源项目 https://github.com/sebaxakerhtc/rdpwrap
从 Releases 下载即可,名字中带有 Black 的安装包会安装暗色主题 UI 的相同程序,
可以说对我这种喜爱暗色护眼主题的用户是非常贴心了。
它的功能非常暴力,就是直接在 Windows 系统上安装 rdpwrap.dll 及其相关的组件,然后拉取一个依据操作系统的不同小版本专门编写的 INI 配置文件,然后神奇地解锁远程桌面功能。
同时它还提供测试功能,你可以从它的 GUI 上看到自己的系统当前的远程桌面服务开启状态、远程桌面是否可用等信息,非常方便。
缺点就是你要和你的 Windows Defender 好好谈谈。
配置 frp 套件
frpc/frps 是一个套件,来自这个 GitHub 项目 https://github.com/fatedier/frp
是个国货,有空还是要多支持一下。
它包含两部分,一部分是服务端 frps,它需要被配置在具有公网 IP 的设备上,为内网穿透提供中转服务;
另一部分是客户端 frpc,它需要被配置在需要内网穿透的设备上,与 frps 配合实现内网穿透。
配置 SSH
第一步当然是启动 ECS,进入 VNC 远程终端。为了后续操作省事,我先配置了 SSH,
一是为了使用我自己比较喜欢的终端软件(比如 UI 长得很好看的 Tabby)来操作 ECS 的命令行,二是后续可以通过 SFTP 向 ECS 传输文件。
vi /etc/ssh/sshd_config
我在这里调整了 SSH 的默认端口,然后通过阿里云面板的“安全组”放行了新的端口,
重启 SSH 服务,然后在本地尝试使用命令行连接 ECS:
ssh root@IP -p PORT
输入密码后连接成功,接下来继续服务端的配置过程。
配置 frps
我在这里使用了免费软件 FileZilla 来完成下面的操作。
启动 FileZilla,“主机”填 sftp://IP
,用户名 root,密码和端口,然后“快速连接”即可。
这里不能缺省“主机”中的 sftp://
协议头,否则 FileZilla 会尝试建立 FTP 连接而导致连接失败。
将下载到的 frp_<version>_linux_amd64.tar.gz
传到 ECS 上合适的目录,
tar -zxf frp_<version>_linux_amd64.tar.gz
解压后 vi 打开 frps.ini
,其他的配置文件这里用不到可以不管。
里面有唯一一个 bind_port
,是 frps 与 frpc 通信的端口。
可以随便选一个,也可以保留默认值,但是选好以后要在 ECS 的安全组中放行。
命令行执行
frps -c frps.ini
没有报错的话,此时服务端已经配置成功。
配置 frpc
我直接在我的台式电脑上完成的这一部分。
下载 frp_<version>_windows_amd64.zip
,解压。
考虑到远程桌面需要一个 TCP 连接,我们参考 frp 中文文档 的说法,这样填写 frpc.ini
:
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 6000
3389
是 Windows 远程桌面的默认端口,假如你没有改过的话,应当是这个值。
命令行执行
frpc -c frpc.ini
如果命令行没有报错,此时内网穿透已经建立。
尝试用另一台设备(其他电脑或安装了 RDClient 的手机)连接远程桌面,
发现成功连接。
包装 frpc 为服务
平时这台台式电脑也要用,如果 frpc 一直以一个命令行窗口的形式挂在后台,看着碍眼,用着也碍事;
作为一台家用电脑,我的台式机也不适合长时间开机,
所以 frpc 最好能开机自启,且静默后台运行。
我查阅了一下网上的教程,了解到可以利用 WinSW 工具 https://github.com/winsw/winsw
将 frpc 包装为系统服务,从而实现上述需求。
从 Releases 下载之,解压到 frpc 所在目录。
新建一个 XML 文件,文件名要和 WinSW 程序的当前文件名 完全一致。
为了省事,重命名 WinSW 程序的文件名为 winsw.exe
,这样 XML 文件也可以命名为 winsw.xml
了。
填写后者的内容如下:
<service>
<id>frp_client</id>
<name>FRPC Client Service</name>
<description>与服务端 FRPS 服务配合使用来实现内网穿透。</description>
<executable>frpc.exe</executable>
<arguments>-c frpc.ini</arguments>
<log mode="none"></log>
</service>
<id>
和 <name>
不能和当前操作系统中已有的服务重复。<description>
可以随便写。<executable>
是待包装为服务的程序 exe 文件对 winsw.exe
的相对路径,
因为它们在同一个目录下,所以直接写文件名。<arguments>
是启动参数,<log mode="none">
是为了不记录日志,完全静默运行。
保存,在当前目录下命令行执行
.\winsw.exe install
frpc 就会被包装为系统服务。
Windows 徽标键 + R 打开“运行”窗口,输入 services.msc 回车,打开“服务”菜单,
找到我们刚才包装好的服务,将其启动方式设为“自动”,就大功告成了。