Skip to content

对比 —— 选择内核 ​

三个内核覆盖的功能高度重叠,但设计哲学差异显著。本页将差异集中归纳,便于你挑选合适的工具并在三者之间迁移。

功能支持一览 ​

功能Xray-coresing-boxmihomo
配置格式JSONJSONYAML
VLESS✓✓✓
VMess✓(仅 AEAD)✓✓
Trojan✓(无 flow)✓✓
Shadowsocks(含 2022)✓✓✓
ShadowsocksR——✓
Hysteria2✓(拆分配置)✓✓
TUIC—✓(v5)✓(v4 + v5)
WireGuard出站端点出站
Naive—✓—
AnyTLS—✓✓
SSH—✓✓
Tor—✓—
Snell—✓(v4–v6)✓(v1–v5)
OpenVPN—端点出站
HTTP / SOCKS✓✓(含 mixed)✓(含 mixed)
Dokodemo / 端口转发专用借由 Direct专用
TUN 入站最小完整完整
重定向 / TProxydokodemo + sockopt专用快捷字段 + 监听器
TLS / uTLS / REALITY / ECH✓✓✓
路由JSON 规则 + 负载均衡器结构化规则 + 动作紧凑字符串
DNS服务器 URL 列表类型化服务器URL 列表 + 策略映射
规则提供方—(仅内置 geo)rule-setrule-providers
代理组负载均衡器(4 种策略)selector / urltestselect / url-test / fallback / load-balance
统计 / PrometheusgRPC + metricsclash_api + v2ray_api + api 服务Clash API

字段命名差异(同一功能的三种命名) ​

VLESS / VMess 用户列表 ​

概念Xraysing-boxmihomo
用户 UUID 字段clients[].idusers[].uuiduuid
用户名字段clients[].emailusers[].nameusername
单用户 flowclients[].flowusers[].flowflow

Shadowsocks 加密 ​

  • Xray / sing-box:method
  • mihomo:cipher

服务器 / 端口对 ​

  • Xray 入站:listen + port
  • Xray 出站:address + port(简化形式)或 servers[].address + servers[].port
  • sing-box 入站:listen + listen_port
  • sing-box 出站:server + server_port
  • mihomo:listen + port(入站监听器)/ server + port(出站)

跳过证书验证 ​

  • Xray:tlsSettings.allowInsecure
  • sing-box:tls.insecure
  • mihomo:每个适配器自带 skip-cert-verify

uTLS 指纹 ​

  • Xray:tlsSettings.fingerprint
  • sing-box:tls.utls: { enabled, fingerprint }
  • mihomo:每个适配器自带 client-fingerprint(也可使用顶层 global-client-fingerprint)

多路复用(mux) ​

  • Xray:streamSettings.sockopt(能力有限)
  • sing-box:在入站 / 出站上添加 multiplex: { ... }
  • mihomo:入站监听器上的 mux-option(sing 风格的 mux)

迁移示例 ​

从 Xray VLESS 迁移到 sing-box VLESS ​

Xray:

json
{
  "outbounds": [{
    "protocol": "vless",
    "settings": {
      "vnext": [{
        "address": "example.com",
        "port": 443,
        "users": [{ "id": "abc...", "flow": "xtls-rprx-vision" }]
      }]
    },
    "streamSettings": {
      "security": "reality",
      "realitySettings": { "publicKey": "...", "shortId": "...", "serverName": "cdn.com" }
    }
  }]
}

对应的 sing-box:

json
{
  "outbounds": [{
    "type": "vless",
    "server": "example.com",
    "server_port": 443,
    "uuid": "abc...",
    "flow": "xtls-rprx-vision",
    "tls": {
      "enabled": true,
      "server_name": "cdn.com",
      "utls": { "enabled": true, "fingerprint": "chrome" },
      "reality": { "enabled": true, "public_key": "...", "short_id": "..." }
    }
  }]
}

关键差异:

  • 入站端 clients[].id → users[].uuid;出站端使用扁平 uuid。
  • streamSettings.realitySettings → tls.reality 子块。
  • streamSettings.security: "reality" → 同时设 tls.enabled: true 与 tls.reality.enabled: true。
  • Xray 隐式的 chrome 指纹改为显式 tls.utls: { enabled, fingerprint }。

从 sing-box 迁移到 mihomo(同一 VLESS) ​

yaml
proxies:
  - name: vless-reality
    type: vless
    server: example.com
    port: 443
    uuid: abc...
    flow: xtls-rprx-vision
    tls: true
    servername: cdn.com
    client-fingerprint: chrome
    reality-opts:
      public-key: ...
      short-id: ...

关键差异:

  • 所有 TLS 字段上移到代理根部(tls、servername、client-fingerprint),不再有嵌套 tls: 块。
  • reality: 变为 reality-opts:。

从 Hysteria2(Xray 的拆分形式)迁移到 sing-box ​

Xray 把配置拆开;sing-box 全部放在同一个块里:

yaml
# Xray(拆分到多个块)
outbounds:
  - protocol: hysteria
    settings: { version: 2, address: example.com, port: 443 }
    streamSettings:
      hysteriaSettings: { version: 2, auth: pw }
      finalmask:
        quicParams: { brutalUp: 100mbps, brutalDown: 300mbps }
json
// sing-box(单块,Mbps 整数)
{
  "type": "hysteria2",
  "server": "example.com",
  "server_port": 443,
  "password": "pw",
  "up_mbps": 100,
  "down_mbps": 300,
  "tls": { "enabled": true }
}

路由规则 ​

Xray(JSON):

json
{ "type": "field", "domain": ["geosite:cn"], "outboundTag": "direct" }

sing-box(JSON):

json
{ "rule_set": ["geosite-cn"], "outbound": "direct" }

mihomo(字符串):

GEOSITE,cn,DIRECT

由 Argsment 出品的 Core Tutorial