Skip to content

WireGuard — sing-box

نقطه‌انتهایی، نه خروجی

WireGuard در sing-box 1.11+ به‌عنوان نقطه‌انتهایی پیکربندی می‌شود، نه به‌عنوان خروجی. این بلوک زیر آرایهٔ ریشهٔ endpoints[] با type: "wireguard" قرار می‌گیرد و از قواعد مسیریابی مانند هر خروجی نام‌گذاری‌شده ارجاع داده می‌شود.

گزینه‌های نقطه‌انتهایی

type: "wireguard" زیر endpoints[]:

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
systemboolfalsetrue | falseاستفاده از دستگاه TUN سیستم‌عامل به‌جای پشتهٔ gVisor در فضای کاربر. توان عبور بالاتر، اما در اکثر بسترها به امتیازات بالا نیاز دارد.
namestring(auto)<string>نام نمایشی برای نقطه‌انتهایی. در آمار و موتور مسیریابی استفاده می‌شود.
mtuuint321408<bytes>MTU تونل. مقدار پیش‌فرض ۱۴۰۸ است (۱۲ بایت کمتر از ۱۴۲۰ Xray چون sing-box سربار هدر IPv6 روی بستهٔ داخلی را حساب می‌کند).
addressbadoption.Listable[netip.Prefix](required)[<CIDR>]آدرس‌های محلی تونل، فهرستی از `netip.Prefix`. حداقل یک ورودی الزامی است.
private_keystring(required)<base64 key>کلید خصوصی محلی، ۳۲ بایت با کدگذاری base64.
listen_portuint160 (random)<port>پورت UDP که برای بسته‌های خروجی WireGuard استفاده می‌شود. مقدار ۰ یک پورت تصادفی موقت انتخاب می‌کند.
peers[]WireGuardPeer[][WireGuardPeer]همتایان راه دور.
udp_timeoutbadoption.Duration5m<duration>مهلت بیکاری برای نشست زیرین UDP، که توسط جدول نشست gVisor استفاده می‌شود.
workersint(CPU-based)<int>تعداد کارگرهای خط لولهٔ رمزنگاری. مقدار ۰ از runtime.NumCPU() استفاده می‌کند.

منبع: option/wireguard.go:9-20 · ثابت‌شده در v1.13.11 (553cfa1)

این ساختار همچنین DialerOptions را برای سوکت UDP زیرین درون خود جای می‌دهد — bind_interface، routing_mark، detour و غیره.

peers[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
addressstring(unset)<host>میزبان یا IP همتا. وقتی نام میزبان داده می‌شود در زمان دست‌دهی resolve می‌شود.
portuint1651820<port>پورت UDP همتا.
public_keystring(required)<base64 key>کلید عمومی همتا، ۳۲ بایت با کدگذاری base64.
pre_shared_keystring(unset)<base64 key>کلید از پیش به‌اشتراک‌گذاشته‌شدهٔ اختیاری (۳۲ بایت base64) برای آمیختن اضافی در دست‌دهی.
allowed_ipsbadoption.Listable[netip.Prefix][][<CIDR>]CIDRهای مبدأ/مقصد که به این همتا مسیریابی می‌شوند.
persistent_keepalive_intervaluint160<seconds>فاصلهٔ persistent-keepalive ‏WireGuard. مقدار ۰ keepalive را غیرفعال می‌کند.
reserved[]uint8(empty)<3 bytes>بازنویسی فیلد رزرو ۳ بایتی WireGuard که برخی ارائه‌دهندگان تجاری استفاده می‌کنند.

منبع: option/wireguard.go:22-30 · ثابت‌شده در v1.13.11 (553cfa1)

مثال‌ها

تک‌همتا با TUN سیستم:

json
{
  "endpoints": [
    {
      "type": "wireguard",
      "tag": "wg-ep",
      "system": true,
      "name": "wg0",
      "address": ["10.0.0.2/32", "fd00::2/128"],
      "private_key": "<base64-private-key>",
      "mtu": 1408,
      "peers": [
        {
          "address": "wg.example.com",
          "port": 51820,
          "public_key": "<base64-peer-public-key>",
          "allowed_ips": ["0.0.0.0/0", "::/0"],
          "persistent_keepalive_interval": 25
        }
      ]
    }
  ],
  "route": {
    "rules": [
      { "domain": ["geosite-private"], "outbound": "wg-ep" }
    ]
  }
}

دستگاه فضای کاربر (بدون TUN سیستم) برای اجراهای بدون امتیاز:

json
{
  "endpoints": [
    {
      "type": "wireguard",
      "tag": "wg-userspace",
      "system": false,
      "address": ["172.16.0.2/24"],
      "private_key": "<base64>",
      "peers": [
        { "address": "1.2.3.4", "port": 51820, "public_key": "<base64>", "allowed_ips": ["0.0.0.0/0"] }
      ]
    }
  ]
}

نکات

  • WireGuard در sing-box فعلی همیشه یک نقطه‌انتهایی است. پیکربندی‌های پیش از 1.11 که از outbound: { type: wireguard } استفاده می‌کردند بارگذاری نمی‌شوند — به مدل endpoints مهاجرت کنید.
  • system: true از دستگاه TUN بستر مستقیماً استفاده می‌کند. سریع‌تر است اما به root / Administrator نیاز دارد. system: false (پیش‌فرض) از پشتهٔ TCP/IP فضای کاربر gVisor استفاده می‌کند — کندتر اما بدون امتیاز.
  • کلیدها باید base64 باشند (۳۲ بایت خام، سپس base64). کلیدهای hex (که Xray می‌پذیرد) در اینجا پشتیبانی نمی‌شوند.
  • MTU پیش‌فرض 1408 است، نه ۱۴۲۰ قالب سیمی — sing-box ‏۱۲ بایت برای سربار هدر IPv6 داخلی رزرو می‌کند.

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

  • Xray-core ‏WireGuard را به‌عنوان یک خروجی به سبک پروتکل زیر outbounds[] با protocol: "wireguard" نگه می‌دارد. کلیدهای hex یا base64 را می‌پذیرد، MTU را به‌طور پیش‌فرض ۱۴۲۰ قرار می‌دهد. به WireGuard — Xray-core مراجعه کنید.
  • mihomo نیز آن را به‌عنوان یک خروجی با یک شکل تک‌همتای ساده‌شده (سطح بالای server/port/public-key/allowed-ips) و یک بلوک اختیاری amnezia-wg-option نگه می‌دارد. به WireGuard — mihomo مراجعه کنید.

منبع: option/wireguard.go:9-30 · v1.13.11 (553cfa1)

Core Tutorial اثر Argsment