داستان فرگمنت
چون در مورد #فرگمنت کمتر صحبت شده و دوستان زیادی نمیدونن چطور استفاده کنن یه داستان بگم براش، یه مدته داستان نگفتم :)
ما وقتی درخواست HTTPS/WSS میفرستیم سمت سرور، کل اطلاعات با پروتکل TLS رمزنگاری میشه و بین راه قابل مشاهده نیست در نتیجه هکر/فیلترچی نمیتونه ببینه چه خبره.
اما اینجا یه مشکلی وجود داره! زمانی که پای CDN/Reverse Proxy میاد وسط تا از سرور ما محافظت کنه، لازمه که نام دامین مقصد رو بدونه تا تشخیص بده درخواست رو چطور هدایت/رمزگشایی کنه. اینجا مفهومی اضافه میشه به اسم SNI که همون نام دامین ماست.
۲/۱۰روش کار اینطوریه که قبل از ارسال درخواست اصلی که رمزنگاری شده، یک بسته به سمت مقصد ارسال میشه که مشخص میکنه بستهی رمزنگاری شده مربوط به کدوم دامینه.
این بسته tlshello نامگذاری شده و حاوی نام دامنهی ماست. بعد از این بسته، درخواست رمزنگاری شدهی اصلی ارسال میشه.
تدوینکنندگان TLS در تلاشن تا این بستهی tlshello رو هم رمزنگاری کنن و فعلا به شکل افزونه روی نسخه ۱.۳ اضافه شده ولی به نوعی هنوز عملیاتی نیست و به راحتی هم توسط فایروال غیرفعال میشه.
کاری که فرگمنت انجام میده اینه که برای مخفی کردن نام دامین، این بسته رو قطعه قطعه میکنه.
بستهی tlshello خیلی کمحجمه چیزی حدود ۲۰۰ الی ۳۰۰ بایت حجمشه و خب به صورت نرمال باید در یک مرتبه ارسال بشه، فیلترچی هم منتظره تا اینو بگیره و نام دامین مقصد رو از توش برداره و با یه لبخندِ پیروزی، درخواست رو بلاک کنه :(
اما فرگمنت میاد این بستهی کوچک رو تکهتکه و در قطعات مختلف ارسال میکنه و بین ارسالها تاخیر میندازه. این کار باعث میشه فعلا فایروال گمراه بشه و نتونه نام دامین رو تشخیص بده.
الان اون دو تا متغیر Length (اندازهی بستهها) و Interval (فاصله زمانی بین بستهها) رو متوجه شدیم.
این اندازه و فاصله روی اوپراتورهای مختلف نتایج مختلف دارن و باید با آزمایش و خطا به دستش آورد. اینم بگم که ما برای اینکه همیشه بستههای کوچک شده رو با یک اندازه یا فاصلهی زمانی ثابت نفرستیم میایم برای مقادیر، محدوده تعیین میکنیم.
مثلا به جای ۵۰ مینویسیم ۱۰۰-۵۰، اینطوری هر بار بسته با اندازهی اتفاقی بین ۵۰ تا ۱۰۰ ارسال میشه.
کاهش اندازهی بستهها و یا افزایش فاصلهی زمانی میتونه پینگ شما رو به طور محسوس افزایش بده ولی تاثیری روی سرعت تبادل نداره و فقط در لحظهی اتصال این کندی ایجاد میشه.
در حال حاضر هستهی xray به طور کامل فرگمنت رو پشتیبانی میکنه و کلاینتهای مبتنی بر این هسته مثل سری v2rayN/NG هم از فرگمنت پشتیبانی میکنن. در اپ v2rayNG میتونید در تنظیمات برنامه فرگمنت رو فعال کنید ولی v2rayN در تنظیماتش نداره و به جاش میتونید کانفیگ کاستوم با فرگمنت بدید.
برای تهیه کانفیگ کاستوم با فرگمنت هم میتونید کانفیگ رو به v2rayNG (یا مشابه) بدید و فرگمنت رو فعال کنید بعد به صورت custom config خروجی بگیرید و به سایر اپها مثل v2rayN بدید، یا از ابزارهای آنلاین برای تبدیل استفاده کنید مثل ابزاری که
@ircfspace درست کرده.
موفق باشید.
🌱
توییت مرتبط:
https://twitter.com/vahidfarid/status/1767652392034533608
@VahidGeek