Bond
Bond هر اتصال را همزمان روی چند اتصال، به نام «پایه»، پخش میکند و در سرور دوباره به هم وصل
میکند. پایهها میتوانند هر outboundی باشند: پروتکل، سرور، درگاه یا شبکهٔ متفاوت. این outbound و
inbound با "type": "bond" است و به برچسب ساخت with_bond نیاز دارد.
چرا از آن استفاده کنیم
- یک اتصال تا سرعت کمی محدود میشود ولی چند اتصال موازی نه: bond آنها را با هم جمع میکند.
- میخواهید هر بخش از ترافیک از مسیر دیگری برود تا هیچ اتصالی کل جریان را حمل نکند.
اتصال را مطمئنتر نمیکند: وقتی یک پایه شکست بخورد، اتصال bond هم شکست میخورد.
چطور از فیلترینگ عبور میکند
هر پایه یک اتصال معمولی از پروتکل خودش (VLESS، Trojan و…) است، پس شبیه همان پروتکل دیده میشود. سانسورچیای که یک پایه را بخواند فقط بخشی از داده را میبیند. Bond خودش پنهانسازی اضافه نمیکند؛ این کار با پروتکلها و ترابریهای پایههاست.
چطور کار میکند
- کلاینت برای هر اتصال همزمان از همهٔ پایهها یک اتصال باز میکند و روی هر کدام سرآیندی کوتاه میفرستد: شناسهٔ اتصال، شمارهٔ پایه، تعداد پایهها، نسبتها و مقصد.
- سرور منتظر همهٔ پایههای یک اتصال میماند (تا مهلت اتصال؛ پایههایی که همه با هم نرسند بسته میشوند)، سپس اتصال یکپارچه را به مقصد میفرستد.
- داده در قابهایی حداکثر ۶۴ کیلوبایتی میرود. هر قاب بر اساس نسبتها میان پایهها تقسیم میشود: با نسبت آپلود ۶۰ و ۴۰، پایهٔ اول ۶۰٪ هر قاب را حمل میکند.
- UDP درون اتصال bond روی TCP (UDP over TCP) میرود.
پیکربندی
Outbound:
{
"type": "bond",
"tag": "bond",
"outbounds": [
{ "outbound": { "type": "vless", "server": "a.example.com", "server_port": 443, "uuid": "…" },
"download_ratio": 30, "upload_ratio": 60 },
{ "outbound": { "type": "vless", "server": "b.example.com", "server_port": 443, "uuid": "…" },
"download_ratio": 70, "upload_ratio": 40, "count": 1 }
]
}
| فیلد | نوع | پیشفرض | معنی |
|---|---|---|---|
outbounds |
list | الزامی | پایهها. |
outbounds[].outbound |
outbound | الزامی | یک outbound کامل که مثل outbounds درجا نوشته میشود. |
outbounds[].download_ratio |
عدد | 0 |
درصد دانلودی که این پایه حمل میکند. |
outbounds[].upload_ratio |
عدد | 0 |
درصد آپلودی که این پایه حمل میکند. |
outbounds[].count |
عدد | 1 |
چند پایه از این outbound باز شود؛ هر کدام نسبتهای بالا را میگیرد. |
جمع نسبتهای دانلود همهٔ پایهها باید ۱۰۰ باشد و جمع نسبتهای آپلود هم، با شمردن هر پایهای که
count میسازد. حداکثر ۲۵۵ پایه.
Inbound:
{
"type": "bond",
"tag": "bond-in",
"inbounds": [
{ "type": "vless", "listen": "::", "listen_port": 443, "users": [{ "uuid": "…" }] },
{ "type": "vless", "listen": "::", "listen_port": 8443, "users": [{ "uuid": "…" }] }
]
}
| فیلد | نوع | پیشفرض | معنی |
|---|---|---|---|
inbounds |
list of inbounds | الزامی | inboundهایی که پایهها به آنها میرسند، درجا نوشتهشده. اتصالهای دیگر روی آنها مثل همیشه مسیریابی میشوند. |
قاعدههای مسیریابی اتصالهای bond را با tag inbound bond میبینند. از sing-box-extended گرفته شده، با این اصلاحها: نوشتن بیش از ۶۴ کیلوبایت، جمع نسبتها و پایههایی که همه با هم نمیرسند.