HTTP & SOCKS — sing-box
sing-box 把 HTTP、SOCKS 以及合并的 "mixed" 入站(同一端口上的 HTTP + SOCKS)打包在一个源文件里。出站 HTTP 可选用 TLS 包裹 CONNECT 流;出站 SOCKS 支持 v4、v4a、v5,并可选启用 udp_over_tcp 帧。
SOCKS
入站
type: "socks":
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
users | []auth.User | [] | [{username, password}] | 用户列表。为空则禁用鉴权。 |
domain_resolver | *DomainResolveOptions | (default) | DomainResolveOptions | 覆盖该入站的目的主机名解析方式。 |
源码: option/simple.go:8-12 · 锚定版本 v1.13.11 (553cfa1)
该结构体还内嵌 ListenOptions(监听地址、端口、嗅探等)。
出站
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(入站可在 TLS 之上提供 HTTP —— 现代 Squid 风格的 HTTPS 代理)。
出站
type: "http":
| 字段 | 类型 | 默认值 | 允许值 | 描述 |
|---|---|---|---|---|
username | string | (unset) | <string> | 上游鉴权用户名。 |
password | string | (unset) | <string> | 上游鉴权密码。 |
path | string | (unset) | /<path> | 添加到 CONNECT 请求行的路径前缀。空值使用上游期望的默认。 |
headers | badoption.HTTPHeader | {} | {<header>: <value or list>} | 每个 CONNECT 请求附加的 HTTP 头。 |
源码: 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 over 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"
}
}
]
}启用 UoT 的 SOCKS5 出站:
{
"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 目标)。- HTTP 出站的
path字段存在是因为部分上游 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)
