Skip to content

Bridge — sing-box ​

bridge همتای L3 خروجی direct است. به‌جای باز کردن سوکت، ترافیک L3 — TCP، UDP و ICMP — را که از یک ورودی TUN یا نقطه‌انتهایی L3 دیگری (WireGuard، Tailscale) می‌رسد، مستقیماً از یک رابط شبکه بیرون می‌فرستد، بی‌آنکه ابتدا آن را به اتصال L4 تبدیل کند.

دسترسی‌ها و پلتفرم‌ها

bridge به دسترسی بالا نیاز دارد و فقط در Linux، macOS، Windows (x86 / x64، از طریق WinDivert)، Android روت‌شده و iOS جیلبریک‌شده در دسترس است؛ در هر پلتفرم دیگری این خروجی هنگام راه‌اندازی خطا می‌دهد. در کلاینت‌های گرافیکی به نسخهٔ مستقل macOS همراه با سرویس کمکی آن، دسترسی روت در Android یا دستگاه iOS جیلبریک‌شده نیاز دارد.

گزینه‌های خروجی ​

type: "bridge" زیر outbounds[]:

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
interfacestring(default interface)<interface name>رابط خروجی برای ترافیک بازارسال‌شده. اگر تنظیم نشود رابط پیش‌فرض به کار می‌رود؛ تا زمانی که رابط انتخاب‌شده در دسترس نباشد، ترافیک اسقاط می‌شود.
bridge_namestringbridge<name prefix>پیشوند نام رابط TUN مربوط به bridge که sing-box ایجاد می‌کند. در پلتفرم‌های Apple اثری ندارد.
iproute2_table_indexint2200 + instance index<int>فقط Linux و فقط وقتی interface تنظیم شده باشد: اندیس جدول مسیریابی iproute2 برای مسیرهای خروجی ثابت‌شده.
iproute2_rule_indexint100<int>فقط Linux: اندیس آغازین قواعد iproute2 که bridge نصب می‌کند.

منبع: option/bridge.go:3-8 · ثابت‌شده در v1.14.2 (af6e64c)

مثال‌ها ​

ترافیک مقصد LAN را که TUN گرفته است در L3 از طریق bridge بازارسال کنید و بقیه را از direct بفرستید:

json
{
  "inbounds": [
    {
      "type": "tun",
      "tag": "tun-in",
      "address": ["172.19.0.1/30"],
      "auto_route": true
    }
  ],
  "outbounds": [
    { "type": "direct", "tag": "direct" },
    { "type": "bridge", "tag": "bridge-out" }
  ],
  "route": {
    "rules": [
      {
        "ip_cidr": ["192.168.0.0/16"],
        "preferred_by": ["bridge-out"],
        "outbound": "bridge-out"
      }
    ],
    "final": "direct"
  }
}

نکات ​

  • bridge فقط ترافیک L3 را حمل می‌کند. از طریق یک کنش route به آن می‌رسید که در مرحلهٔ پیش‌تطبیق روی یک ورودی L3 (TUN، WireGuard، Tailscale) تطبیق یابد. اتصال‌هایی که از ورودی‌های L4 (SOCKS، HTTP و …) می‌آیند یا با قواعدی مسیریابی می‌شوند که فقط پس از پیش‌تطبیق تطبیق می‌یابند، با only L3 traffic is supported by bridge شکست می‌خورند.
  • مقصدهای محلیِ خود دستگاه — loopback، آدرس نامشخص یا هر آدرسی که به رابط‌های خود دستگاه اختصاص یافته — با یک هشدار رد می‌شوند. آن‌ها را در قواعد خود مستثنا کنید.
  • preferred_by: ["<bridge tag>"] دروازهٔ پیشنهادی است: برای bridge با هر مقصد غیرمحلی تطبیق می‌یابد و فقط در پیش‌تطبیق، پس هرگز ترافیکی را که bridge نمی‌تواند رسیدگی کند نمی‌گیرد.
  • bridge می‌تواند خروجی پیش‌فرض هم باشد: وقتی در پیش‌تطبیق هیچ قاعده‌ای تطبیق نیابد، بازارسال L3 همچنان اعمال می‌شود (برای گروه‌های خروجی، عضو انتخاب‌شدهٔ فعلی به کار می‌رود). اتصال‌های L4 که به آن برسند رد می‌شوند.
  • مقصدهای FakeIP باید در پیش‌تطبیق با کنش resolve حل شوند، وگرنه اتصال رد می‌شود.
  • برای ICMP، direct نیز می‌تواند در L3 بازارسال کند؛ برای TCP و UDP فقط bridge و نقطه‌انتهایی‌های WireGuard / Tailscale.

نکات بین‌هسته‌ای ​

  • Xray-core و mihomo خروجی بازارسال L3 ندارند: ورودی‌های TUN آن‌ها همیشه TCP / UDP را خاتمه می‌دهند و از طریق یک خروجی دوباره متصل می‌شوند (freedom در Xray، DIRECT در mihomo). به TUN — Xray-core و TUN — mihomo مراجعه کنید.

منبع: option/bridge.go:3-8 · v1.14.2 (af6e64c)

Core Tutorial اثر Argsment