Skip to content

WireGuard — Xray-core

Xray-core یک پیاده‌سازی WireGuard در فضای کاربر دارد که به‌عنوان یک پروتکل در هر دو طرف اجرا می‌شود. در Linux، یک مسیر سریع اختیاری kernel-TUN در دسترس است — noKernelTun: true را تنظیم کنید تا به دستگاه wireguard-go در فضای کاربر بازگردید.

تنظیمات

settings برای یک خروجی یا ورودی با "protocol": "wireguard":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
noKernelTunboolfalsetrue | falseغیرفعال‌سازی مسیر سریع kernel-TUN (فقط Linux) و اجرای دستگاه wireguard-go در فضای کاربر. برای اجراهای بدون مجوز سودمند است.
secretKeystring(required)<key>کلید خصوصی محلی. hex (64 کاراکتر)، base64 (پدد یا بدون پدد) یا base64 با URL-safe را می‌پذیرد — به ParseWireGuardKey در infra/conf/wireguard.go:126 مراجعه کنید.
address[]string[10.0.0.1, fd59:...:0001][<CIDR or IP>]آدرس(های) رابط محلی. در صورت حذف، دو IP بوگون استفاده می‌شود (یک IPv4 و یک IPv6).
peers[]*WireGuardPeerConfig[][WireGuardPeerConfig]همتایان راه‌دور. برای پیکربندی استاندارد تک‌همتا این یک فهرست تک‌عضوی است.
mtuint321420<bytes>MTU تونل. 0 با 1420 (پیش‌فرض قالب سیمی WireGuard) جایگزین می‌شود.
workersint320 (CPU-based)<int>تعداد گوروتین‌های کارگر برای خط لولهٔ رمزنگاری. 0 از runtime.NumCPU() استفاده می‌کند.
reserved[]byte(empty)<3 bytes>بازنویسی فیلد رزروی سه‌بایتی (که برخی پیاده‌سازی‌های تجاری WG استفاده می‌کنند). باید خالی یا دقیقاً 3 بایت باشد.
domainStrategystringforceipforceip | forceipv4 | forceipv6 | forceipv4v6 | forceipv6v4نحوهٔ تفکیک نام میزبان نقطه‌انتهایی همتا. اشکال چهارحرفی کنترل می‌کنند کدام خانواده اول امتحان شود (v4v6 = ابتدا IPv4 سپس fallback به IPv6).

منبع: infra/conf/wireguard.go:51-62 · ثابت‌شده در v1.260327.0 (d2758a0)

peers[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
publicKeystring(required)<key>کلید عمومی همتا. همان قالب‌های `secretKey` را می‌پذیرد.
preSharedKeystring(unset)<key>PSK اختیاری برای امنیت اضافی دست‌دهی.
endpointstring(required for outbound)<host:port>محل دسترسی به همتا. نام میزبان مجاز است و در زمان دست‌دهی دوباره تفکیک می‌شود.
keepAliveuint320<seconds>بازهٔ persistent-keepalive وایرگارد. 0 keepalive را غیرفعال می‌کند.
allowedIPs[]string["0.0.0.0/0", "::0/0"][<CIDR>]CIDRهای مبدأ/مقصد که به این همتا مسیریابی می‌شوند. در صورت حذف به‌طور پیش‌فرض همه مسیرها فعال است.

منبع: infra/conf/wireguard.go:13-19 · ثابت‌شده در v1.260327.0 (d2758a0)

مثال‌ها

خروجی به یک همتای WireGuard تنها:

json
{
  "outbounds": [
    {
      "tag": "wg-out",
      "protocol": "wireguard",
      "settings": {
        "secretKey": "<base64-private-key>",
        "address": ["10.0.0.2/32", "fd00:dead:beef::2/128"],
        "mtu": 1420,
        "peers": [
          {
            "publicKey": "<base64-peer-public-key>",
            "endpoint": "wg.example.com:51820",
            "allowedIPs": ["0.0.0.0/0", "::/0"],
            "keepAlive": 25
          }
        ],
        "domainStrategy": "forceipv4v6"
      }
    }
  ]
}

خروجی با فیلد رزروی 3 بایتی (برخی ارائه‌دهندگان تجاری):

json
{
  "outbounds": [
    {
      "tag": "wg-cloak",
      "protocol": "wireguard",
      "settings": {
        "secretKey": "<base64>",
        "address": ["172.16.0.2/32"],
        "reserved": [123, 45, 67],
        "peers": [
          { "publicKey": "<base64>", "endpoint": "engage.cloudflareclient.com:2408" }
        ]
      }
    }
  ]
}

نکات

  • کلیدها به‌صورت داخلی به hex نرمال می‌شوند. hex (64 کاراکتر hex)، base64 پدد و base64 با URL-safe همگی در ورودی پذیرفته می‌شوند (infra/conf/wireguard.go:133-148).
  • address در صورت حذف به IPهای بوگون پیش‌فرض می‌شود که برای پیکربندی فقط-خروجی کار می‌کند اما هر ترافیکی که از رابط WireGuard به‌عنوان آدرس مبدأ خود استفاده می‌کند را خراب می‌کند. برای هر پیکربندی غیر پیش‌پاافتاده این را به‌صراحت تنظیم کنید.
  • mtu: 0 در زمان ساخت بی‌صدا به 1420 بازنویسی می‌شود (infra/conf/wireguard.go:91-95).
  • reserved باید خالی یا دقیقاً 3 بایت باشد. آرایه با طول 2 یا 4 ساخته نمی‌شود (infra/conf/wireguard.go:100-102).
  • پرچم noKernelTun تنها راه انصراف از مسیر سریع kernel-TUN در Linux است. سایر سکوها همیشه از wireguard-go در فضای کاربر استفاده می‌کنند.

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

  • sing-box در 1.11+ WireGuard را به مدل endpoints منتقل کرده است — برای اشکال جدید فیلد (private_key, address, peers[], udp_timeout) به WireGuard — sing-box مراجعه کنید.
  • mihomo یک شکل ساده‌شدهٔ تک‌همتا (سطح بالا server/port/public-key/allowed-ips) یا یک فهرست کامل peers: را می‌پذیرد و یک بلوک amnezia-wg-option برای سازگاری با AmneziaWG نمایان می‌سازد. به WireGuard — mihomo مراجعه کنید.

منبع: infra/conf/wireguard.go:13-62 · v1.260327.0 (d2758a0)

Core Tutorial اثر Argsment