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

WARP روی MASQUE

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

WARP روی MASQUE شما را با MASQUE، پروتکلی که اپ‌های رسمی WARP اکنون به کار می‌برند، به VPN رایگان WARP کلادفلر وصل می‌کند. بسته‌های IP شما درون یک درخواست HTTP CONNECT-IP، روی HTTP/3 ‏(QUIC) یا HTTP/2 ‏(TLS روی TCP) جابه‌جا می‌شوند. این یک outbound است، "type": "masque" در فهرست outbounds، و دستگاهی را اجرا می‌کند که جای دیگری ثبت شده: خودش هیچ دستگاهی ثبت نمی‌کند.

این صفحه دربارهٔ MASQUE به WARP است. همین تونل در دو جا اجرا می‌شود:

  • endpoint ‏warp با masque تنظیم‌شده (پیشنهادی): یک endpoint که دستگاه را ثبت می‌کند، endpointها را پیدا می‌کند و WireGuard، AmneziaWG یا MASQUE را اجرا می‌کند. نوع نمایشی آن WARP · MASQUE است. WARP را ببینید.
  • outbound ‏masque، که اینجا توضیح داده شده و دستگاهی را که به آن داده شده (device) اجرا می‌کند و دستگاهی ثبت نمی‌کند.

برای سرور MASQUE شخصی خودتان، از نوع‌های masque-client و masque-server در sing-box اصلی استفاده کنید (CONNECT-IP طبق RFC 9484، با path، نام کاربری و گذرواژه، و تنظیمات معمول TLS). این‌ها در مستندات آن توضیح داده شده‌اند.

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

  • جایی که WireGuard بسته است کار می‌کند: تونل شبیه ترافیک HTTPS به کلادفلر است.
  • وقتی vhttp روی auto باشد، اگر UDP یا QUIC بسته باشد به HTTP/2 روی TCP برمی‌گردد.
  • مانند WARP، به سرور شخصی نیازی ندارد.

وقتی WireGuard روی شبکهٔ شما کار می‌کند، WARP را انتخاب کنید. سربار کمتری دارد.

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

تونل یک اتصال TLS به کلادفلر با نام سرور consumer-masque.cloudflareclient.com است، روی QUIC یا TCP. برای فیلتر شبیه هر اتصال HTTPS دیگری به کلادفلر است. روی HTTP/2، بلوک tls می‌تواند ClientHello را هم تکه‌تکه کند (fragment، record_fragment).

وقتی HTTP/3 بسته است، auto به HTTP/2 می‌رود. وقتی یک نشانی یا پورت بسته است، اسکنر نشانی دیگری پیدا می‌کند که پاسخ بدهد.

محدودیت‌ها: فیلتری که نشانی‌های MASQUE کلادفلر (162.159.198.0/24 و 2606:4700:103::/64) را ببندد، این outbound را هم می‌بندد. نام سرور را کلادفلر تعیین کرده است، پس فیلتری که آن نام را ببندد این outbound را هم می‌بندد، مگر اینکه server_name را به نامی تغییر دهید که کلادفلر هنوز می‌پذیرد.

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

دستگاه. این outbound به device نیاز دارد: دستگاهی که کلادفلر برای MASQUE ثبت کرده (کلیدش، نشانی‌های تونل و endpointها)، به همان شکلی که لینک‌های اشتراکی masque:// آن را دارند. هرگز به API کلادفلر وصل نمی‌شود و هرگز دستگاهی ثبت نمی‌کند. کانفیگی که device نداشته باشد با خطای «masque outbound needs a device (an enrolled MASQUE key); to register a WARP device, use the warp endpoint with mode masque» بارگذاری نمی‌شود.

وقتی کلادفلر دستگاه را رد کند (کلیدی که هرگز ثبت نشده، یا دستگاهی که حذف شده)، تونل به تلاش ادامه می‌دهد و outbound همین رد شدن را به‌عنوان دلیل آماده نبودن گزارش می‌کند. دستگاه جایگزینی ثبت نمی‌کند. endpoint ‏warp با mode برابر masque چنین دستگاهی را به‌صورت masque.device می‌گیرد و وقتی کلادفلر آن را رد کند، با دستگاه‌های ذخیره‌شده یا تازه‌ثبت‌شدهٔ خودش ادامه می‌دهد؛ WARP («دستگاه‌ها») را ببینید.

لینک‌های masque://. هیدیفای‌کور لینک masque:// به WARP کلادفلر (endpointی در بازه‌های WARP یا زیر cloudflareclient.com، یا نام سرور کلادفلر، یا بدون نام) را endpoint ‏warp با mode برابر masque می‌خواند: با کلید لینک به‌صورت masque.device، یا بدون آن وقتی لینک کلید ندارد. فقط لینکی به سرور MASQUE دیگری این outbound می‌شود، و به کلیدش نیاز دارد.

نسخهٔ HTTP. vhttp روش اتصال تونل را تعیین می‌کند:

  • h3: فقط HTTP/3 روی QUIC.
  • h2: فقط HTTP/2 روی TLS و TCP.
  • auto: اول HTTP/3 شروع می‌شود. HTTP/2 هم بعد از ۳ ثانیه شروع می‌شود، یا اگر HTTP/3 شکست بخورد بی‌درنگ. هر کدام زودتر وصل شود برنده است و موفقیت دیرهنگام دیگری بسته می‌شود. برخی شبکه‌ها QUIC را بی‌هیچ خطایی دور می‌ریزند و HTTP/3 فقط معطل می‌ماند؛ این روش انتظار را کوتاه نگه می‌دارد.

در auto، برد HTTP/2 به خاطر سپرده می‌شود تا اتصال‌های بعدی مستقیم با HTTP/2 انجام شوند. مدت به خاطر سپردن ۱ ثانیه است، سپس ۱۰ ثانیه، ۳۰ ثانیه، ۵ دقیقه و ۱۰ دقیقه؛ با هر برد پیاپی HTTP/2 یک پله بیشتر. برد HTTP/3 همه‌چیز را از نو شروع می‌کند. به این ترتیب یک رد شدن کوتاه HTTP/3 تونل را برای همیشه روی HTTP/2 نگه نمی‌دارد. اگر HTTP/2 به‌خاطرسپرده‌شده شکست بخورد، اتصال بعدی دوباره اول HTTP/3 را امتحان می‌کند.

endpointها. بدون اسکنر، تونل از endpoint ‏HTTP/3 پروفایل و برای HTTP/2 از 162.159.198.2 استفاده می‌کند، روی پورت 443 یا پورتی که endpoint ‏device با آن داده شده است.

اسکنر. با scanner.enabled، outbound پیش از اتصال دنبال endpointی می‌گردد که پاسخ بدهد. اسکنر مانند WARP کار می‌کند، با این تفاوت‌ها:

  • هر probe همان handshakeی است که تونل با آن شروع می‌کند: handshake ‏QUIC برای HTTP/3، یا handshake ‏TLS روی TCP برای HTTP/2. از تنظیمات TLS تونل و dialer همین outbound استفاده می‌کند.
  • endpointهای HTTP/3 و HTTP/2 سرورهای متفاوتی هستند، پس جدا امتیاز می‌گیرند. در auto هر دو اسکن می‌شوند.
  • بازه‌های پیش‌فرض همان‌هایی هستند که کلادفلر ارائه می‌کند. روی QUIC فقط 162.159.198.1، 162.159.198.2، 2606:4700:103::1 و 2606:4700:103::2 پاسخ می‌دهند. روی HTTP/2 همهٔ 162.159.198.0/24 و 2606:4700:103::/64 به جز نشانی اول پاسخ می‌دهند. پورت‌های پیش‌فرض 443، 500، 1701، 4443، 4500، 8095 و 8443 هستند. UDP 443 اغلب بسته است، پس اسکن HTTP/3 بیشتر میان پورت‌ها می‌گردد.
  • با use_ipv6 فقط endpointهای IPv6 اسکن می‌شوند.

جایگزینی خودکار (failover). هر اتصال تونل برای endpoint خودش حساب می‌شود: موفقیت امتیازش را بالا می‌برد و شکست پایین می‌آورد. بعد از دو اتصال ناموفق پیاپی روی یک نسخهٔ HTTP، تونل بهترین endpoint دیگرِ همان نسخه را اسکن می‌کند و به آن می‌رود. اگر هیچ‌کدام پاسخ ندهد، همان فعلی را نگه می‌دارد.

تغییر شبکه. بعد از تغییر شبکه، outbound شبکهٔ تازه را (برای امتیازها) نام‌گذاری می‌کند و اتصال تونل را می‌بندد. استفادهٔ بعدی دوباره وصل می‌شود.

وضعیت اتصال. این outbound فقط وقتی متصل حساب می‌شود (بدون «Connecting...») که اتصالی به سرور کلادفلر دارد، نه به محض آماده شدن؛ وقتی اتصال قطع شود، از طریق detour یا هر راه دیگر، تا اتصال دوباره «در حال اتصال» نشان داده می‌شود. نوع نمایشی آن WARP · MASQUE است و وضعیت اسکنر مانند WARP پس از آن می‌آید.

detour گروهی. وقتی detour یک گروه است، تونل وقتی گروه به عضو دیگری می‌رود دوباره وصل می‌شود.

از طریق پروکسی. QUIC هر بسته را در بافری به اندازهٔ تقریباً یک بسته می‌خواند. پروکسی‌ای که در جا رمزگشایی می‌کند، مانند Shadowsocks، به جای بیشتری نیاز دارد، پس هر بسته به‌طور کامل از اتصال بسته‌ای پروکسی خوانده و سپس کپی می‌شود. پیش‌تر، بستهٔ کامل بریده می‌شد و تونل HTTP/3 هرگز از طریق Shadowsocks، VLESS یا Trojan وصل نمی‌شد.

پیکربندی

{
  "outbounds": [
    {
      "type": "masque",
      "tag": "warp-masque",
      "vhttp": "auto",
      "device": {
        "private_key": "MHcCAQEEI...",
        "ipv4": "172.16.0.2",
        "endpoint_v4": "162.159.198.2:443"
      },
      "scanner": {
        "enabled": true
      }
    }
  ],
  "route": {
    "final": "warp-masque"
  }
}
فیلد نوع پیش‌فرض معنا
device object لازم دستگاهی که از قبل برای MASQUE ثبت شده و همان‌طور استفاده می‌شود: بدون تماس با API کلادفلر. پایین‌تر را ببینید.
vhttp string auto h3، h2 یا auto. خالی یعنی auto، یا h2 وقتی use_http2 روشن است.
use_http2 bool false روش قدیمی‌تر انتخاب HTTP/2. ‏vhttp اولویت دارد.
server_name string consumer-masque.cloudflareclient.com نام سرور TLS.
use_ipv6 bool false اتصال به کلادفلر روی IPv6. پروفایل endpoint ‏HTTP/2 روی IPv6 ندارد، پس auto فقط وقتی اسکنر یکی پیدا کند از HTTP/2 استفاده می‌کند و در غیر این صورت روی HTTP/3 می‌ماند؛ h2 به اسکنر نیاز دارد.
scanner object خاموش اسکنر endpoint و جایگزینی خودکار. همان فیلدهای WARP.
tls object تنظیمات TLS. پایین‌تر را ببینید.
udp_timeout duration پیش‌فرض sing-box مهلت بیکاری نشست‌های UDP درون تونل.
udp_keepalive_period duration 30s فاصلهٔ keepalive در QUIC.
udp_initial_packet_size number پیش‌فرض QUIC اندازهٔ بستهٔ اولیهٔ QUIC. اگر تنظیم شود، کشف MTU مسیر خاموش می‌شود.
mtu number 1280 MTU تونل، از 1280 تا 9000. روی HTTP/3، بسته‌ای بزرگ‌تر از ظرفیت مسیر یک ICMP «packet too big» برمی‌گرداند تا TCP خودش را تنظیم کند.
reconnect_delay duration 0 فاصلهٔ میان اتصال‌های ناموفق تونل.
unique_identifier string tag کلید امتیازهای اسکنر در فایل کش.

فیلدهای dial (detour، bind_interface و بقیه) روی تونل، probeهای اسکنر و بررسی نام شبکه اعمال می‌شوند.

device

دستگاهی که جای دیگری ثبت شده، به همان شکلی که لینک‌های masque:// آن را دارند. به API کلادفلر وصل نمی‌شود، پس جایی که API مسدود است هم کار می‌کند؛ کلیدها باید مال دستگاهی باشند که کلادفلر برای MASQUE ثبت کرده است.

فیلد نوع پیش‌فرض معنی
private_key string کلید ECDSA دستگاه: base64 (استاندارد یا URL) از DER به شکل SEC 1 یا PKCS #8.
endpoint_public_key string کلید لبه کلید endpoint: PEM، یا base64 از DER به شکل PKIX. لبهٔ MASQUE کلادفلر روی همهٔ endpointها و پورت‌ها یک گواهی ثابت می‌دهد و کلیدش داخل برنامه است، پس لینک‌هایی که کلید ندارند (لینک‌های MahsaNG) هم endpoint را پین می‌کنند.
ipv4، ipv6 string آدرس‌های تونل. دست‌کم یکی.
endpoint_v4، endpoint_v6 string endpointهای HTTP/3، یک IP یا ip:port؛ پورت اولین موردی که پورت دارد استفاده می‌شود و بدون پورت 443. دست‌کم یکی.
endpoint_h2_v4، endpoint_h2_v6 string پیش‌فرض کلادفلر endpointهای HTTP/2.
id، license string شناسه و لایسنس دستگاه، برای اطلاع.

دستگاهی که نمی‌تواند کار کند (کلیدی که خوانده نمی‌شود، بدون آدرس، بدون endpoint) کانفیگ را خطادار می‌کند. دستگاهی که کلادفلر رد کند جایگزین نمی‌شود؛ «چطور کار می‌کند» را ببینید. ‏profile دیگر خوانده نمی‌شود: این outbound دستگاهی ثبت نمی‌کند.

پیش‌فرض‌های scanner برای MASQUE

فیلد پیش‌فرض
ports 443، 500، 1701، 4443، 4500، 8095، 8443
cidrs HTTP/3: ‏162.159.198.1/32، 162.159.198.2/32، 2606:4700:103::1/128، 2606:4700:103::2/128. ‏HTTP/2: ‏162.159.198.0/24، 2606:4700:103::/64.

بقیهٔ فیلدهای اسکنر و پیش‌فرض‌هایشان مانند WARP است.

tls

فیلد نوع پیش‌فرض معنا
insecure bool false بررسی نکن که کلید سرور همان کلید پروفایل است.
certificate_public_key_sha256 فهرست رشته به‌جای آن، سرور را با SHA-256 (هگز) کلید عمومی گواهی‌اش بررسی کن، یکی از این‌ها؛ همان pinnedPeerPublicKeySha256 در Xray.
cipher_suites فهرست رشته cipher suiteهای TLS برای پیشنهاد.
curve_preferences فهرست رشته منحنی‌های تبادل کلید برای پیشنهاد.
fragment bool false تکه کردن ClientHello در چند بخش TCP ‏(HTTP/2).
fragment_fallback_delay duration مانند fragment_fallback_delay در بلوک TLS.
record_fragment bool false تکه کردن ClientHello در چند رکورد TLS ‏(HTTP/2).
kernel_tx، kernel_rx bool false استفاده از TLS کرنل. فقط لینوکس.

نکته‌ها:

  • این outbound به تگ ساخت with_masque نیاز دارد که در تگ‌های پیش‌فرض Makefile هست. بدون آن، کانفیگ با خطای «MASQUE outbound is not included in this build» بارگذاری نمی‌شود.
  • امتیازهای اسکنر در فایل کش نگه داشته می‌شوند، با کلید unique_identifier یا tag. بدون cache_file، اسکنر بدون سابقه شروع می‌کند.
  • تونل در پس‌زمینه راه می‌افتد. اتصال‌ها منتظر می‌مانند تا اولین راه‌اندازی تمام شود. اگر شکست خورده باشد، با خطای «tunnel not initialized» شکست می‌خورند.
  • وقتی اتصالی شکست بخورد، تونل خطا را در لاگ ثبت می‌کند و بعد از reconnect_delay دوباره امتحان می‌کند.

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


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

نظرات