windows 远程登录方案分享

1 月 7 日
 shuyuncong

最近看到很多关于 window 远程方案登录的讨论,所以在此也和大家分享一下之前自己的方案,以供相同条件约束下的朋友参考,也借此机会看看大家是怎么处理的。(叠甲:当前方案是目前的资源和约束下的选择)

背景诉求

在公司访问家里的 Windows 开发机,用来浏览器查阅资料、微信、Typora 笔记、Termius 等。

目前的现状是:

核心诉求是

资源和约束

资源

约束

方案对比

方案 访问方式 客户端依赖 延迟 安全性 结论
日本服务器 + Guacamole Web 无 高 高 ⚠️ 可用,但体验一般
FRP + 家庭 Guacamole Web 无 中 高 ⚠️ 可用,但体验一般
FRP + SSH 隧道 + RDP RDP 无 低 高 ✅ 最优解
FRP + RDP + multiOTP RDP 无 低 很高 ⭐ 可叠加
公益 FRP 内置 TOTP RDP 无 低 高 ⚠️ 依赖定制 FRP

最终选择:公益 FRP + SSH 隧道 + RDP

整体架构

公司电脑(自带 SSH 客户端)
   │
   │ ssh -i key -N -L 13389:WIN:3389
   ▼
公益 FRP ( TCP 高位端口)
   │
   ▼
PVE · Debian 跳板机
   │  · 仅 SSH key
   │  · 仅允许访问 Windows:3389
   ▼
家庭 Windows ( RDP )

核心原则

公益 FRP + SSH 隧道方案实施

基础设施搭建

跳板机系统选择

基础系统加固

apt update && apt upgrade -y
apt install -y openssh-server ufw fail2ban curl

用户职责划分

为了安全,我们将“管理权限”和“隧道权限”分开。

# tunnel 用户:仅用于建立隧道,无 Shell 权限
adduser tunnel
usermod -aG sudo tunnel
# debian-cc 用户:管理员,用于维护系统
adduser debian
usermod -aG sudo debian

SSH 安全加固

tunnel 用户(公司 → 跳板机)

在公司电脑生成密钥对,将公钥上传至 Debian 的 /home/tunnel/.ssh/authorized_keys

ssh-keygen -t ed25519 -f id_frp_ssh

authorized_keys 中强制限制能力:我们需要配置 SSH ,使得公司电脑连接时,只能做端口转发,不能执行命令,且只能转发到家里的 Windows IP 。

restrict,port-forwarding,permitopen="192.168.31.120:3389" ssh-ed25519 AAAA...

这个 key:

SSH 服务端限制

编辑 /etc/ssh/sshd_config,修改 SSH 端口为高位端口(防扫描),并禁用密码登录。

Port 53822                  # 高位端口
PermitRootLogin no          # 禁止 Root
PasswordAuthentication no   # 禁止密码
ChallengeResponseAuthentication no
PubkeyAuthentication yes    # 只认 Key
AllowUsers tunnel debian    # 白名单用户

# 针对管理员:允许 Shell ,禁止转发
Match User debian
    PermitTTY yes
    AllowTcpForwarding no

# 针对隧道用户:禁止 Shell ,限制转发目标
Match User tunnel
    AllowTcpForwarding yes
    PermitOpen 192.168.31.120:3389
    X11Forwarding no
    AllowAgentForwarding no
    PermitTTY no

配置完成后重启 SSH 服务:systemctl restart ssh

防火墙策略

验证原则只有一条:

跳板机只能访问 Windows ,不能访问任何其他内网。

# 1. 默认策略:拒绝入站,默认允许出站(稍后限制)
ufw default deny incoming
ufw default allow outgoing

# 2. 允许 FRP 流量进出( SSH 端口)
ufw allow 53822/tcp

# 3. 精细化出站规则 (Output Chain)
# 允许 Debian 访问 Windows 的 RDP
ufw allow out to 192.168.31.120 port 3389 proto tcp

# 允许访问网关 (DNS/路由需要)
ufw allow out to 192.168.31.1

# 拒绝访问内网其他所有 IP (防止横向移动)
ufw deny out to 192.168.31.0/24

# 启用防火墙
ufw enable

Fail2ban

配置 /etc/fail2ban/jail.local 监控 53822 端口,错误尝试 2 次即封禁 24 小时。因为公网暴露 SSH 必然会被扫描,这是最后一道防线。

[sshd]
enabled = true
port = 53822
maxretry = 2
bantime = 24h

关于 Windows 安全的建议

虽然 RDP 不暴露公网,但还是建议对目标 Windows 进行加固:

  1. **启用 NLA (网络级别身份验证)**。
  2. 创建非管理员用户用于远程登录。
  3. 强密码策略。
  4. (进阶) 配合 MultiOTP 软件,在 Windows 登录时强制要求 MFA 动态口令,进一步提升安全性。

内网穿透配置 (FRP)

使用低延迟的国内公益 FRP (如樱花 FRP / Nyat 等),将 Debian 的 SSH 端口暴露出去。

安装 FRPC

# 切换到 tunnel 用户安装,避免使用 root
su - tunnel
wget https://github.com/fatedier/frp/releases/download/v0.56.0/frp_0.56.0_linux_amd64.tar.gz
# ...解压并移动到 /usr/local/bin/frpc

配置文件 (/etc/frpc.toml)

我们**不直接穿透 RDP (3389)**,而是穿透 **SSH (53822)**。

serverAddr = "rdp.example.com" # FRP 服务端地址
serverPort = 7000
user = "your_user_id"
auth.token = "your_token"

[[proxies]]
name = "tunnel_ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 53822
remotePort = 53389

设为系统服务

创建 /etc/systemd/system/frpc.service 并启动,确保断电重启后自动上线。

公司电脑使用方式

在公司电脑上,不需要安装任何软件,只需要一个 SSH 私钥文件(id_frp_ssh)。

建立隧道

打开 PowerShell 或 CMD:

ssh -i id_frp_ssh -N \
  -L 13389:192.168.31.120:3389 \
  -p 53389 tunnel@frp.example.com

连接 RDP

打开 Windows 自带的“远程桌面连接”

mstsc → 127.0.0.1:13389

实际体验

原文: https://blog.illsky.com/posts/homelab-ssh-rdp/

6288 次点击
所在节点    Windows
45 条回复
QS0x01
1 月 7 日
我也用的同城的公益 frp 服务。

https://www.v2ex.com/t/1183259?p=2#reply141
swczxf
1 月 7 日
好复杂,虽然但是,直接用另外的电脑不是最方便么
ayase46k
1 月 7 日
mark 下了,周末试试
superBIUBIU
1 月 7 日
uu 远控走起
shuyuncong
1 月 7 日
@superBIUBIU #4 uu 应该在主控端安装软件吧,我们公司不让装这玩意,偷偷的装又怕后期审计到,很麻烦。
shuyuncong
1 月 7 日
@swczxf #2 是的,但是新电脑还没买。这是一个阶段性的解决方案,正好看到了就分享出来了
QS0x01
1 月 7 日
@swczxf 楼主是武装到牙齿了,里面有些步骤不是必须的。

必须的项目只有:
1. 服务端配置 ssh 仅密钥登录( fail2ban 是为了防密码登录的,所以没有必要)
2. 服务端找个公益 frp 转发 ssh 端口(自己家用没有那么多横向机子可供穿透,不是军工公司电脑不用防止横向)
3. 客户端配置 ssh 连接后自动建立隧道转发 3389
v2048
1 月 7 日
好复杂,先收藏了备用。这个情况最主要的困难在于公司的限制。
PandaChan
1 月 7 日
有一点不是很明白,跳板机作用是啥,为啥会沦陷
同 FRP ,路径是
公司 FRPC 连接服务器映射 RDP 端口到本地 - 阿里云服务器 FRPS - WindowsFRPC 端口注册到服务器
sazima
1 月 7 日
自己写了一个工具

[家 pc(a)] <------wss://websocket-----> 腾讯云服务器 <---wss://websocket----> [公司 pc ( b )]



电脑 B 的本地端口会映射到电脑 A 的一个端口
simon999
1 月 7 日
mark ,有空试下
deepbytes
1 月 7 日
老哥这方案跟我的一样啊,就是我用的 FIDO2 物理密钥认证的一个差别,公司电脑 macOS ,alias 命令,一键建立隧道然后 FIDO2 认证后就能 RDP 了,爽歪歪🤩
Paulownia
1 月 7 日
不懂就问,公司电脑不是访问不了公网么?
jianyunet
1 月 7 日
lmmir
1 月 7 日
今天试了 EasyTier 发现这个很牛逼 部署简单 功能强大。
shuyuncong
1 月 7 日
@PandaChan #9 我是为了不在公司启动/安装额外的服务,但是又怕直接暴雷端口比较危险
shuyuncong
1 月 7 日
@deepbytes #12 实不相瞒,就是看到了老哥你的回复,我才想着发出来的
NiceKlaus
1 月 7 日
牛,很专业
yyzq007
1 月 7 日
请教下 op, 这样做下来的话, rdp 的 udp 还能通吗, 对 rdp 的整体体验是否有影响?
shuyuncong
1 月 7 日
@yyzq007 #19 我应该是只用到了 tcp ,目前感觉还算流畅,打字不卡顿。
但是比 tailscale 组网后的 RDP 体感上差一些,整体上日常使用(浏览器查阅资料、微信、Typora 笔记、Termius )差别不大。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1183658

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX