# RDP-FIDO-GATE — 설치 및 구성 (단계별)

**필수 FIDO2/WebAuthn 하드웨어 키 게이트**가 있는 안전한 원격 데스크톱(RDP). RDP 포트는
항상 방화벽으로 차단된 상태로 유지되며, 키를 터치한 후 **오직 당신의 IP에 대해서만, 약 90초 동안** 열립니다.
Windows 10 1903+(WebAuthn + Windows Firewall)가 필요합니다. 호스팅 서비스는 없습니다——당신이 직접
다운로드하여 설치합니다.

두 가지 구성 요소와 해당 포트:

| 구성 요소 | 실행 위치 | 포트 |
|-----------|---------------|-------|
| **Gate** | 대상 컴퓨터(연결하려는 PC) | **7440/TCP** — 제어 + FIDO 확인; **3389/TCP** — RDP(필요 시 열림) |
| **Client** | 당신의 컴퓨터 | 호스트의 7440 및 3389로의 아웃바운드 연결 |

---

## Step 1. Host — 게이트 설치

1. 대상 컴퓨터에서 `RdpFidoGate-Host.zip`을 다운로드하여 압축을 풉니다.
2. **관리자 권한으로** 실행합니다:
   ```powershell
   powershell -ExecutionPolicy Bypass -File Install-Gate.ps1
   ```
   (기본 게이트 포트 7440 및 약 90초의 접근 창; `-Port` 및 `-GrantSeconds`를 설정할 수 있습니다).
3. 이 스크립트는 Remote Desktop(NLA 포함)을 활성화하고, **방화벽에서 3389을 닫으며**, **7440**에서 게이트
   서비스를 시작하고, 첫 번째 키 등록을 위한 **일회용 코드**를 출력합니다.
4. **기록해 두세요:** 호스트 주소(이름 / 공용 IP), 포트 **7440**, 그리고 일회용 **코드**.

---

## Step 2. 라우터 포트 포워딩 (호스트가 NAT/라우터 뒤에 있는 경우) — 인터넷 접근에 필수

**인터넷에서** 연결하고 대상 컴퓨터가 가정/사무실 라우터 뒤에 있는 경우, 라우터에서
호스트의 LAN 주소로 **두 개의 포트를 포워딩**해야 합니다. 이것이 없으면 클라이언트는
게이트에도 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를 통해), IP 대신 DDNS 이름을 사용합니다.

> 보안: 외부로 수신 대기하는 것은 게이트(7440)뿐입니다. RDP(3389)는 당신이 키로 확인할 때까지
> 외부에서 **닫혀** 있습니다——확인하면 당신의 IP에 대해서만, 약 90초 동안 좁게 열립니다. 3389을 포워딩하는 것
> 자체로는 접근이 허용되지 않습니다. 단지 임시 "창"이 라우터를 통과할 수 있게 할 뿐입니다.

---

## Step 3. Client — 설치 및 등록

1. 클라이언트를 설치합니다: `RdpFidoClient.exe`(대응하는 `RdpFidoGate.exe`가 포함되어 있습니다).
2. AccountServer를 통한 **활성화**: 이메일을 입력 → 코드가 메일로 발송됨 → 그것을 입력합니다.
   14일의 활성화 유예 기간; 무료 등급 = 저장 세션 최대 10개, 유료 = 무제한.
3. **세션 추가:**
   - 주소: 호스트의 공용 IP 또는 DDNS 이름(Step 2에서), 또는 같은 네트워크에 있는 경우 LAN 주소.
   - 게이트 포트: **7440**.
   - Step 1의 **일회용 코드**를 입력하고 **당신의 FIDO2 키를 등록**합니다(터치).

---

## Step 4. 연결

세션 선택 → **키 터치** → 게이트가 이를 검증하고 **당신의 현재 IP에 대해 3389을 약
90초 동안 엽니다** → 클라이언트가 `mstsc`를 실행하고 자동으로 연결합니다. 30초마다 게이트는
차단을 다시 적용하므로, 창은 좁고 IP로 제한된 상태로 유지됩니다.

---

## 확인 및 문제 해결

- 클라이언트에서: `Test-NetConnection <public-ip-or-DDNS> -Port 7440` → 
  `TcpTestSucceeded : True`가 되어야 합니다. `False`라면——포트 7440이 포워딩되지 않았거나, 호스트 방화벽이 이를 차단하는 것입니다.
- 포트 **3389은 당신이 키로 확인할 때까지 외부에서 닫혀 있습니다**——이는 정상입니다(터치 전에 테스트하지 마세요).
- "세션이 열리지 않음": 다음을 확인하세요. 1) 게이트 서비스가 호스트에서 실행 중인지, 2) **두** 포트가
  모두 라우터에서 호스트의 현재 LAN IP로 포워딩되어 있는지, 3) 공용 IP가 바뀌지 않았는지(동적이면 DDNS 사용).
- 하나의 라우터 뒤에 여러 호스트: 서로 다른 외부 포트를 사용하고(예: host-2 → 외부 7441→7440,
  3390→3389), 그 외부 포트를 클라이언트 세션에 입력합니다.

---

## 제거

호스트에서, 관리자 권한으로: `powershell -ExecutionPolicy Bypass -File Uninstall-Gate.ps1`
(서비스를 제거하고 방화벽 규칙을 복원합니다). 그런 다음 필요에 따라 라우터의 포트 포워딩 규칙을 제거합니다.
