Mixed
mixed 入站是一个 socks4, socks4a, socks5 和 http 服务器。
结构
{
"type": "mixed",
"tag": "mixed-in",
... // 监听字段
"users": [
{
"username": "admin",
"password": "admin"
}
],
"jwt_auth": {
"issuer": "my-issuer",
"audience": ["my-service"],
"algorithm": "HS256",
"hmac_secret": "your-secret-key"
},
"set_system_proxy": false
}
监听字段
参阅 监听字段。
字段
users
SOCKS 和 HTTP 用户。
如果为空则不需要验证。
users 和 jwt_auth 互斥,不能同时使用。
jwt_auth
SOCKS5 和 HTTP 代理的 JWT 身份验证。
启用后,SOCKS5 客户端必须使用用户名/密码进行身份验证,其中密码为 JWT 令牌。
HTTP 客户端必须在请求头中包含 Proxy-Authorization: Bearer <token>。
jwt_auth 和 users 互斥,不能同时使用。
issuer
JWT 签发者字符串。必填。
audience
JWT 受众列表。必填。至少需要指定一个受众。
algorithm
JWT 签名算法。必填。可选值:
| 算法 | 密钥类型 |
|---|---|
| HS256 | HMAC-SHA256 |
| HS384 | HMAC-SHA384 |
| HS512 | HMAC-SHA512 |
| RS256 | RSA-SHA256 |
| RS384 | RSA-SHA384 |
| RS512 | RSA-SHA512 |
| ES256 | ECDSA-SHA256 |
| ES384 | ECDSA-SHA384 |
| ES512 | ECDSA-SHA512 |
hmac_secret
对称算法(HS256/384/512)使用的 HMAC 密钥。使用 HMAC 算法时必填。
public_key_pem
非对称算法(RS/ES)使用的 PEM 编码公钥。使用 RSA 或 ECDSA 算法时必填。
socks_username
SOCKS5 身份验证的用户名。JWT 令牌将作为密码发送。默认值:jwt。
clock_skew
iat/exp 验证允许的时钟偏差。默认值:30s。
JWT 令牌格式
JWT 令牌必须包含以下声明:
| 声明 | 类型 | 描述 |
|---|---|---|
rid |
string | 资源标识符(提取为连接的 ResourceID) |
iss |
string | 签发者(必须与配置的签发者匹配) |
aud |
array | 受众列表(必须与配置的受众有交集) |
iat |
numeric | 签发时间戳 |
exp |
numeric | 过期时间戳 |
生成 JWT 票据
使用内置命令生成用于身份验证的 JWT 票据:
sing-box generate jwt-ticket <数量> [flags]
Flags:
--algorithm string 签名算法 (HS256, HS384, HS512) (默认 "HS256")
--audience strings JWT 受众,可以多次指定 (必填)
--issuer string JWT 签发者 (必填)
--prefix string 生成票据的资源 ID 前缀 (默认 "user")
--secret string 用于签名的 HMAC 密钥/PSK (必填)
--validity string 令牌有效期 (如 24h, 7d, 30d) (默认 "24h")
示例:
# 生成 10 个有效期为 30 天的票据
sing-box generate jwt-ticket 10 \
--issuer "my-service" \
--audience "api-gateway" \
--secret "my-secret-key" \
--prefix "client" \
--validity "30d"
使用示例
SOCKS5 身份验证
使用用户名 jwt(或自定义的 socks_username)和 JWT 令牌作为密码连接:
# 使用 curl 通过 SOCKS5
curl --socks5 username:jwt --proxy-user username:jwt \
--proxy socks5://127.0.0.1:1080 \
https://example.com
HTTP 身份验证
在 Proxy-Authorization 请求头中使用 Bearer 令牌:
curl -x http://127.0.0.1:8080 \
-H "Proxy-Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
https://example.com
set_system_proxy
仅支持 Linux、Android、Windows 和 macOS。
要在无特权的 Android 和 iOS 上工作,请改用 tun.platform.http_proxy。
启动时自动设置系统代理,停止时自动清理。