跳转至

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 用户。

如果为空则不需要验证。

usersjwt_auth 互斥,不能同时使用。

jwt_auth

SOCKS5 和 HTTP 代理的 JWT 身份验证。

启用后,SOCKS5 客户端必须使用用户名/密码进行身份验证,其中密码为 JWT 令牌。 HTTP 客户端必须在请求头中包含 Proxy-Authorization: Bearer <token>

jwt_authusers 互斥,不能同时使用。

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。

启动时自动设置系统代理,停止时自动清理。