در یک کانال یا در گروه آشنایان به شما میگویند «MTProto بگیر»، و طوری میگویند که انگار همه از قبل میدانند موضوع چیست. سراغ جستوجو میروید و همه چیز را در هم میبینید: سایتهایی که شبیه «سایت رسمی MTProto» به نظر میرسند، فهرست سرورها، چیزی به اسم «کلید» و دکمههای «اتصال». از نتایج هم معلوم نمیشود که باید چیزی دانلود کرد یا این فقط سایت یک نفر است. در تنظیمات تلگرام هم کنار آن گزینهٔ SOCKS5 دیده میشود. لینکها با یک لمس وصل میشوند، اما در انتهای یکی رشتهٔ کوتاهی از نویسهها هست و در انتهای دیگری رشتهای تقریباً دو برابر بلندتر.
من این را از بیرون نمینویسم. ما در FreeGate دقیقاً پروکسی MTProto میفروشیم، پس نمیشود مرا کاملاً بیطرف دانست و حق دارید این را در نظر بگیرید. اما دربارهٔ خودمان فقط در بخش آخر حرف میزنم و تا آنجا بیشتر همان چیزی را میگویم که خود تلگرام در مستندات و در کد برنامههایش نوشته است.
واژهٔ MTProto از کجا آمده است
MTProto برای پروکسی ساخته نشده است. این نام پروتکل خود تلگرام است و کل برنامه روی آن کار میکند: در پرسشهای متداول تلگرام صریحاً آمده که تلگرام «بر پایهٔ پروتکل MTProto» است. به زبان ساده، پروتکل توضیح میدهد که برنامه چطور با سرورها حرف میزند: درخواست را چطور بنویسد، پیش از ارسال چطور رمزگذاریاش کند و چطور آن را در شبکه برساند، چه از راه TCP، چه HTTPS یا WebSocket. از نسخهٔ ۴.۶ برنامههای اصلی تلگرام با نسخهٔ دوم این پروتکل کار میکنند و نسخهٔ اول منسوخ به شمار میرود.
این لایهٔ پایه، چتهای ابری معمولی را در مسیر میان برنامه و سرور رمزگذاری میکند. چتهای مخفی و تماسها را تلگرام جداگانه با رمزگذاری سرتاسری هم رمزگذاری میکند. نکتهٔ مهم این است که پیامها از همان برنامه رمزگذاریشده بیرون میروند، هر چه در مسیر سرورهای تلگرام قرار داشته باشد.
اینجاست که پروکسی وارد ماجرا میشود. پروکسی MTProto همین ترافیک رمزگذاریشده را از تلگرام شما میگیرد، آن را مبهمتر هم میکند و به سرورهای تلگرام میفرستد. نامش را هم از همین پروتکل گرفته است: چنین پروکسیای را فقط تلگرام میفهمد و برنامههای دیگر از آن عبور نمیکنند. برای آن چیزی هم لازم نیست دانلود کنید، چون همهٔ برنامههای موبایل و دسکتاپ تلگرام خودشان میتوانند از طریق پروکسی وصل شوند. برای همین وقتی جستوجو «دانلود MTProto» را پیشنهاد میدهد، راستش نمیدانم قرار است چه چیزی دانلود شود.
وقتی ترافیک شما از سرور شخص دیگری میگذرد، طبیعی است بپرسید آن سرور چه میبیند. اینجا میتوانم خیالتان را راحت کنم: در راهنمای پروکسی تلگرام آمده که صاحب پروکسی MTProto نمیتواند پیامها را بخواند و نام کاربری، شناسهٔ حساب و فهرست چتهای شما را نمیبیند. اما چیزهایی را میتواند ببیند: از چه IP وصل میشوید، در چه ساعتی، و خود این واقعیت که از تلگرام استفاده میکنید. تلگرام به کسانی که انتظار نظارت جدی دارند توصیه میکند یک VPN مورد اعتماد را هم روی آن اضافه کنند، پس اینجا صحبت از ناشناس ماندن نیست. اینکه با این اطلاعات چطور پروکسی انتخاب کنیم، در مقالهٔ کلی دربارهٔ پروکسی تلگرام توضیح دادهام.
چرا در تنظیمات کنار آن SOCKS5 هم هست
تلگرام در تنظیمات پروکسی دو نوع اصلی را پیشنهاد میکند، SOCKS5 و MTProto، و بعضی برنامهها HTTP-پروکسی را هم میشناسند. از اوت ۲۰۲۶ در Telegram Desktop نسخهٔ ۷.۱ نوع WEB-پروکسی هم اضافه شده، اما آن نوعی جداگانه است و به MTProto ربطی ندارد. هنوز نمیدانم از آن چه درمیآید.
SOCKS5 از تلگرام قدیمیتر است و هیچ ربطی به آن ندارد. این پروتکل در مارس ۱۹۹۶ در استاندارد RFC 1928 به عنوان یک لایهٔ عمومی برای هر برنامهٔ کلاینت و سرور (مرورگر، ایمیل یا هر چیز دیگر) تعریف شد که از TCP و UDP استفاده میکند. Telegram Desktop از نسخهٔ ۰.۲.۸ که در ژانویهٔ ۲۰۱۴ منتشر شد میتوانست از SOCKS5 و HTTP-پروکسی عبور کند، یعنی خیلی پیش از آنکه پروکسی MTProto به وجود بیاید.
برای SOCKS5 آدرس سرور و پورت کافی است و گاهی نام کاربری و رمز عبور هم به آنها اضافه میشود. خودش هیچ پوششی ندارد. در راهنمای تلگرام توضیح داده شده که پروکسیها معمولاً فقط ترافیک را جابهجا میکنند و رمزگذاری خودشان را اضافه نمیکنند، اما MTProxy ترافیک را مبهم هم میکند و در برابر ردیابی تدابیری دارد. پیامها در هر حال به دست خود تلگرام رمزگذاری شدهاند، پس تفاوت در این نیست که آنها را میخوانند یا نه. پروکسی MTProto بدون کلید مخفی اصلاً کار نمیکند: همیشه به آدرس، پورت و کلید مخفی نیاز دارد.
این دو را از روی خود لینک میشود تشخیص داد. اگر لینک با t.me/proxy? یا tg://proxy? شروع شود و در انتهایش secret= باشد، با MTProto سروکار دارید، و t.me/socks? بدون secret=، گاهی همراه با user= و pass=، یعنی SOCKS5.
از ابتدای کلید مخفی چه میشود فهمید
کلید مخفی (secret) در MTProxy شانزده بایت است و در لینک بیشتر وقتها با نویسههای شانزدهشانزدهی (رقمها و حروف a تا f) نوشته میشود، یعنی ۳۲ نویسه. برای شناختن نوع پروکسی کل کلید مهم نیست، بلکه دو نویسهٔ اول و طول آن مهم است، چون نوع از روی همینها معلوم میشود.
اگر کلید با dd شروع شود و دو نویسه از حالت معمول بلندتر باشد، یعنی ۳۴ نویسه، تلگرام حالتی را روشن میکند که در آن بستهها با دادههای تصادفی پر میشوند. به دادهها بایتهای تصادفی اضافه میشود و اندازهٔ بستهها با هم فرق میکند.
بلندترین کلیدها با ee شروع میشوند. با این کلیدها تلگرام اتصال را به شکل TLS برقرار میکند، تقریباً همانطور که مرورگر یک سایت را با HTTPS باز میکند، و بعد از بایت هفدهم، خود کلید یک نام دامنه را در خودش دارد. این را در کد Telegram Desktop و تلگرام اندروید میشود دید: هر دو برنامه به بایت اول کلید و به طول آن نگاه میکنند و برای ee دامنه را از انتهای کلید برمیدارند. اگر یک کلید فرضی با دامنهٔ example.com را با همین قاعدهها تجزیه کنیم، ۵۶ نویسه به دست میآید و انتهای آن دوباره به همان آدرس برمیگردد: ee…6578616d706c652e636f6d.
این مثال ساختگی است و هیچ پروکسی واقعیای پشتش نیست، و 6578616d706c652e636f6d همان example.com در نوشتار شانزدهشانزدهی است. سرور رسمی MTProxy از سال ۲۰۱۹ از این حالت پشتیبانی میکند.
یک نکته هم هست. Telegram Desktop از نسخهٔ ۶.۷.۴ در آوریل ۲۰۲۶ کلیدها را به صورت base64 هم میپذیرد و در این حالت ابتدای کلید شکل دیگری دارد. اما بیشتر وقتها کلید با نویسههای شانزدهشانزدهی نوشته میشود و قاعدهٔ دو نویسهٔ اول درست کار میکند.
در نتایج جستوجو گاهی این توصیه دیده میشود که دنبال پروکسی با کلیدی بگردید که با dd شروع میشود، انگار نشانهٔ پروکسی خوب است. این توصیه منبعی ندارد و چیزهای مختلف را با هم قاطی میکند، چون dd اندازهٔ بستهها را تغییر میدهد و اتصال شبیه TLS را ee میدهد. من اصلاً از روی دو حرف دربارهٔ خوب بودن پروکسی قضاوت نمیکنم: این دو حرف از شیوهٔ اتصال خبر میدهند، نه از اینکه چه کسی سرور را نگه میدارد و چطور.
چرا تلگرام پروکسی MTProto را خودش وصل میکند
SOCKS5 را تلگرام آماده تحویل گرفت، اما پروکسی MTProto را خودش ساخت، برای خودش و برای پروتکل خودش. این اتفاق در بهار ۲۰۱۸ افتاد. در فهرست تغییرات Telegram Desktop در ۱۸ مه، در نسخهٔ 1.2.21 alpha، خطی دربارهٔ پشتیبانی از نام دامنه در mtproto proxy آمد و مخزن MTProxy در GitHub در ۲۹ مه ۲۰۱۸ ساخته شد. در نسخهٔ ۱.۳.۰ در ۱ ژوئن هم برنامه میتوانست چند پروکسی را ذخیره کند.
به همین دلیل تلگرام لینک t.me/proxy را بدون هیچ کمک بیرونی میفهمد. روی آن میزنید، برنامه خودش آدرس، پورت و کلید مخفی را میخواند و دربارهٔ پروکسی میپرسد، و شما فقط «اتصال پروکسی» را میزنید. بعد از آن پروکسی در تنظیمات ذخیره میشود و اگر چند پروکسی داشته باشید، در تلگرام اندروید و در Telegram Desktop (از نسخهٔ ۶.۷.۸) میتوانید جابهجایی خودکار را روشن کنید.
سرور هم طبق قاعدههای تلگرام کار میکند. یک کلید مخفی سرویس و پیکربندی را از تلگرام میگیرد که در توضیحات توصیه شده روزی یک بار بهروز شود، و لینک کاربران را ربات رسمی میتواند برای صاحب سرور بسازد. کد سرور باز است و هر کسی میتواند آن را ببیند و با آن سرور خودش را راه بیندازد. صاحب سرور همچنین میتواند پروکسی را در ربات @MTProxyBot ثبت کند و به کسانی که وصل شدهاند یک کانال حامی نشان دهد تا هزینهٔ سرور را دربیاورد. پس اگر بعد از اتصال یک کانال ناآشنا در فهرست چتها دیدید، به احتمال زیاد صاحب پروکسی آن را گذاشته است.
و اما «سایت رسمی MTProto»: تلگرام سایتی با فهرست پروکسی ندارد. یک راهنمای پروکسی و کد سرور در GitHub دارد، و خود تلگرام پیشنهاد میکند پروکسیها را از راه جستوجو یا در کانالهایی پیدا کنید که به آنها اعتماد دارید. واژهٔ mtproto در آدرس یک سایت هیچ تضمینی نمیدهد. هر کسی میتواند آن را در نام دامنه بگذارد، و فوتر سایت «شبیه تلگرام» هم سایت را رسمی نمیکند. پس بهتر است لینک را از کسی بگیرید که از قبل به او اعتماد دارید، چه یک آشنا باشد، چه یک کانال یا سرویسی که پاسخگوی سرور خودش است.
پیشنهاد ما چیست
حالا، همانطور که قول داده بودم، دربارهٔ FreeGate. ما یک پروکسی شخصی MTProto با لینکهای ee میدهیم، یعنی اتصال طوری پوشانده میشود که شبیه یک اتصال معمولی HTTPS باشد. این پروکسی فقط داخل تلگرام کار میکند، پس برنامههای بانکی و بقیهٔ برنامهها مثل همیشه مستقیم باز میشوند. هر دستگاه لینک خودش را دارد، و اگر لینکی درز کرد، آن را در حساب کاربری با یک لمس عوض میکنید و لینک قبلی فوراً از کار میافتد. ما پیامهای شما را نمیبینیم: آنها را خود تلگرام رمزگذاری میکند و پروکسی فقط دادههای رمزگذاریشده را منتقل میکند.
اتصال آن همانطور است که بالاتر توضیح دادم. «اتصال در تلگرام» را میزنید یا کد QR را اسکن میکنید و تلگرام دربارهٔ پروکسی میپرسد. برای ثبتنام فقط ایمیل و رمز عبور لازم است و شماره تلفن نمیخواهد. میتوانید رایگان امتحانش کنید: ۱ روز پس از ثبتنام با ایمیل و تأیید آن، بدون پرداخت و بدون برداشت خودکار. قیمت برای یک دستگاه است، یعنی گوشی و کامپیوتر جداگانه حساب میشوند، و تعرفهها و شرایط را روی سایت میبینید. در برنامههای رسمی تلگرام برای iOS، اندروید، ویندوز، macOS و لینوکس کار میکند و بقیهٔ چیزها را در freegate.app/ir پیدا میکنید.