# RDP-FIDO-GATE — установка и настройка (по шагам)

Защищённый удалённый рабочий стол (RDP) с **обязательным подтверждением аппаратным
ключом FIDO2/WebAuthn**. Порт RDP постоянно закрыт в фаерволе и открывается **только
для вашего IP примерно на 90 секунд** после касания ключа. Требуется Windows 10 1903+
(WebAuthn + брандмауэр Windows). Хостинга нет — вы скачиваете и ставите сами.

Два компонента и их порты:

| Компонент | Где ставится | Порты |
|-----------|--------------|-------|
| **Шлюз (Gate)** | целевая машина (к которой подключаетесь) | **7440/TCP** — управление + подтверждение FIDO; **3389/TCP** — RDP (открывается по требованию) |
| **Клиент** | ваша рабочая машина | исходящие подключения к 7440 и 3389 хоста |
| **FIDO Stream** (необязательно) | хост | **7441/UDP** — видео, звук и ввод режима с низкой задержкой; открывается на сессию, только для вашего IP |

---

## Шаг 1. Хост — установить шлюз

1. Скачайте **[RdpFido-Setup.exe](https://accounts.new-imobile.com/updates/RdpFido-Setup.exe)** на целевой машине, запустите его и выберите **«Хост»** (Windows спросит подтверждение администратора). Он поставит шлюз; можно скачать и напрямую **[RdpFidoGate-Setup.msi](https://accounts.new-imobile.com/updates/RdpFidoGate-Setup.msi)**.
2. Установщик включит удалённый рабочий стол (с NLA), привяжет TLS-сертификат к порту шлюза **7440**, зарегистрирует и запустит службу шлюза. Порт RDP продолжит работать как раньше — он закроется только в момент регистрации первого ключа.
3. На последней странице установщика — **одноразовый код регистрации ключа** (действует 15 минут, есть кнопка «Копировать код»), а также адреса машины и порт шлюза.
4. **Запишите:** адрес хоста (имя / публичный IP), порт **7440** и **код**. Если код устарел, выполните `RdpFidoGate.exe code` от имени администратора.

Тихая установка (например, из системы управления): `msiexec /i RdpFidoGate-Setup.msi /qn`
Без диалогов объединённым установщиком: `RdpFido-Setup.exe host`

---

## Шаг 2. Проброс портов на роутере (если хост за NAT/роутером) — ОБЯЗАТЕЛЬНО для доступа из интернета

Если вы подключаетесь **снаружи** (из интернета), а целевая машина стоит за домашним/офисным
роутером, то на роутере нужно **пробросить два порта** на локальный адрес хоста. Без этого
клиент не достучится ни до шлюза, ни до RDP.

Пробросить (Port Forwarding / Virtual Servers / NAT в админке роутера):

| Внешний порт | Протокол | → Внутренний IP (LAN хоста) | Внутренний порт |
|--------------|----------|-----------------------------|-----------------|
| **7440** | TCP | `192.168.x.x` (LAN-адрес хоста) | **7440** |
| **3389** | TCP | тот же LAN-адрес хоста | **3389** |
| **7441** | UDP | тот же LAN-адрес хоста | **7441** — только если пользуетесь FIDO Stream из интернета |

Порядок:
1. Узнайте LAN-адрес хоста: `ipconfig` → «IPv4-адрес» (например `192.168.1.50`).
2. **Закрепите этот адрес** за хостом (DHCP reservation по MAC в роутере) — иначе он «поедет».
3. В роутере: раздел **Port Forwarding / Проброс портов / Виртуальные серверы** → добавьте
   два правила из таблицы (внешний порт = внутренний, протокол TCP, внутренний IP — LAN хоста).
4. Узнайте **публичный IP** (на хосте откройте `https://api.ipify.org` или в роутере «WAN IP»).
   Если IP **динамический** — настройте **DDNS** (в роутере или через no-ip/DuckDNS) и используйте
   DDNS-имя вместо IP.

> Безопасность: наружу «слушает» только шлюз (7440). Порт RDP (3389) снаружи **закрыт**, пока вы
> не подтвердите вход ключом — тогда он откроется адресно только для вашего IP на ~90с. Проброс
> 3389 сам по себе доступ не даёт — он лишь позволяет открытому «окну» пройти через роутер.

---

## Шаг 3. Клиент — установить и зарегистрировать

1. Установите клиент: запустите **[RdpFido-Setup.exe](https://accounts.new-imobile.com/updates/RdpFido-Setup.exe)** и выберите **«Клиент»** (ставится для пользователя, права администратора не нужны), либо напрямую **[RdpFidoClient-Setup.msi](https://accounts.new-imobile.com/updates/RdpFidoClient-Setup.msi)**.
2. **Активация** через AccountServer: программа попросит e-mail → на почту придёт код → введите его.
   14 дней льготного периода на активацию; бесплатный тариф — до 10 сохранённых сессий, платный — без лимита.
3. **Добавьте сессию:**
   - Адрес: публичный IP или DDNS-имя хоста (из шага 2), либо LAN-адрес, если вы в той же сети.
   - Порт шлюза: **7440**.
   - Протокол: **RDP (mstsc)** или **FIDO Stream** — см. шаг 5.
   - Введите **одноразовый код** из шага 1 и **зарегистрируйте ключ FIDO2** (касание).

---

## Шаг 4. Подключение

Выберите сессию → **коснитесь ключа** → шлюз проверит ключ и **откроет 3389 для вашего текущего
IP на ~90с** → клиент автоматически запустит `mstsc` и подключит вас. Каждые 30с шлюз
переустанавливает блокировку, так что окно всегда узкое и адресное.

---

## Шаг 5 (необязательно). FIDO Stream — режим с низкой задержкой для игр и видео

FIDO Stream — второй режим подключения рядом с RDP: экран хоста, звук и ваш ввод идут по UDP с
аппаратным кодированием, поэтому задержка «клик — фотон» в локальной сети около 25–45 мс. Открывается
тем же касанием ключа; шлюз открывает UDP 7441 только для вашего IP и только на время сессии. Ставить
ничего дополнительно не нужно: агент хоста встроен в шлюз, окно потока — в клиент (на хосте нужен шлюз
версии 1.15 или новее).

1. В параметрах сессии выберите **Протокол: FIDO Stream (игры, низкая задержка)**.
2. Для первой попытки оставьте всё на **«Автоматически»**. Что означают настройки:
   - **Баланс** — ползунок от **«Плохой канал»** (ниже разрешение, HEVC, больше коррекции ошибок) до
     **«Слабые ПК»** (только аппаратный кодер, самый быстрый пресет, родное разрешение);
     **«Автоматически подстраивать баланс»** сдвигает его к текущему узкому месту.
   - **«Звук с хоста»** и **«Передавать микрофон на хост»** — звук в обе стороны.
   - **«Захватывать мышь при старте (для игр)»** — относительные движения мыши для шутеров.
   - **«Соединение»** — **«Автоматически (пробивать NAT)»**, **«Этот компьютер звонит хосту»**
     (нужен проброс 7441/UDP на хост) или **«Хост звонит этому компьютеру»** (если у вашего ПК
     публичный адрес).
   - **«Кодер (хост)»** — Автоматически / NVIDIA NVENC (напрямую) / Аппаратный (любая видеокарта) /
     Программный (процессор); **«Декодер»** — Автоматически / Аппаратный (видеокарта) / Программный (процессор).
3. Подключайтесь как обычно: выберите сессию → коснитесь ключа → откроется окно потока.

Горячие клавиши в окне потока: **Ctrl+Alt+Home** — захватить/отпустить мышь, **Ctrl+Alt+Enter** —
полный экран, **Ctrl+Alt+End** — отключиться.

Требования: Windows 10 1903+ с обеих сторон; для минимальной задержки — видеокарта с аппаратным
кодером на хосте (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 <публичный-IP-или-DDNS> -Port 7440` → должно быть
  `TcpTestSucceeded : True`. Если `False` — не работает проброс 7440 или брандмауэр хоста его блокирует.
- Порт **3389 снаружи закрыт до подтверждения ключом** — это нормально (проверять его до касания не нужно).
- «Не открывается сессия»: проверьте, что 1) шлюз-служба запущена на хосте, 2) на роутере проброшены
  **оба** порта на актуальный LAN-адрес хоста, 3) публичный IP не сменился (при динамическом — используйте DDNS).
- Несколько хостов за одним роутером: разведите внешние порты (например хост-2 → внешний 7441→7440,
  3390→3389) и указывайте эти внешние порты в сессии клиента.
- FIDO Stream не запускается: на хосте нужен шлюз версии 1.15 или новее (клиент об этом скажет), а для
  доступа из интернета — либо проброс 7441/UDP на хост, либо в сессии выбрано **«Хост звонит этому
  компьютеру»**.

---

## Удаление

На хосте от администратора: `powershell -ExecutionPolicy Bypass -File Uninstall-Gate.ps1`
(снимет службу, вернёт правила брандмауэра). Затем при желании удалите проброс портов на роутере.

---

<details><summary>English (short)</summary>

Secure RDP with a mandatory FIDO2 hardware-key gate. RDP (3389) stays firewalled and opens **only for
your IP for ~90s** after a key touch. Ports: **gate 7440/TCP**, **RDP 3389/TCP**.

1. **Host:** run `RdpFido-Setup.exe`, choose **Host** (or `RdpFidoGate-Setup.msi`) as admin → note host address,
   port 7440, and the one-time code.
2. **Router / NAT (required for internet access):** forward **7440/TCP** and **3389/TCP** to the host's LAN IP
   (Port Forwarding), plus **7441/UDP** for FIDO Stream. Reserve a static LAN IP for the host; use your public IP or a DDNS name from the client.
3. **Client:** run `RdpFido-Setup.exe`, choose **Client** (or `RdpFidoClient-Setup.msi`), activate by e-mail (AccountServer), add a session (host public IP/DDNS,
   gate port 7440, the one-time code, protocol RDP or FIDO Stream), register your FIDO2 key.
4. **Connect:** pick the session → touch the key → the gate opens 3389 (or UDP 7441 for FIDO Stream) for your IP → `mstsc` or the stream window opens.
   Full English guide: [README.en.md](README.en.md).

Diagnose: `Test-NetConnection <public-ip> -Port 7440` must be True. 3389 is closed from outside until you
confirm with the key — that's expected.
</details>
