پرش به محتویات

ترفندهای TLS (tls_tricks)

همهٔ قابلیت‌های هیدیفای

tls_tricks پیام ClientHello را که خروجی در TLS می‌فرستد تغییر می‌دهد: می‌تواند نام سرور را با ترکیبی تصادفی از حروف بزرگ و کوچک بفرستد، و یک افزونهٔ padding با اندازهٔ دلخواه اضافه کند. این شیء tls_tricks درون بلوک tls یک خروجی است.

چرا از آن استفاده کنیم

برخی فیلترها نام سرور (SNI) را دقیقاً تطبیق می‌دهند، یا ClientHello را از روی اندازه‌اش می‌شناسند. تغییر حروف نام، یا بزرگ‌تر کردن ClientHello، می‌تواند بدون هیچ تغییری در سرور از چنین فیلترهایی عبور کند.

چطور از فیلترینگ عبور می‌کند

  • SNI با حروف درهم: نام‌های DNS به بزرگی و کوچکی حروف حساس نیستند؛ پس ExAmPle.CoM به همان سایت می‌رسد و گواهی هم مطابقت دارد. فیلتری که نام را بایت‌به‌بایت با حروف کوچک مقایسه می‌کند، تطابقی نمی‌بیند. ترکیب حروف برای هر اتصال تازه است.
  • Padding: یک افزونهٔ padding به اندازهٔ padding_size بایت درست پیش از افزونهٔ SNI قرار می‌گیرد. ClientHello را بزرگ‌تر می‌کند و نام سرور را جلوتر می‌برد، اغلب به سگمنت TCP بعدی، جایی که فیلتری که فقط اولین بسته را می‌خواند نگاه نمی‌کند.

در برابر فیلترهایی که نام را بدون حساسیت به حروف مقایسه می‌کنند، جریان را سرهم می‌کنند یا IP سرور را مسدود کرده‌اند کمکی نمی‌کند.

چطور کار می‌کند

این ترفندها را خود کلاینت TLS انجام می‌دهد، نه ماسک‌های finalmask. ClientHello بخشی از رونوشت (transcript) دست‌دهی TLS 1.3 است که هر دو طرف هش و بررسی می‌کنند؛ پس ماسکی که آن را روی سیم ویرایش کند دست‌دهی را خراب می‌کند. این‌جا کتابخانهٔ TLS خودش ClientHello تغییریافته را می‌سازد و در رونوشت خودش به کار می‌برد.

  • mixedcase_sni با کلاینت استاندارد TLS در Go و با uTLS کار می‌کند.
  • Padding به uTLS با یک اثرانگشت ثابت (مثل chrome یا firefox) نیاز دارد. افزونهٔ padding خود اثرانگشت را با یکی به اندازهٔ انتخابی جایگزین می‌کند و باقی اثرانگشت را دست نمی‌زند. با اثرانگشت‌های random یا randomized کانفیگ بارگذاری نمی‌شود. بدون uTLS، padding با یک هشدار نادیده گرفته می‌شود.
  • REALITY پیام ClientHello خودش را می‌سازد و از tls_tricks استفاده نمی‌کند.

پیکربندی

{
  "outbounds": [
    {
      "type": "vless",
      "server": "example.com",
      "server_port": 443,
      "uuid": "bf000d23-0752-40b4-affe-68f7707a9661",
      "tls": {
        "enabled": true,
        "server_name": "example.com",
        "utls": { "enabled": true, "fingerprint": "chrome" },
        "tls_tricks": {
          "mixedcase_sni": true,
          "padding_mode": "random",
          "padding_size": "800-1200"
        }
      }
    }
  ]
}
فیلد نوع پیش‌فرض معنا
mixedcase_sni bool false نام سرور را در هر اتصال با ترکیب تصادفی حروف می‌فرستد.
padding_mode string "" random افزونهٔ padding را اضافه می‌کند. مقدار خالی هم وقتی padding_size تنظیم شده باشد آن را اضافه می‌کند.
padding_size string — طول padding به بایت، یک عدد یا بازهٔ "from-to" (طولی تصادفی در هر اتصال)، از ۱ تا ۱۶۰۰۰. با random الزامی است.
padding_sni string — پشتیبانی نمی‌شود؛ با هشدار نادیده گرفته می‌شود.

حالت‌های padding با نام sni و hello_client و فیلد padding_sni هرگز پیاده نشده بودند. با هشدار نادیده گرفته می‌شوند تا کانفیگ‌هایی که آن‌ها را دارند همچنان بارگذاری شوند. padding_size که عدد یا بازه نباشد، یا خارج از محدوده باشد، خطای پیکربندی است.

همچنین ببینید


اخرین بروزرسانی: 26 فوریهٔ 2026

نظرات