# RDP-FIDO-GATE — instalacja i konfiguracja (krok po kroku)

Bezpieczny pulpit zdalny (RDP) z **obowiązkową bramką sprzętowego klucza FIDO2/WebAuthn**. Port RDP
przez cały czas pozostaje zablokowany na zaporze i otwiera się **tylko dla Twojego IP, na około 90 sekund**, po dotknięciu
klucza. Wymaga Windows 10 1903+ (WebAuthn + Windows Firewall). Nie ma usługi hostowanej — pobierasz
i instalujesz to samodzielnie.

Dwa komponenty i ich porty:

| Komponent | Gdzie działa | Porty |
|-----------|---------------|-------|
| **Gate** | maszyna docelowa (komputer, z którym się łączysz) | **7440/TCP** — sterowanie + potwierdzenie FIDO; **3389/TCP** — RDP (otwierany na żądanie) |
| **Client** | Twoja maszyna | połączenia wychodzące do portów 7440 i 3389 hosta |
| **FIDO Stream** (opcjonalnie) | host | **7441/UDP** — wideo, dźwięk i wejście trybu niskich opóźnień; otwierany na sesję, tylko dla Twojego IP |

---

## Step 1. Host — instalacja bramki

1. Pobierz **[RdpFido-Setup.exe](https://accounts.new-imobile.com/updates/RdpFido-Setup.exe)** na maszynie docelowej, uruchom go i wybierz **Host** (Windows poprosi o potwierdzenie administratora). Instaluje on bramkę; możesz też pobrać bezpośrednio **[RdpFidoGate-Setup.msi](https://accounts.new-imobile.com/updates/RdpFidoGate-Setup.msi)**.
2. Instalator włącza Remote Desktop (z NLA), wiąże certyfikat TLS z portem bramki **7440** oraz rejestruje i uruchamia usługę bramki. Port RDP działa dalej jak dotychczas — zamknie się dopiero przy rejestracji pierwszego klucza.
3. Ostatnia strona instalatora pokazuje **jednorazowy kod rejestracji klucza** (ważny 15 minut, z przyciskiem „Kopiuj kod”), a także adresy maszyny i port bramki.
4. **Zapisz:** adres hosta (nazwa / publiczne IP), port **7440** oraz **kod**. Jeśli kod wygasł, uruchom `RdpFidoGate.exe code` jako administrator.

Cicha instalacja (np. z systemu zarządzania): `msiexec /i RdpFidoGate-Setup.msi /qn`

Bez nadzoru z użyciem połączonego instalatora: `RdpFido-Setup.exe host`

---

## Step 2. Przekierowanie portów w routerze (jeśli host jest za NAT/routerem) — WYMAGANE do dostępu z internetu

Jeśli łączysz się **z internetu**, a maszyna docelowa znajduje się za routerem domowym/biurowym, musisz
**przekierować dwa porty** na routerze do adresu LAN hosta. Bez tego klient nie dotrze
ani do bramki, ani do RDP.

Przekieruj (Port Forwarding / Virtual Servers / NAT w panelu administracyjnym routera):

| Port zewnętrzny | Protokół | → IP wewnętrzne (LAN hosta) | Port wewnętrzny |
|---------------|----------|--------------------------|---------------|
| **7440** | TCP | `192.168.x.x` (IP LAN hosta) | **7440** |
| **3389** | TCP | ten sam IP LAN hosta | **3389** |
| **7441** | UDP | ten sam IP LAN hosta | **7441** — tylko jeśli używasz FIDO Stream z internetu |

Procedura:
1. Znajdź IP LAN hosta: `ipconfig` → "Adres IPv4" (np. `192.168.1.50`).
2. **Zarezerwuj ten adres** dla hosta (rezerwacja DHCP według MAC w routerze) — w przeciwnym razie może się zmienić.
3. W routerze: **Port Forwarding / Virtual Servers** → dodaj dwie reguły z tabeli
   (port zewnętrzny = port wewnętrzny, protokół TCP, IP wewnętrzne = LAN hosta).
4. Znajdź swoje **publiczne IP** (na hoście otwórz `https://api.ipify.org` lub "WAN IP" routera). Jeśli Twoje
   IP jest **dynamiczne**, skonfiguruj **DDNS** (w routerze lub przez no-ip/DuckDNS) i używaj nazwy DDNS zamiast IP.

> Bezpieczeństwo: tylko bramka (7440) nasłuchuje na zewnątrz. RDP (3389) jest **zamknięty** z zewnątrz, dopóki nie
> potwierdzisz kluczem — wtedy otwiera się wąsko, tylko dla Twojego IP, na ~90s. Przekierowanie 3389 samo w sobie nie
> udziela dostępu; pozwala jedynie tymczasowemu "oknu" przejść przez router.

---

## Step 3. Client — instalacja i rejestracja

1. Zainstaluj klienta: uruchom **[RdpFido-Setup.exe](https://accounts.new-imobile.com/updates/RdpFido-Setup.exe)** i wybierz **Client** (dla użytkownika, bez uprawnień administratora), albo bezpośrednio **[RdpFidoClient-Setup.msi](https://accounts.new-imobile.com/updates/RdpFidoClient-Setup.msi)**.
2. **Aktywacja** przez AccountServer: podaj swój e-mail → kod zostanie wysłany do Ciebie mailem → wpisz go.
   14-dniowy okres karencji aktywacji; poziom darmowy = do 10 zapisanych sesji, płatny = bez limitu.
3. **Dodawanie sesji:**
   - Adres: publiczne IP lub nazwa DDNS hosta (ze Step 2), albo adres LAN, jeśli jesteś w tej samej sieci.
   - Port bramki: **7440**.
   - Protokół: **RDP (mstsc)** lub **FIDO Stream** — zobacz Step 5.
   - Wpisz **kod jednorazowy** ze Step 1 i **zarejestruj swój klucz FIDO2** (dotknij).

---

## Step 4. Połączenie

Wybierz sesję → **dotknij klucza** → bramka go weryfikuje i **otwiera 3389 dla Twojego bieżącego IP na
~90s** → klient uruchamia `mstsc` i łączy Cię automatycznie. Co 30s bramka ponownie egzekwuje
blokadę, więc okno pozostaje wąskie i ograniczone do IP.

---

## Step 5 (opcjonalny). FIDO Stream — tryb niskich opóźnień do gier i wideo

FIDO Stream to drugi tryb połączenia obok RDP: ekran i dźwięk hosta oraz Twoje wejście idą przez UDP z kodowaniem sprzętowym, dzięki czemu opóźnienie „od kliknięcia do obrazu” w sieci LAN wynosi około 25–45 ms. Otwiera go to samo dotknięcie klucza; bramka otwiera UDP 7441 tylko dla Twojego IP i tylko na czas sesji. Nic dodatkowego nie jest instalowane: agent hosta jest wewnątrz bramki, a przeglądarka wewnątrz klienta (bramka w wersji 1.15 lub nowszej na hoście).

1. W ustawieniach sesji wybierz **Protokół: FIDO Stream (gry, niskie opóźnienia)**.
2. Przy pierwszej próbie zostaw ustawienia na **Automatycznie**. Co oznaczają:
   - **Balans** — suwak od **Słabe łącze** (niższa rozdzielczość, HEVC, więcej korekcji błędów) do **Słabe komputery** (tylko koder sprzętowy, najszybszy preset, natywna rozdzielczość); **Dostosuj balans automatycznie** przesuwa go w stronę bieżącego wąskiego gardła.
   - **Dźwięk hosta** i **Wysyłaj mój mikrofon do hosta** — dźwięk w obu kierunkach.
   - **Przechwyć mysz przy starcie (do gier)** — względny ruch myszy dla strzelanek.
   - **Połączenie** — **Automatycznie (przebicie przez NAT)**, **Ten komputer łączy się z hostem** (wymaga przekierowania 7441/UDP do hosta) lub **Host łączy się z tym komputerem** (gdy Twój komputer ma publiczny adres).
   - **Koder (host)** — Automatycznie / NVIDIA NVENC (bezpośrednio) / Sprzętowy (dowolne GPU) / Programowy (CPU); **Dekoder** — Automatycznie / Sprzętowy (GPU) / Programowy (CPU).
3. Połącz się jak zwykle: wybierz sesję → dotknij klucza → otworzy się okno strumienia.

Skróty klawiszowe w oknie strumienia: **Ctrl+Alt+Home** przechwytuje/zwalnia mysz, **Ctrl+Alt+Enter** przełącza pełny ekran, **Ctrl+Alt+End** rozłącza.

Wymagania: Windows 10 1903+ po obu stronach; dla najniższych opóźnień GPU z koderem sprzętowym na hoście (NVIDIA, Intel lub AMD). HEVC jest używany tylko wtedy, gdy klient ma dekoder GPU; w przeciwnym razie strumień automatycznie przechodzi na H.264. Diagnostyka na hoście (jako administrator): `RdpFidoGate.exe stream encoders` wyświetla dostępne kodery, `RdpFidoGate.exe stream encoders --bench` mierzy każdy z nich, `RdpFidoGate.exe stream selftest` uruchamia przechwytywanie → kodowanie → dekodowanie bez sieci. Szczegóły są zapisywane w `gate.log` na hoście i `client.log` na kliencie.

---

## Sprawdzenie i rozwiązywanie problemów

- Z klienta: `Test-NetConnection <public-ip-or-DDNS> -Port 7440` → powinno dać
  `TcpTestSucceeded : True`. Jeśli `False` — port 7440 nie jest przekierowany albo zapora hosta go blokuje.
- Port **3389 jest zamknięty z zewnątrz, dopóki nie potwierdzisz kluczem** — to jest oczekiwane (nie testuj go przed dotknięciem).
- "Sesja się nie otwiera": sprawdź, czy 1) usługa bramki działa na hoście, 2) **oba** porty
  są przekierowane na routerze do bieżącego IP LAN hosta, 3) publiczne IP się nie zmieniło (użyj DDNS, jeśli jest dynamiczne).
- Kilka hostów za jednym routerem: użyj różnych portów zewnętrznych (np. host-2 → zewnętrzny 7441→7440,
  3390→3389) i wpisz te porty zewnętrzne w sesji klienta.
- FIDO Stream nie uruchamia się: bramka na hoście musi być w wersji 1.15 lub nowszej (klient o tym informuje), a do dostępu z internetu albo 7441/UDP jest przekierowany do hosta, albo sesja używa **Host łączy się z tym komputerem**.

---

## Odinstalowanie

Na hoście, jako administrator: `powershell -ExecutionPolicy Bypass -File Uninstall-Gate.ps1`
(usuwa usługę, przywraca reguły zapory). Następnie opcjonalnie usuń reguły przekierowania portów na routerze.
