نهان / مستندات فنی و مصور v2.5.4.2

معرفی پروژه نهان

پروژه نهان (Nahan) یک راهکار توزیع ترافیک و پروکسی معکوس بدون سرور (Serverless) در بستر کلودفلر است. در این ساختار بدون نیاز به تهیه سرور مجازی شخصی (VPS)، با استفاده از معماری لبه کلودفلر و پایگاه داده با کارایی بالای SQLite D1، ترافیک شبکه‌ی کاربران به صورتی همگام و ایمن در بستر اینترنت هدایت می‌شود.

مراحل نصب گام‌به‌گام مصور (Interactive Mockups)

بخش اول: ساخت پایگاه داده D1 کلودفلر

گام اول: منوی ناوبری و رفتن به بخش دیتابیس D1

در پنل کلودفلر، منوی کناری را باز کرده و ابتدا از شاخه Storage & databases گزینه‌ی D1 SQLite Database را انتخاب کنید.

dash.cloudflare.com
Build
Compute
Storage & databases
D1 SQLite Database
بخش پایگاه داده D1 کلودفلر

گام دوم: ایجاد و ساخت دیتابیس نو

در صفحه دیتابیس D1، بر روی دکمه‌ی اختصاصی Create Database کلیک نمایید.

D1 Databases
...
📁

گام سوم: نام‌گذاری دیتابیس بر مبنای قوانین نام کاربری

در فیلد Name نام دیتابیس خود را با حروف کوچک انگلیسی وارد کرده و بر روی کلید آبی رنگ Create کلیک کنید.

Database name can only contain lowercase letters (a-z), numbers (0-9), underscores (_), and hyphens (-)

بخش دوم: ساخت نرم‌افزار لبه (Worker)

گام اول: ساخت اپلیکیشن ورکر جدید

از منوی کناری به بخش Compute -> Workers & Pages رفته و روی دکمه‌ی آبی رنگ Create application کلیک کنید.

Workers & Pages

Build & deploy serverless functions, sites, and full-stack applications.

گام دوم: انتخاب قالب پایه و دپلو اولیه

بر روی دکمه‌ی قالب پیش‌فرض یعنی Start with Hello World! کلیک نمایید. در مرحله بعد نام ورکر را تعیین نموده و روی دکمه آبی رنگ Deploy کلیک کنید.

Ship something new
🐈 Connect GitHub
🟢 Start with Hello World!
⚙️ Select a template

بخش سوم: اتصال (Bind) پایگاه داده به Worker

گام اول: ورود به بخش تنظیمات Bindings ورکر

پس از اتمام دپلو اولیه، در داشبورد ورکر خود وارد زبانه Settings و زیرمنوی Bindings شده، و بر روی کلید Add binding کلیک نمایید.

OverviewMetricsDeployments Bindings

گام دوم: تعریف متغیر IOT_DB و پیوند دیتابیس D1

از منوی کشویی نوع بایندینگ را بر روی گزینه D1 database قرار داده و فیلدها را مطابق ماکاپ زیر پر کرده و روی دکمه‌ی آبی رنگ Add Binding کلیک نمایید.

Add a D1 database binding
IOT_DB

The name used to refer to this binding.

iot_db

ورود اولیه به سیستم و امنیت

پس از جایگذاری کدهای اصلی در ادیتور آنلاین و دپلو کردن، برای ورود به پنل باید عبارت زیر را به انتهای آدرس دامنه‌ی ورکر خود اضافه کنید:

/sync/dash

کلمه عبور اولیه برای ورود به پنل، عبارت admin با حروف کوچک است که باید بلافاصله پس از اولین ورود موفقیت‌آمیز، جهت امنیت از تنظیمات پنل تغییر داده شود.

تب نقاط اتصال و اشتراک هوشمند

سربرگ نقاط اتصال حاوی اطلاعات اتصالات و آدرس‌های ساب‌اسکریپشن هر مشترک است. در نسخه‌های جدیدتر، قالب‌های مجزای قدیمی آلفا، بتا و گاما حذف شده و همگی در **یک لینک اشتراک همگانی واحد (Universal Sync URL)** ادغام شده‌اند.

🌍 قابلیت تشخیص هوشمند کلاینت:

این لینک ساب هوشمند، کلاینت متصل شده (نظیر Clash، Sing-Box، Shadowrocket و غیره) را از روی امضای مرورگر تشخیص داده و کدهای متناسب با هسته آن نرم‌افزار را صادر می‌کند.

تنظیمات پیشرفته و قابلیت‌های کلاستر

در تب تنظیمات پیشرفته، متغیرهای متعددی جهت شخصی‌سازی رفتارهای لایه عبور شبکه طراحی شده است:

نودهای موازی (Slave Nodes):

امکان تعریف دامنه‌ی سایر ورکرهای کمکی جهت همگام‌سازی و همسان‌سازی خودکار تنظیمات از نود مادر.

استراتژی نام‌گذاری کانفیگ‌ها:

تغییر شیوه‌ی درج پورت، شناسه کاربر، نام دامنه یا پیشوندهای سفارشی در کلاینت نهایی.

بهینه‌سازهای TCP Fast Open و ECH:

افزایش سرعت هندشیک اولیه و پنهان‌سازی اطلاعات SNI ارسالی به مقصد کلودفلر.

یکپارچه‌سازی ربات تلگرام:

قابلیت اتصال ربات اختصاصی جهت کنترل مصرف، جستجوی کاربران و مانیتورینگ پنل.

مدیریت کاربران و قطع خودکار

یکی از کاربردی‌ترین قابلیت‌های ارائه‌شده در نسخه ۲.۵.۴.۲، سیستم **توقف اتوماتیک حساب‌های مصرفی و منقضی‌شده (Auto-Disable)** است.

زمانی که ترافیک کلی مصرف‌شده یک کاربر از سقف مجاز فراتر رود یا انقضای زمانی وی به اتمام برسد، پایگاه داده SQLite D1 بلافاصله وضعیت آن کاربر را به صورت خودکار به حالت غیرفعال تغییر می‌دهد تا از بار اضافی ترافیکی ورکر جلوگیری شود.

ابزار اختصاصی دریافت و مبهم‌سازی کدهای ورکر

در این بخش می‌توانید آخرین نسخه فایل اصلی را از گیت‌هاب دریافت کنید، آن را مشاهده نموده و با متود رمزنگاری ماژولار و بایت‌شفتینگ پیشرفته UTF-8، مبهم‌سازی (Obfuscate) کنید. این ابزار قادر است کدهای هر ورکری را به صورت پویا با ساختار کلودفلر همگام‌سازی کند.

سورس کد اصلی ورکر (_worker.js)
کدهای خروجی مبهم‌سازی شده (تضمینی کلودفلر)

💡 مکانیزم فنی مبهم‌سازی ماژولار و بایت‌شفتینگ چطور کار می‌کند؟

این ابزار ابتدا به طور خودکار دستورات استاتیک `import` را در هر ورکری شناسایی و پیوندهای خروجی آن‌ها (Bindings) را استخراج می‌کند. ایمپورت‌ها به بالای ساختار لودر نهایی منتقل می‌شوند و پیوندها به عنوان پارامتر ورودی به بدنه رمزگشایی صادر می‌گردند. سورس‌کد با موتور بومی مرورگر (`TextEncoder`) به آرایه‌ای از بایت‌های خام UTF-8 تبدیل شده و پس از اعمال شیفت کلید تصادفی XOR، به صورت هگزادسیمال بسته‌بندی می‌شود. در نهایت گیت‌وی با کلاس استاندارد `TextDecoder` بایت‌ها را بدون هیچ‌گونه به هم ریختگی به کدهای اصلی بازمی‌گرداند و به کمک `new Function` اجرا می‌کند. همچنین، برای رفع تداخل با ساختار متغیرهای خارج از ماژول، ساختار `export default` در انتهای پردازش به انتهای بدنه اصلی الحاق (Append) می‌شود تا از وقوع ReferenceError جلوگیری شود.

با موفقیت انجام شد!