# RDP-FIDO-GATE — установка и настройка (по шагам)

Защищённый удалённый рабочий стол (RDP) с **обязательным подтверждением аппаратным
ключом FIDO2/WebAuthn**. Порт RDP постоянно закрыт в фаерволе и открывается **только
для вашего IP примерно на 90 секунд** после касания ключа. Требуется Windows 10 1903+
(WebAuthn + брандмауэр Windows). Хостинга нет — вы скачиваете и ставите сами.

Два компонента и их порты:

| Компонент | Где ставится | Порты |
|-----------|--------------|-------|
| **Шлюз (Gate)** | целевая машина (к которой подключаетесь) | **7440/TCP** — управление + подтверждение FIDO; **3389/TCP** — RDP (открывается по требованию) |
| **Клиент** | ваша рабочая машина | исходящие подключения к 7440 и 3389 хоста |

---

## Шаг 1. Хост — установить шлюз

1. Скачайте **[RdpFidoGate-Setup.msi](https://accounts.new-imobile.com/updates/RdpFidoGate-Setup.msi)** на целевой машине и запустите его (Windows спросит подтверждение администратора).
2. Установщик включит удалённый рабочий стол (с NLA), привяжет TLS-сертификат к порту шлюза **7440**, зарегистрирует и запустит службу шлюза. Порт RDP продолжит работать как раньше — он закроется только в момент регистрации первого ключа.
3. На последней странице установщика — **одноразовый код регистрации ключа** (действует 15 минут, есть кнопка «Копировать код»), а также адреса машины и порт шлюза.
4. **Запишите:** адрес хоста (имя / публичный IP), порт **7440** и **код**. Если код устарел, выполните `RdpFidoGate.exe code` от имени администратора.

Тихая установка (например, из системы управления): `msiexec /i RdpFidoGate-Setup.msi /qn`

---

## Шаг 2. Проброс портов на роутере (если хост за NAT/роутером) — ОБЯЗАТЕЛЬНО для доступа из интернета

Если вы подключаетесь **снаружи** (из интернета), а целевая машина стоит за домашним/офисным
роутером, то на роутере нужно **пробросить два порта** на локальный адрес хоста. Без этого
клиент не достучится ни до шлюза, ни до RDP.

Пробросить (Port Forwarding / Virtual Servers / NAT в админке роутера):

| Внешний порт | Протокол | → Внутренний IP (LAN хоста) | Внутренний порт |
|--------------|----------|-----------------------------|-----------------|
| **7440** | TCP | `192.168.x.x` (LAN-адрес хоста) | **7440** |
| **3389** | TCP | тот же LAN-адрес хоста | **3389** |

Порядок:
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. Установите клиент: `RdpFidoClient.exe` (в комплекте совместимый `RdpFidoGate.exe`).
2. **Активация** через AccountServer: программа попросит e-mail → на почту придёт код → введите его.
   14 дней льготного периода на активацию; бесплатный тариф — до 10 сохранённых сессий, платный — без лимита.
3. **Добавьте сессию:**
   - Адрес: публичный IP или DDNS-имя хоста (из шага 2), либо LAN-адрес, если вы в той же сети.
   - Порт шлюза: **7440**.
   - Введите **одноразовый код** из шага 1 и **зарегистрируйте ключ FIDO2** (касание).

---

## Шаг 4. Подключение

Выберите сессию → **коснитесь ключа** → шлюз проверит ключ и **откроет 3389 для вашего текущего
IP на ~90с** → клиент автоматически запустит `mstsc` и подключит вас. Каждые 30с шлюз
переустанавливает блокировку, так что окно всегда узкое и адресное.

---

## Проверка и диагностика

- С клиентской машины: `Test-NetConnection <публичный-IP-или-DDNS> -Port 7440` → должно быть
  `TcpTestSucceeded : True`. Если `False` — не работает проброс 7440 или брандмауэр хоста его блокирует.
- Порт **3389 снаружи закрыт до подтверждения ключом** — это нормально (проверять его до касания не нужно).
- «Не открывается сессия»: проверьте, что 1) шлюз-служба запущена на хосте, 2) на роутере проброшены
  **оба** порта на актуальный LAN-адрес хоста, 3) публичный IP не сменился (при динамическом — используйте DDNS).
- Несколько хостов за одним роутером: разведите внешние порты (например хост-2 → внешний 7441→7440,
  3390→3389) и указывайте эти внешние порты в сессии клиента.

---

## Удаление

На хосте от администратора: `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:** unpack `RdpFidoGate-Host.zip`, run `Install-Gate.ps1` 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). Reserve a static LAN IP for the host; use your public IP or a DDNS name from the client.
3. **Client:** run `RdpFidoClient.exe`, activate by e-mail (AccountServer), add a session (host public IP/DDNS,
   gate port 7440, the one-time code), register your FIDO2 key.
4. **Connect:** pick the session → touch the key → the gate opens 3389 for your IP → `mstsc` connects.

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>
