Fake TLS در MTProxy: چگونه ترافیک به عنوان HTTPS ماسک میشود
نسخههای اولیه MTProxy ترافیک را مبهم میکردند، اما یک پاشنه آشیل داشتند: سیستمهای DPI یاد گرفتند الگوهای بایتی مشخص را در دست دادن (handshake) پیدا کنند. Fake TLS حالتی است که در آن اتصال به پروکسی از دید هر ناظری غیرقابل تشخیص از باز کردن یک وبسایت معمولی HTTPS است. بیایید این مکانیزم را از درون بررسی کنیم.
چرا ترافیک را به عنوان TLS ماسک میکنیم
TLS (Transport Layer Security) پروتکلی است که تمام وبسایتهای HTTPS را ایمن میکند. نماد قفل مرورگر، انتقالهای بانکی، ایمیل — همه اینها TLS هستند. به دلیل فراگیر بودن آن، ارائهدهنده اینترنت نمیتواند تمام ترافیک TLS را مسدود کند بدون اینکه کل اینترنت را قطع کند.
ایده پشت Fake TLS ساده است: اتصال MTProxy را غیرقابل تشخیص از یک اتصال معمولی TLS به یک وبسایت قانونی کنیم. در این صورت، تنها راه برای مسدود کردن پروکسی مسدود کردن خود وبسایت قانونی (مثلا google.com) است که از نظر سیاسی غیرممکن است.
ساختار کلید مخفی (Secret) در Fake TLS
سکرت پروکسی رشتهای است که هنگام افزودن پروکسی در تلگرام میبینید. برای حالت Fake TLS، این رشته ساختار زیر را دارد:
ee367dbc7ce59d9a56e8f59b9cadef34676f6f676c652e636f6d
│ │ │
│ └── 32 hex chars of the key └── hex("google.com")
└── پیشوند Fake TLS
سه بخش:
ee— نشانگر دو کاراکتری برای حالت Fake TLS- ۳۲ کاراکتر هگز — یک کلید رمزنگاری ۱۶ بایتی
- رشته هگز — نمایش UTF-8 از دامنه SNI در قالب هگزادسیمال
کلاینت تلگرام به طور خودکار این فرمت را رمزگشایی میکند و همه چیزهای لازم برای اتصال را میداند.
دست دادن (Handshake) پروکسی چگونه به نظر میرسد
هنگامی که از طریق تلگرام متصل میشوید، توالی زیر باز میشود:
سیستم DPI فقط ترافیکی را میبیند که از آن عبور میکند. همه چیز شبیه HTTPS معمولی به google.com است.
چرا Client Hello عنصر کلیدی است
پیام Client Hello اولین پیام در دست دادن TLS است. این پیام شامل فیلد SNI (Server Name Indication) است: متن ساده با نام دامنه. این تنها جایی در اتصال رمزنگاری شده است که DPI میتواند نام میزبان را بدون شکستن کدگذاری بخواند.
حالت Fake TLS به طور استراتژیک از این فیلد استفاده میکند: نام یک دامنه بزرگ CDN را در آنجا قرار میدهد. مسدود کردن ترافیک با SNI مانند cloudflare.com یا google.com به معنای مسدود کردن میلیونها سرویس قانونی است.
چگونه یک دامنه برای SNI انتخاب کنیم
همه دامنهها به طور یکسان از پروکسی شما محافظت نمیکنند:
| معیار | چه چیزی را جستجو کنید |
|---|---|
| حجم ترافیک | دامنههایی با میلیونها درخواست در ثانیه — مسدود کردن بسیار پرهزینه است |
| پوشش CDN | اگر یک دامنه پشت CDN (Cloudflare, Akamai) باشد، IP آن به صورت انبوه قابل مسدود کردن نیست |
| اعتبار | بانکها، رسانههای بزرگ — مسدود کردن از نظر سیاسی حساس است |
| دسترسی | دامنه باید در کشور هدف کار کند، در غیر این صورت بررسی SNI با شکست مواجه میشود |
انتخابهای بد: دامنههای ناشناخته یا دامنههایی که از قبل در کشور مسدود شدهاند.
پروکسی در طول بررسی فعال DPI چه میکند
سیستمهای پیشرفته DPI فقط منفعلانه مشاهده نمیکنند — آنها به طور فعال اتصالات مشکوک را بررسی میکنند: خودشان به سرور متصل میشوند و بررسی میکنند که آیا مانند یک سرور واقعی HTTPS واکنش نشان میدهد یا خیر.
یک پیادهسازی مناسب از MTProxy این را اینگونه مدیریت میکند: با دریافت یک درخواست مشکوک، سرور آن را به سرور واقعی HTTPS دامنه پوششی هدایت میکند. از دید DPI، همه چیز شبیه یک اتصال قانونی به google.com به نظر میرسد.
محدودیتهای Fake TLS
ECH (Encrypted Client Hello) استاندارد جدیدی است که SNI را کاملاً رمزگذاری میکند. زمانی که ECH توسط ارائهدهندگان اینترنت به طور گسترده پذیرفته شود، DPI اصلاً قادر نخواهد بود نام دامنه را بخواند. اما تا زمانی که به صورت انبوه مستقر نشود، Fake TLS همچنان مرتبط است.
تحلیل آماری جریان — با مشاهده طولانی مدت، سیستمها ممکن است متوجه تفاوتهایی با TLS "واقعی" شوند: زمانبندیهای غیرعادی، ساختار گواهینامه. این نیاز به محاسبات گران قیمت دارد.
مسدودسازی IP — حالت Fake TLS در برابر فیلترینگ مبتنی بر امضا محافظت میکند، اما نه در برابر مسدود شدن آدرس IP پروکسی. دقیقاً به همین دلیل است که MTProxyHub نودها را هر ۶۰ ثانیه تغییر میدهد.
رویکردهای مشابه در سایر ابزارها
Fake TLS مختص تلگرام نیست — این بخشی از اکوسیستم گستردهتر دور زدن سانسور است:
- Shadowsocks با پلاگینهای obfs4 و v2ray-plugin
- V2Ray/Xray در حالت WebSocket + TLS
- Tor با پلهای meek و snowflake (استفاده از domain fronting واقعی از طریق CDN)
آنها با یک ایده متحد شدهاند: پنهان شدن در سایه ترافیک قانونی HTTPS.
سوالات متداول
چگونه میتوان یک پروکسی Fake TLS را از یک پروکسی معمولی تشخیص داد؟
سکرت Fake TLS همیشه با ee شروع میشود. پروکسیهای قدیمی با dd شروع میشدند یا بدون پیشوند بودند.
آیا میتوان دامنه SNI را از سکرت فهمید؟
بله — در انتهای رشته به عنوان هگز UTF-8 کدگذاری شده است. به عنوان مثال، 676f6f676c652e636f6d = google.com.
اگر DPI یک درخواست بررسی (probe) بفرستد چه اتفاقی میافتد؟ یک سرور مناسب MTProxy آن را به میزبان واقعی HTTPS دامنه پوششی هدایت میکند.
چرا TLS واقعی نه؟ TLS واقعی به گواهینامهها و PKI نیاز دارد، که پروکسی را از طریق Certificate Transparency قابل شناسایی میکند.
اگر در حال حاضر فقط به یک اتصال کارآمد نیاز دارید، لیست نودهای Fake TLS را باز کنید. تمام پروکسیها به طور پیشفرض از سکرتهای ee پشتیبانی میکنند.
همچنین بخوانید: DPI چگونه کار میکند و چگونه سرور MTProxy خود را راهاندازی کنید.