# RDP-FIDO-GATE — نصب و پیکربندی (گام‌به‌گام)

دسکتاپ راه‌دور (RDP) امن با یک **دروازهٔ اجباری کلید سخت‌افزاری FIDO2/WebAuthn**. پورت RDP
همیشه پشت فایروال مسدود می‌ماند و **فقط برای IP شما، به مدت حدود ۹۰ ثانیه**، پس از آنکه کلید را
لمس کنید باز می‌شود. به Windows 10 1903+ (WebAuthn + Windows Firewall) نیاز دارد. هیچ سرویس میزبانی‌شده‌ای وجود ندارد — شما خودتان
آن را دانلود و نصب می‌کنید.

دو مؤلفه و پورت‌هایشان:

| مؤلفه | محل اجرا | پورت‌ها |
|-----------|---------------|-------|
| **Gate** | ماشین هدف (رایانه‌ای که به آن متصل می‌شوید) | **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 و پنجرهٔ دسترسی حدود ۹۰ ثانیه؛ می‌توانید `-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` (IP شبکهٔ LAN میزبان) | **7440** |
| **3389** | TCP | همان IP شبکهٔ LAN میزبان | **3389** |

روش کار:
1. IP شبکهٔ LAN میزبان را بیابید: `ipconfig` ← "IPv4 Address" (مثلاً `192.168.1.50`).
2. آن نشانی را برای میزبان **رزرو کنید** (رزرو DHCP بر اساس MAC در روتر) — وگرنه ممکن است تغییر کند.
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 شما، به مدت حدود ۹۰ ثانیه باز می‌شود. هدایت 3389 به‌خودی‌خود
> دسترسی نمی‌دهد؛ فقط اجازه می‌دهد "پنجرهٔ" موقت از روتر عبور کند.

---

## Step 3. Client — نصب و ثبت‌نام

1. کلاینت را نصب کنید: `RdpFidoClient.exe` (فایل متناظر `RdpFidoGate.exe` همراه آن است).
2. **فعال‌سازی** از طریق AccountServer: ایمیل خود را وارد کنید ← کدی برایتان ایمیل می‌شود ← آن را وارد کنید.
   مهلت ارفاقی فعال‌سازی ۱۴ روزه؛ سطح رایگان = تا ۱۰ نشست ذخیره‌شده، پولی = بدون محدودیت.
3. **افزودن یک نشست:**
   - نشانی: IP عمومی میزبان یا نام DDNS (از Step 2)، یا نشانی LAN اگر روی همان شبکه هستید.
   - پورت دروازه: **7440**.
   - **کد یک‌بارمصرف** از Step 1 را وارد کنید و **کلید FIDO2 خود را ثبت کنید** (لمس کنید).

---

## Step 4. اتصال

نشست را انتخاب کنید ← **کلید را لمس کنید** ← دروازه آن را بررسی می‌کند و **پورت 3389 را برای IP فعلی شما به مدت
حدود ۹۰ ثانیه باز می‌کند** ← کلاینت `mstsc` را اجرا کرده و شما را به‌طور خودکار متصل می‌کند. هر ۳۰ ثانیه دروازه
مسدودسازی را دوباره اعمال می‌کند تا پنجره محدود و مقید به IP باقی بماند.

---

## بررسی و عیب‌یابی

- از کلاینت: `Test-NetConnection <public-ip-or-DDNS> -Port 7440` ← باید
  `TcpTestSucceeded : True` باشد. اگر `False` بود — پورت 7440 هدایت نشده، یا فایروال میزبان آن را مسدود می‌کند.
- پورت **3389 تا زمانی که با کلید تأیید نکنید از بیرون بسته است** — این مورد انتظار می‌رود (پیش از لمس آن را آزمایش نکنید).
- «نشست باز نمی‌شود»: بررسی کنید که ۱) سرویس دروازه روی میزبان در حال اجراست، ۲) **هر دو** پورت
  روی روتر به IP فعلی LAN میزبان هدایت شده‌اند، ۳) IP عمومی تغییر نکرده است (اگر پویاست از DDNS استفاده کنید).
- چند میزبان پشت یک روتر: از پورت‌های خارجی متمایز استفاده کنید (مثلاً host-2 ← خارجی 7441→7440،
  3390→3389) و آن پورت‌های خارجی را در نشست کلاینت وارد کنید.

---

## حذف نصب

روی میزبان، به‌عنوان مدیر: `powershell -ExecutionPolicy Bypass -File Uninstall-Gate.ps1`
(سرویس را حذف می‌کند، قواعد فایروال را بازمی‌گرداند). سپس به‌صورت اختیاری قواعد هدایت پورت را روی روتر حذف کنید.
