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:150 مراجعه کنید.
address[]string[10.0.0.1, fd59:...:0001][<CIDR or IP>]آدرس(های) رابط محلی. در صورت حذف، دو IP بوگون استفاده می‌شود (یک IPv4 و یک IPv6).
peers[]*WireGuardPeerConfig[][WireGuardPeerConfig]همتایان راه‌دور. برای پیکربندی استاندارد تک‌همتا این یک فهرست تک‌عضوی است.
mtuint321420<bytes>MTU تونل. 0 با 1420 (پیش‌فرض قالب سیمی WireGuard) جایگزین می‌شود.
reserved[]byte(empty)<3 bytes>بازنویسی فیلد رزروی سه‌بایتی (که برخی پیاده‌سازی‌های تجاری WG استفاده می‌کنند). باید خالی یا دقیقاً 3 بایت باشد.
domainStrategystringforceipforceip | forceipv4 | forceipv6 | forceipv4v6 | forceipv6v4نحوهٔ تفکیک نام میزبان نقطه‌انتهایی همتا. اشکال چهارحرفی کنترل می‌کنند کدام خانواده اول امتحان شود (v4v6 = ابتدا IPv4 سپس fallback به IPv6).
remoteDNS[]string[1.1.1.1, 1.0.0.1, 2606:4700:4700::1111, 2606:4700:4700::1001][<IP>, …] | ["local"]فقط خروجی. سرورهای DNS که وقتی مقصد یک دامنه است از درون تونل پرس‌وجو می‌شوند؛ سپس domainStrategy خانوادهٔ آدرس را از پاسخ برمی‌گزیند. مدخل‌ها باید IP صریح باشند. یک مدخل تکی "local" به‌جای آن با ماژول DNS خود Xray حل می‌کند. پاسخ‌ها به اندازهٔ TTL خود در حافظهٔ نهان نگه داشته می‌شوند.

منبع: infra/conf/wireguard.go:59-70 · ثابت‌شده در v26.9.9 (52a412d)

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های مبدأ/مقصد که به این همتا مسیریابی می‌شوند. در صورت حذف به‌طور پیش‌فرض همه مسیرها فعال است.
leveluint320<uint32>سطح policy برای این همتا. فقط ورودی (سمت سرور) — هر همتا به‌عنوان یک کاربر ثبت می‌شود.
emailstring(unset)<string>شناسهٔ همتا که در آمار/لاگ نشان داده می‌شود. فقط ورودی (سمت سرور).

منبع: infra/conf/wireguard.go:17-26 · ثابت‌شده در v26.9.9 (52a412d)

مثال‌ها ​

خروجی به یک همتای 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:157-172).
  • address در صورت حذف به IPهای بوگون پیش‌فرض می‌شود که برای پیکربندی فقط-خروجی کار می‌کند اما هر ترافیکی که از رابط WireGuard به‌عنوان آدرس مبدأ خود استفاده می‌کند را خراب می‌کند. برای هر پیکربندی غیر پیش‌پاافتاده این را به‌صراحت تنظیم کنید.
  • mtu: 0 در زمان ساخت بی‌صدا به 1420 بازنویسی می‌شود (infra/conf/wireguard.go:117-121).
  • reserved باید خالی یا دقیقاً 3 بایت باشد. آرایه با طول 2 یا 4 ساخته نمی‌شود (infra/conf/wireguard.go:123-125).
  • پرچم noKernelTun تنها راه انصراف از مسیر سریع kernel-TUN در Linux است. سایر سکوها همیشه از wireguard-go در فضای کاربر استفاده می‌کنند.
  • در یک بلوک ورودی (سمت سرور)، هر مدخل peers[] به‌عنوان یک کاربر ثبت می‌شود: email و level آن به آمار/لاگ و policy تغذیه می‌شوند (infra/conf/wireguard.go:98-114). در یک خروجی هر دو فیلد نادیده گرفته می‌شوند.

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

  • sing-box WireGuard را به‌صورت نقطه‌انتهایی پیکربندی می‌کند — برای شکل فیلدها (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:17-70 · v26.9.9 (52a412d)

Core Tutorial اثر Argsment