Skip to content

HTTP & SOCKS — sing-box

sing-box ‏HTTP، SOCKS و یک ورودی ترکیبی «mixed» (HTTP+SOCKS روی همان پورت) را در یک فایل منبع واحد بسته‌بندی می‌کند. HTTP خروجی به‌طور اختیاری جریان CONNECT را در TLS می‌پیچد، و SOCKS خروجی از v4، v4a و v5 با قاب‌بندی اختیاری udp_over_tcp پشتیبانی می‌کند.

SOCKS

ورودی

type: "socks":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
users[]auth.User[][{username, password}]فهرست کاربران. خالی احراز هویت را غیرفعال می‌کند.
domain_resolver*DomainResolveOptions(default)DomainResolveOptionsبازنویسی نحوهٔ resolve شدن نام میزبان مقصد برای این ورودی.

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

این ساختار همچنین ListenOptions (آدرس شنود، پورت، sniff، …) را درون خود جای می‌دهد.

خروجی

type: "socks":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
versionstring54 | 4a | 5نسخهٔ پروتکل SOCKS. v4 ‏SOCKS4 خام است؛ v4a حل نام میزبان از راه دور را اضافه می‌کند؛ v5 پیش‌فرض مدرن است.
usernamestring(unset)<string>نام‌کاربری احراز هویت بالادست (فقط v5).
passwordstring(unset)<string>گذرواژهٔ احراز هویت بالادست.
networkNetworkList(tcp+udp)tcp | udp | محدود کردن به فقط TCP یا فقط UDP.
udp_over_tcp*UDPOverTCPOptions(disabled)UDPOverTCPOptionsبسته‌های UDP را داخل کانال کنترل TCP بسته‌بندی می‌کند. وقتی پراکسی بالادست از UDP-associate پشتیبانی نمی‌کند مفید است.

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

DialerOptions و ServerOptions (server، server_port) را درون خود جای می‌دهد.

HTTP / Mixed

انواع ورودی http و mixed یک ساختار Go مشترک (HTTPMixedInboundOptions) را به اشتراک می‌گذارند. وقتی فیلد type مقدار mixed باشد، ورودی هم درخواست‌های HTTP CONNECT و هم دست‌دهی‌های SOCKS5 را روی همان پورت می‌پذیرد — اولین بایت درخواست کلاینت تعیین می‌کند کدام پروتکل در حال صحبت است.

ورودی (type: "http" یا type: "mixed")

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
users[]auth.User[][{username, password}]فهرست کاربران.
domain_resolver*DomainResolveOptions(default)DomainResolveOptionsبازنویسی حل‌کنندهٔ دامنه برای هر ورودی.
set_system_proxyboolfalsetrue | falseوقتی true باشد، sing-box تنظیمات پراکسی سیستم‌عامل را در زمان شروع برنامه‌ریزی می‌کند تا به این شنونده اشاره کند. در زمان خاموشی بازگردانده می‌شود.

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

ListenOptions و InboundTLSOptionsContainer را درون خود جای می‌دهد (این ورودی می‌تواند HTTP را روی TLS سرو کند — پراکسی HTTPS به سبک مدرن Squid).

خروجی

type: "http":

فیلدنوعپیش‌فرضمقادیر مجازتوضیحات
usernamestring(unset)<string>نام‌کاربری احراز هویت بالادست.
passwordstring(unset)<string>گذرواژهٔ احراز هویت بالادست.
pathstring(unset)/<path>پیشوند مسیر اضافه‌شده به خط درخواست CONNECT. خالی از پیش‌فرض موردانتظار بالادست استفاده می‌کند.
headersbadoption.HTTPHeader{}{<header>: <value or list>}هدرهای HTTP اضافی که به هر درخواست CONNECT اضافه می‌شوند.

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

DialerOptions، ServerOptions و OutboundTLSOptionsContainer را درون خود جای می‌دهد (tls این را به یک خروجی به سمت یک پراکسی HTTPS تبدیل می‌کند).

مثال‌ها

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

json
{
  "inbounds": [
    {
      "type": "mixed",
      "tag": "mixed-in",
      "listen": "127.0.0.1",
      "listen_port": 7890,
      "users": [
        { "username": "alice", "password": "<password>" }
      ]
    }
  ]
}

ورودی پراکسی HTTPS (HTTP روی TLS):

json
{
  "inbounds": [
    {
      "type": "http",
      "tag": "https-proxy-in",
      "listen": "0.0.0.0",
      "listen_port": 8443,
      "users": [{ "username": "alice", "password": "<password>" }],
      "tls": {
        "enabled": true,
        "certificate_path": "/etc/ssl/cert.pem",
        "key_path": "/etc/ssl/key.pem"
      }
    }
  ]
}

خروجی SOCKS5 با UoT:

json
{
  "outbounds": [
    {
      "type": "socks",
      "tag": "via-socks",
      "server": "upstream.example.com",
      "server_port": 1080,
      "version": "5",
      "username": "alice",
      "password": "<password>",
      "udp_over_tcp": { "enabled": true, "version": 2 }
    }
  ]
}

نکات

  • شناسایی پروتکل با اولین بایت ورودی mixed به این معنی است که یک کلاینت بدرفتار که نه HTTP و نه SOCKS صحبت می‌کند بلافاصله بسته می‌شود به‌جای اینکه شنونده را مسدود کند.
  • set_system_proxy فقط در بسترهایی کار می‌کند که sing-box یک API پراکسی سیستم دارد (Windows، macOS، GNOME). در سایر سیستم‌ها بی‌صدا نادیده گرفته می‌شود.
  • version: "4a" تنها راه ارسال نام میزبان به یک سرور SOCKS4 است (SOCKS4 ساده فقط مقصدهای IPv4 را حمل می‌کند).
  • فیلد path در خروجی HTTP وجود دارد چون برخی پراکسی‌های CONNECT بالادست به یک پیشوند مسیر صریح (PUT /forward HTTP/1.1) برای مسیریابی نیاز دارند — اکثر آنها نیاز ندارند، در این صورت آن را خالی بگذارید.

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

  • Xray-core ‏HTTP و SOCKS را در فایل‌های جداگانه نگه می‌دارد، از accounts[] (نه users[]) و user/pass (نه username/password) استفاده می‌کند و ورودی «mixed» ندارد — دو ورودی جداگانه روی پورت‌های مختلف اجرا کنید. به HTTP & SOCKS — Xray-core مراجعه کنید.
  • mihomo ورودی‌ها را به سه نوع شنونده تقسیم می‌کند (http، socks، mixed) و از نام فیلدهای kebab-case (skip-cert-verify و غیره) استفاده می‌کند. به HTTP & SOCKS — mihomo مراجعه کنید.

منبع: option/simple.go:8-40 · v1.13.11 (553cfa1)

Core Tutorial اثر Argsment