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":
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
version | string | 5 | 4 | 4a | 5 | نسخهٔ پروتکل SOCKS. v4 SOCKS4 خام است؛ v4a حل نام میزبان از راه دور را اضافه میکند؛ v5 پیشفرض مدرن است. |
username | string | (unset) | <string> | نامکاربری احراز هویت بالادست (فقط v5). |
password | string | (unset) | <string> | گذرواژهٔ احراز هویت بالادست. |
network | NetworkList | (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_proxy | bool | false | true | false | وقتی true باشد، sing-box تنظیمات پراکسی سیستمعامل را در زمان شروع برنامهریزی میکند تا به این شنونده اشاره کند. در زمان خاموشی بازگردانده میشود. |
منبع: option/simple.go:14-20 · ثابتشده در v1.13.11 (553cfa1)
ListenOptions و InboundTLSOptionsContainer را درون خود جای میدهد (این ورودی میتواند HTTP را روی TLS سرو کند — پراکسی HTTPS به سبک مدرن Squid).
خروجی
type: "http":
| فیلد | نوع | پیشفرض | مقادیر مجاز | توضیحات |
|---|---|---|---|---|
username | string | (unset) | <string> | نامکاربری احراز هویت بالادست. |
password | string | (unset) | <string> | گذرواژهٔ احراز هویت بالادست. |
path | string | (unset) | /<path> | پیشوند مسیر اضافهشده به خط درخواست CONNECT. خالی از پیشفرض موردانتظار بالادست استفاده میکند. |
headers | badoption.HTTPHeader | {} | {<header>: <value or list>} | هدرهای HTTP اضافی که به هر درخواست CONNECT اضافه میشوند. |
منبع: option/simple.go:32-40 · ثابتشده در v1.13.11 (553cfa1)
DialerOptions، ServerOptions و OutboundTLSOptionsContainer را درون خود جای میدهد (tls این را به یک خروجی به سمت یک پراکسی HTTPS تبدیل میکند).
مثالها
ورودی mixed با یک کاربر:
{
"inbounds": [
{
"type": "mixed",
"tag": "mixed-in",
"listen": "127.0.0.1",
"listen_port": 7890,
"users": [
{ "username": "alice", "password": "<password>" }
]
}
]
}ورودی پراکسی HTTPS (HTTP روی TLS):
{
"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:
{
"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)
