# 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로의 아웃바운드 연결 |
| **FIDO Stream**(선택 사항) | 호스트 | **7441/UDP** — 저지연 모드의 비디오, 오디오 및 입력; 세션마다, 오직 당신의 IP에 대해서만 열림 |

---

## Step 1. Host — 게이트 설치

1. 대상 컴퓨터에서 **[RdpFido-Setup.exe](https://accounts.new-imobile.com/updates/RdpFido-Setup.exe)** 를 다운로드하여 실행하고 **Host**를 선택합니다(Windows가 관리자 확인을 요청합니다). 이것이 게이트를 설치합니다. **[RdpFidoGate-Setup.msi](https://accounts.new-imobile.com/updates/RdpFidoGate-Setup.msi)** 를 직접 다운로드할 수도 있습니다.
2. 설치 프로그램은 Remote Desktop(NLA 포함)을 활성화하고, 게이트 포트 **7440**에 TLS 인증서를 바인딩하며, 게이트 서비스를 등록하고 시작합니다. RDP 포트는 이전처럼 계속 작동하며, 첫 번째 키를 등록하는 순간에만 닫힙니다.
3. 설치 프로그램의 마지막 페이지에 **일회용 키 등록 코드**(15분간 유효, "코드 복사" 버튼 포함)와 컴퓨터 주소 및 게이트 포트가 표시됩니다.
4. **기록해 두세요:** 호스트 주소(이름 / 공용 IP), 포트 **7440**, **코드**. 코드가 만료되면 관리자 권한으로 `RdpFidoGate.exe code`를 실행하세요.

자동 설치(예: 관리 시스템에서): `msiexec /i RdpFidoGate-Setup.msi /qn`

통합 설치 프로그램으로 무인 설치: `RdpFido-Setup.exe host`

---

## 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** |
| **7441** | UDP | 동일한 호스트 LAN IP | **7441** — 인터넷에서 FIDO Stream을 사용하는 경우에만 |

절차:
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. 클라이언트를 설치합니다: **[RdpFido-Setup.exe](https://accounts.new-imobile.com/updates/RdpFido-Setup.exe)** 를 실행하고 **Client**를 선택하거나(사용자별 설치, 관리자 권한 불필요), **[RdpFidoClient-Setup.msi](https://accounts.new-imobile.com/updates/RdpFidoClient-Setup.msi)** 를 직접 사용합니다.
2. AccountServer를 통한 **활성화**: 이메일을 입력 → 코드가 메일로 발송됨 → 그것을 입력합니다.
   14일의 활성화 유예 기간; 무료 등급 = 저장 세션 최대 10개, 유료 = 무제한.
3. **세션 추가:**
   - 주소: 호스트의 공용 IP 또는 DDNS 이름(Step 2에서), 또는 같은 네트워크에 있는 경우 LAN 주소.
   - 게이트 포트: **7440**.
   - 프로토콜: **RDP (mstsc)** 또는 **FIDO Stream** — Step 5 참조.
   - Step 1의 **일회용 코드**를 입력하고 **당신의 FIDO2 키를 등록**합니다(터치).

---

## Step 4. 연결

세션 선택 → **키 터치** → 게이트가 이를 검증하고 **당신의 현재 IP에 대해 3389을 약
90초 동안 엽니다** → 클라이언트가 `mstsc`를 실행하고 자동으로 연결합니다. 30초마다 게이트는
차단을 다시 적용하므로, 창은 좁고 IP로 제한된 상태로 유지됩니다.

---

## Step 5 (선택 사항). FIDO Stream — 게임과 비디오를 위한 저지연 모드

FIDO Stream은 RDP 옆에 있는 두 번째 연결 모드입니다. 호스트의 화면, 오디오 및 당신의 입력이 하드웨어 인코딩을 사용해 UDP로 전송되므로, LAN에서의 "클릭에서 화면까지" 지연은 약 25–45 ms입니다. 동일한 키 터치로 열리며, 게이트는 UDP 7441을 오직 당신의 IP에 대해서만, 그리고 해당 세션 동안만 엽니다. 추가로 설치할 것은 없습니다. 호스트 에이전트는 게이트 안에, 뷰어는 클라이언트 안에 있습니다(호스트의 게이트 버전 1.15 이상).

1. 세션 설정에서 **프로토콜: FIDO Stream (게임, 저지연)** 을 선택합니다.
2. 첫 시도에서는 설정을 **자동**으로 둡니다. 각 항목의 의미:
   - **균형** — **열악한 회선**(낮은 해상도, HEVC, 더 많은 오류 정정)부터 **저사양 PC**(하드웨어 인코더만, 가장 빠른 프리셋, 기본 해상도)까지의 슬라이더; **균형을 자동으로 조정**은 현재 병목 쪽으로 슬라이더를 이동시킵니다.
   - **호스트 오디오** 및 **내 마이크를 호스트로 보내기** — 양방향 소리.
   - **시작 시 마우스 캡처(게임용)** — 슈팅 게임을 위한 상대적 마우스 이동.
   - **연결** — **자동(NAT 통과)**, **이 컴퓨터가 호스트로 연결**(7441/UDP가 호스트로 포워딩되어야 함) 또는 **호스트가 이 컴퓨터로 연결**(당신의 PC에 공용 주소가 있는 경우).
   - **인코더(호스트)** — 자동 / NVIDIA NVENC(직접) / 하드웨어(모든 GPU) / 소프트웨어(CPU); **디코더** — 자동 / 하드웨어(GPU) / 소프트웨어(CPU).
3. 평소처럼 연결합니다: 세션 선택 → 키 터치 → 스트림 창이 열립니다.

스트림 창의 단축키: **Ctrl+Alt+Home** 마우스 캡처/해제, **Ctrl+Alt+Enter** 전체 화면 전환, **Ctrl+Alt+End** 연결 끊기.

요구 사항: 양쪽 모두 Windows 10 1903+; 최저 지연을 위해서는 호스트에 하드웨어 인코더가 있는 GPU(NVIDIA, Intel 또는 AMD). HEVC는 클라이언트에 GPU 디코더가 있을 때만 사용되며, 그렇지 않으면 스트림은 자동으로 H.264로 대체됩니다. 호스트에서의 진단(관리자 권한으로): `RdpFidoGate.exe stream encoders`는 사용 가능한 인코더를 나열하고, `RdpFidoGate.exe stream encoders --bench`는 각각을 측정하며, `RdpFidoGate.exe stream selftest`는 네트워크 없이 캡처 → 인코딩 → 디코딩을 실행합니다. 세부 정보는 호스트의 `gate.log`와 클라이언트의 `client.log`에 기록됩니다.

---

## 확인 및 문제 해결

- 클라이언트에서: `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), 그 외부 포트를 클라이언트 세션에 입력합니다.
- FIDO Stream이 시작되지 않음: 호스트의 게이트는 버전 1.15 이상이어야 하며(클라이언트가 그렇게 알려줍니다), 인터넷 접근의 경우 7441/UDP가 호스트로 포워딩되어 있거나 세션이 **호스트가 이 컴퓨터로 연결**을 사용해야 합니다.

---

## 제거

호스트에서, 관리자 권한으로: `powershell -ExecutionPolicy Bypass -File Uninstall-Gate.ps1`
(서비스를 제거하고 방화벽 규칙을 복원합니다). 그런 다음 필요에 따라 라우터의 포트 포워딩 규칙을 제거합니다.
