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دوباره امتحان میکند.