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
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_apiClash 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[].idusers[].uuid;出站端使用扁平 uuid
  • streamSettings.realitySettingstls.reality 子块。
  • streamSettings.security: "reality" → 同时设 tls.enabled: truetls.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 字段上移到代理根部(tlsservernameclient-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, up: 100mbps, down: 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

Last updated:

由 Argsment 出品的 Core Tutorial