# RDP-FIDO-GATE — 安装与配置（分步说明）

安全的远程桌面（RDP），带有**强制性的 FIDO2/WebAuthn 硬件密钥门禁**。RDP 端口
始终被防火墙封锁，只有在你触碰密钥之后，才会**仅为你的 IP 打开约 90 秒**。需要 Windows 10 1903+（WebAuthn + Windows Firewall）。没有托管服务——你需要
自行下载并安装。

两个组件及其端口：

| 组件 | 运行位置 | 端口 |
|-----------|---------------|-------|
| **Gate** | 目标机器（你要连接的 PC） | **7440/TCP** — 控制 + FIDO 确认；**3389/TCP** — RDP（按需开放） |
| **Client** | 你的机器 | 到主机 7440 和 3389 的出站连接 |

---

## Step 1. Host — 安装 gate

1. 在目标机器上下载并解压 `RdpFidoGate-Host.zip`。
2. **以管理员身份**运行：
   ```powershell
   powershell -ExecutionPolicy Bypass -File Install-Gate.ps1
   ```
   （默认 gate 端口 7440 和约 90 秒的访问窗口；你可以设置 `-Port` 和 `-GrantSeconds`）。
3. 该脚本会启用 Remote Desktop（带 NLA），**在防火墙中关闭 3389**，在 **7440** 上启动 gate
   服务，并打印一个用于注册首个密钥的**一次性代码**。
4. **记下：** 主机地址（名称 / 公网 IP）、端口 **7440** 以及那个一次性**代码**。

---

## Step 2. 路由器端口转发（如果主机位于 NAT/路由器之后）——互联网访问所必需

如果你**从互联网**连接，且目标机器位于家庭/办公室路由器之后，你必须
在路由器上将**两个端口转发**到主机的 LAN 地址。否则客户端既无法到达
gate，也无法到达 RDP。

转发（在路由器管理界面中的 Port Forwarding / Virtual Servers / NAT）：

| 外部端口 | 协议 | → 内部 IP（主机 LAN） | 内部端口 |
|---------------|----------|--------------------------|---------------|
| **7440** | TCP | `192.168.x.x`（主机 LAN IP） | **7440** |
| **3389** | TCP | 同一主机 LAN IP | **3389** |

步骤：
1. 查找主机的 LAN IP：`ipconfig` → "IPv4 Address"（例如 `192.168.1.50`）。
2. 为主机**保留该地址**（在路由器中按 MAC 进行 DHCP 保留）——否则它可能会改变。
3. 在路由器中：**Port Forwarding / Virtual Servers** → 添加表中的两条规则
   （外部端口 = 内部端口，协议 TCP，内部 IP = 主机 LAN）。
4. 查找你的**公网 IP**（在主机上打开 `https://api.ipify.org`，或路由器的 "WAN IP"）。如果你的
   IP 是**动态的**，请设置 **DDNS**（在路由器中或通过 no-ip/DuckDNS），并使用 DDNS 名称代替 IP。

> 安全性：只有 gate（7440）对外监听。RDP（3389）在你用密钥确认之前
> 从外部是**关闭的**——确认后它会狭窄地打开，仅对你的 IP，约 90 秒。转发 3389 本身
> 并不授予访问权限；它只是让那个临时"窗口"能够穿过路由器。

---

## Step 3. Client — 安装并注册

1. 安装客户端：`RdpFidoClient.exe`（配套的 `RdpFidoGate.exe` 已包含在内）。
2. 通过 AccountServer 进行**激活**：输入你的电子邮件 → 一个代码会邮寄给你 → 输入它。
   激活宽限期为 14 天；免费版 = 最多保存 10 个会话，付费版 = 无限制。
3. **添加会话：**
   - 地址：主机的公网 IP 或 DDNS 名称（来自 Step 2），如果你在同一网络中，则为 LAN 地址。
   - Gate 端口：**7440**。
   - 输入来自 Step 1 的**一次性代码**并**注册你的 FIDO2 密钥**（触碰）。

---

## Step 4. 连接

选择会话 → **触碰密钥** → gate 验证它并**为你当前的 IP 打开 3389 约
90 秒** → 客户端启动 `mstsc` 并自动为你连接。每 30 秒 gate 会重新施加
封锁，因此该窗口保持狭窄且限定于 IP。

---

## 检查与故障排除

- 从客户端：`Test-NetConnection <public-ip-or-DDNS> -Port 7440` → 应为
  `TcpTestSucceeded : True`。如果为 `False`——则端口 7440 未被转发，或主机防火墙将其阻挡。
- 端口 **3389 在你用密钥确认之前从外部是关闭的**——这是预期的（在触碰之前不要测试它）。
- "会话无法打开"：请检查 1) gate 服务在主机上正在运行，2) **两个**端口
  都已在路由器上转发到主机当前的 LAN IP，3) 公网 IP 没有改变（若为动态，请使用 DDNS）。
- 一个路由器后有多台主机：使用不同的外部端口（例如 host-2 → 外部 7441→7440，
  3390→3389），并在客户端会话中输入这些外部端口。

---

## 卸载

在主机上，以管理员身份：`powershell -ExecutionPolicy Bypass -File Uninstall-Gate.ps1`
（移除服务，恢复防火墙规则）。然后可选择性地移除路由器上的端口转发规则。
