这个需求是来自于我在家里的办公电脑是性能比较强的,但是没有公网 IP,在外面的时候(例如坐车,开会fish),有时候想要使用家里的办公电脑搞些好玩的,画画图什么的,就可以通过 windows 的远程桌面连接上家里的电脑,直接开始了。
需要的条件:
1)一个有公网IP的云服务器,我这使用的是阿里云的 ECS
2)一个在局域网内能够访问到云服务器,但是外部网络访问不到的 windows 电脑,我这里就是家里的 windows11 办公电脑
3)处于无法直接访问到局域网内部设备的 windows 电脑,我这里就是我自外面的时候的笔记本电脑了。
尝试了两种方案,从外部网络通过云服务器中转,连接到局域网内的Windows电脑,都是验证可行的。
连接示意:外部网络用户 → 云服务器公网IP:端口 → SSH隧道/FRP → 内网Windows:3389
1 使用SSH隧道
1.1 局域网内的电脑启用Windows远程桌面
- 进入
设置 --> 系统 --> 远程桌面
- 启用远程桌面并记录内网IP地址(
cmd
执行ipconfig
查看)
1.2 云服务器SSH配置
sudo vim /etc/ssh/sshd_config
确认以下配置:
AllowTcpForwarding yes
GatewayPorts yes # 允许外部访问转发端口
sudo systemctl restart sshd
1.3 创建SSH反向隧道
在内网Windows电脑上(需安装OpenSSH客户端):
ssh -R 3390:localhost:3389 用户名@云服务器IP -N -f
-R 3390
:云服务器监听端口,可以设置其他端口,但是需要确保该端口在云服务器上已经开放localhost:3389
:本机RDP端口,对于 windows 系统,默认是 3389 端口-N
:不执行命令-f
:后台运行
1.4 连接远程桌面
在外部电脑上使用远程桌面客户端连接:
mstsc /v:云服务器IP:3390
1.5 安全增强设置
1.5.1 端口伪装
ssh -R 0.0.0.0:3390:localhost:3389 user@server -N -f
1.5.2 连接保活
# 每30秒发送保活信号
ssh -o ServerAliveInterval=30 -R 3390:localhost:3389 user@server -N
2 使用FRP反向代理
2.1 服务器端配置(云服务器)
wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
tar -zxvf frp_*.tar.gz
cd frp_*
vim frps.ini
配置内容:
[common]
bind_port = 7000
vhost_http_port = 8080 # 可选WEB端口
2.2 客户端配置(内网Windows)
下载Windows版FRP:
Invoke-WebRequest https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_windows_amd64.zip -OutFile frp.zip
Expand-Archive frp.zip
cd frp_*
notepad frpc.ini
配置内容:
[common]
server_addr = 云服务器IP
server_port = 7000
token = your_secure_token_here
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 3390
2.3 启动服务
# 服务器端
./frps -c frps.ini
# 客户端(Windows管理员权限运行)
.\frpc.exe -c frpc.ini
2.4 连接远程桌面
外部电脑使用:
mstsc /v:云服务器IP:3390