Skip to content

HTTP & SOCKS — Xray-core

پروتکل‌های پراکسی همگانی. HTTP از CONNECT و حالت قدیمی پراکسی شفاف پشتیبانی می‌کند؛ SOCKS از هر دو v4a و v5 پشتیبانی می‌کند (نسخه از اولین بایتی که کلاینت ارسال می‌کند به‌صورت خودکار تشخیص داده می‌شود).

HTTP

ورودی

settings برای "protocol": "http":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
accounts[]*HTTPAccount[][HTTPAccount]فهرست کاربران. خالی احراز هویت را غیرفعال می‌کند (ورودی به یک پراکسی باز تبدیل می‌شود).
allowTransparentboolfalsetrue | falseوقتی true باشد، ورودی درخواست‌های بدون CONNECT را می‌پذیرد و به‌عنوان پراکسی شفاف HTTP ارسال می‌کند.
userLeveluint320<uint32>سطح policy پیش‌فرض برای کلاینت‌هایی بدون بازنویسی به ازای کاربر.

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

accounts[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
userstring(required)<string>نام کاربری برای HTTP Basic auth.
passstring(required)<string>گذرواژه برای HTTP Basic auth.

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

خروجی

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

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
address*Address(unset)<host>شکل ساده‌شده — میزبان پراکسی بالادست.
portuint16(required with address)<port>پورت پراکسی بالادست.
leveluint320<uint32>سطح policy.
emailstring(unset)<string>برچسب در آمار و لاگ.
userstring(unset)<string>نام کاربری برای auth بالادست.
passstring(unset)<string>گذرواژه برای auth بالادست.
servers[]*HTTPRemoteConfig(use simplified shape)[HTTPRemoteConfig]شکل کامل با دقیقاً یک سرور.
headersmap[string]string{}{<header>: <value>}سرآیندهای HTTP اضافی که در هر درخواست ارسال می‌شوند.

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

servers[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
address*Address(required)<host>میزبان پراکسی بالادست.
portuint16(required)<port>پورت پراکسی بالادست.
users[]json.RawMessage[][HTTPAccount]کاربران auth اختیاری (حداکثر یک).

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

SOCKS

ورودی

settings برای "protocol": "socks":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
authstringnoauthnoauth | passwordحالت احراز هویت. مقادیر ناشناخته بی‌صدا به `noauth` بازمی‌گردند (`infra/conf/socks.go:45-47`).
accounts[]*SocksAccount[][SocksAccount]فهرست کاربران برای `auth: password`.
udpboolfalsetrue | falseفعال‌سازی پشتیبانی UDP-associate در SOCKS5.
ip*Address(unset)<address>آدرس عمومی اعلام‌شده در پاسخ‌های UDP-associate. وقتی شنونده پشت NAT است الزامی است.
userLeveluint320<uint32>سطح policy پیش‌فرض.

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

accounts[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
userstring(required)<string>نام کاربری.
passstring(required)<string>گذرواژه.

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

خروجی

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

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
address*Address(unset)<host>شکل ساده‌شده — میزبان SOCKS بالادست.
portuint16(required with address)<port>پورت SOCKS بالادست.
leveluint320<uint32>سطح policy.
emailstring(unset)<string>برچسب آمار.
userstring(unset)<string>نام کاربری auth.
passstring(unset)<string>گذرواژه auth.
servers[]*SocksRemoteConfig(use simplified shape)[SocksRemoteConfig]شکل کامل با دقیقاً یک سرور.

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

servers[]

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
address*Address(required)<host>میزبان SOCKS بالادست.
portuint16(required)<port>پورت SOCKS بالادست.
users[]json.RawMessage[][SocksAccount]کاربران auth اختیاری.

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

مثال‌ها

ورودی HTTP با دو کاربر:

json
{
  "inbounds": [
    {
      "tag": "http-in",
      "listen": "127.0.0.1",
      "port": 1080,
      "protocol": "http",
      "settings": {
        "accounts": [
          { "user": "alice", "pass": "<password>" },
          { "user": "bob",   "pass": "<password>" }
        ],
        "allowTransparent": false
      }
    }
  ]
}

ورودی SOCKS5 با UDP-associate:

json
{
  "inbounds": [
    {
      "tag": "socks-in",
      "listen": "0.0.0.0",
      "port": 1081,
      "protocol": "socks",
      "settings": {
        "auth": "password",
        "accounts": [{ "user": "alice", "pass": "<password>" }],
        "udp": true,
        "ip": "203.0.113.10"
      }
    }
  ]
}

خروجی به یک پراکسی HTTP بالادست:

json
{
  "outbounds": [
    {
      "tag": "via-http",
      "protocol": "http",
      "settings": {
        "address": "upstream.example.com",
        "port": 8080,
        "user": "alice",
        "pass": "<password>",
        "headers": { "X-Forwarded-Proto": "https" }
      }
    }
  ]
}

نکات

  • ورودی HTTP بدون حساب به‌عنوان یک پراکسی باز عمل می‌کند. آن را با listen: "127.0.0.1"، یک قاعدهٔ مسیریابی که منابع بیرونی را رد می‌کند، یا هر دو محدود کنید.
  • allowTransparent: true به‌ندرت چیزی است که می‌خواهید. حالت قدیمی سبک V2Ray «ورودی را به‌عنوان ارسال‌کنندهٔ شفاف استفاده کنید» را فعال می‌کند که با متد CONNECT صریح-پراکسی برخورد می‌کند. مگر مورد استفادهٔ مشخصی داشته باشید آن را خاموش بگذارید.
  • auth: "password" تنها راه نیازمند ساختن اعتبارنامه‌ها در SOCKS است. رشته‌های روش auth ناشناخته بی‌صدا به noauth تنزل می‌یابند — برای اشتباه تایپی خطایی نیست (infra/conf/socks.go:45-47).
  • فیلد ip در SOCKS آدرس عمومی قابل دسترسی است که در پاسخ‌های UDP-associate اعلام می‌شود. بدون آن، کلاینت‌های آن سوی NAT یک آدرس داخلی غیرقابل مسیریابی دریافت خواهند کرد.
  • هر دو خروجی HTTP و SOCKS از الگوی ساده‌شده در برابر servers[] استفاده می‌کنند — servers[] باید دقیقاً یک مدخل داشته باشد.

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

  • sing-box HTTP و SOCKS را در یک فایل منبع (option/simple.go) ادغام می‌کند و یک ورودی سوم «mixed» را نمایان می‌سازد که هر دو را روی یک پورت سرویس می‌دهد. به HTTP & SOCKS — sing-box مراجعه کنید.
  • mihomo از username/password (نه user/pass) روی خروجی استفاده می‌کند، شنوندگان ورودی را به سه نوع (http, socks, mixed) تقسیم می‌کند و از HTTP/SOCKS پیچیده در TLS از طریق فیلد گواهی شنونده پشتیبانی می‌کند. به HTTP & SOCKS — mihomo مراجعه کنید.

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

Core Tutorial اثر Argsment