Skip to content

v1.2.34 — ضد فیلتر SNI روی اینترنت‌های تازه، و تست دیلی که گیر نمی‌کند

Choose a tag to compare

@mlmvpn mlmvpn released this 12 Sep 13:55
· 34 commits to main since this release

ضد فیلتر SNI روی اینترنت‌هایی که تا امروز وصل نمی‌شد

روی یکی از دو اینترنت همراه بزرگ ایران، این بخش کار می‌کرد و روی آن یکی نه. مسیر ورودی درست بود، کانفیگ درست بود — کانفیگ‌ها قبل از تبدیل هم تست شده بودند و وصل می‌شدند — و باز هم همه‌شان «بدون پینگ» می‌زدند.

دلیلش جای دیگری بود: موتور SNI پنج اهرم دارد و برنامه فقط یکی را به آن می‌داد، آن هم با مقدار ثابت. کنار -method، موتور نوع تکه‌تکه کردن، فاصلهٔ زمانی بین تکه‌ها، ترفند TTL و نوع تزریق را هم می‌گیرد — و نوع پیش‌فرضِ تکه‌تکه کردن دقیقاً همانی است که DPI آن اپراتور می‌کشد.

اندازه‌گیری روی خود گوشی و روی خود آن خط، سه بار برای هر حالت، مقابل یک لبه و یک نام یکسان:

حالت نتیجه
بدون موتور (برای مقایسه) ✅ هر سه بار جواب داد
حالتی که تا امروز می‌رفت ❌ هر سه بار صفر بایت
تکه‌تکه کردن از نوع chunk ✅ هر سه بار جواب داد، ۱٫۲ تا ۲ ثانیه
تکه‌تکه کردن در سطح رکورد TLS ✅ هر سه بار جواب داد

سطر اول مهم‌ترین است: خط سالم بود. تقصیر تنظیمات بود.

حالا ۱۴ روش اتصال هست، و خودش انتخاب می‌کند

هر ترکیبی از آن پنج اهرم یک «روش» شده. دکمهٔ سنجش یکی‌یکی امتحان می‌کند تا اولی که روی اینترنت خود شما جواب می‌دهد پیدا شود، و بعد همان را نگه می‌دارد.

  • روشی که از قبل کار می‌کرد اول فهرست مانده، پس اگر خط شما تا حالا وصل می‌شد، همان اولین امتحان است و هیچ کندی اضافه‌ای ندارد.
  • روش‌ها فقط روی دو کانفیگ امتحان می‌شوند، چون سؤال این مرحله فقط این است که «از این روش اصلاً دیتا رد می‌شود یا نه»؛ بعد از پیدا شدن روش، همهٔ کانفیگ‌ها با همان سنجیده می‌شوند.
  • اگر هیچ روشی جواب نداد، تنظیمات به حالت قبل خودش برمی‌گردد — یک سنجش ناموفق نباید روشی را جا بگذارد که هیچ دلیلی برای انتخابش نبوده.
  • اسم هیچ اپراتوری جایی در برنامه نیست. حدس زدنِ شبکهٔ شما هفته‌ای که اپراتور چیزی را عوض کند کهنه می‌شود؛ چیزی که انتخاب می‌شود حاصل اندازه‌گیری همان خط است.

تست دیلی دیگر روی «در حال اندازه‌گیری» گیر نمی‌کند

سه عیب جداگانه بودند که با هم یک چیز دیده می‌شدند.

۱) تایم‌اوتی که هیچ‌وقت عمل نمی‌کرد. اندازه‌گیری دیلی یک فراخوانی مستقیم به هستهٔ Xray است، و تایم‌اوتی که دورش گذاشته شده بود از نوعی بود که فقط سر نقاط توقف کار می‌کند — و فراخوانی به هسته نقطهٔ توقف نیست. روی دستگاه اندازه گرفته شد: سه تست بالا آمدند و بیش از سه دقیقه هیچ جوابی ندادند، روی تایم‌اوت ۱۲ ثانیه‌ای. هیچ‌چیز بعدش اجرا نمی‌شد: نه لیست پر می‌شد، نه چرخ می‌ایستاد، نه موتور آزاد می‌شد. حالا روی رشته‌ای اجرا می‌شود که می‌توان رهایش کرد.

۲) بودجهٔ زمانی از خود دست‌دهی کوتاه‌تر بود. یک دست‌دهی WebSocket از درون موتور SNI روی خط همراه ایرانی ۹ تا ۱۴ ثانیه طول می‌کشد — این را خودِ سرور با پاسخ 101 تأیید کرد، روی هر چهار مسیری که امتحان شد، هرکدام دو بار. با بودجهٔ ۷ و ۱۲ ثانیه، هر کانفیگ «بدون پینگ» گزارش می‌شد در حالی که کاملاً توان اتصال داشت.

حالا ۲۵ ثانیه است، هر کانفیگ یک شانس دوم می‌گیرد، و کانفیگ‌ها دوتادوتا سنجیده می‌شوند نه سه‌تاسه‌تا — همه از یک موتور رد می‌شوند و فشار روی آن خودش نتیجه را خراب می‌کند. (کم کردن فاصلهٔ تکه‌ها کمکی نمی‌کند؛ امتحان شد و کندی از خود خط است.)

۳) شمارندهٔ مشترک. مرحلهٔ دوم اندازه‌گیری یک رونوشت از مرحلهٔ اول بود و شمارنده را با آن شریک شده بود، پس برای ۸ کانفیگ تا ۱۶ می‌شمرد — و از راهی خارج می‌شد که خط پاک‌کردن چرخ را رد می‌کرد. حالا یک تابع است که هر بار شمارندهٔ تازهٔ خودش را می‌سازد، و چرخ جایی خاموش می‌شود که هیچ خروجی نمی‌تواند از رویش بپرد.

چند رفع اشکال دیگر در همین مسیر

  • موتور SNI بعد از هر تست روشن می‌ماند. شمارندهٔ مالکیت موتور، همان claim‌ای را که تازه ساخته شده بود پاک می‌کرد، چون مرحلهٔ «خاموش کردن» اول صدا زده می‌شود تا راه باز شود. بعد از آن، آزادسازی می‌دید هیچ‌کس موتوری را که واضحاً روشن است نگه نداشته — پس پروسه از هر اندازه‌گیری عمر بیشتری می‌کرد و چراغ SNI روی صفحهٔ اصلی، روی تونل دیگری روشن می‌ماند. همین عیب باعث می‌شد نردبان روش‌ها هم بی‌اثر شود و نصف پله‌ها با تنظیمات پلهٔ قبلی سنجیده شوند.
  • دکمهٔ تست مسیرها زیر فهرست ۲۸ مسیری بود — یعنی تنها چیزی که روی شبکه‌ای با مسیر نامناسب باید زد، پشت اسکرول مانده بود. حالا بالای فهرست است. خودش هم دیگر رونوشت دوم آن اسکنی نیست که دکمهٔ اتصال اجرا می‌کند.
  • یکی از کانفیگ‌های نمونه هرگز بار نمی‌شد: آدرسش 127.0.0..1 تایپ شده بود.