对比 —— 选择内核
三个内核覆盖的功能高度重叠,但设计哲学差异显著。本页将差异集中归纳, 便于你挑选合适的工具并在三者之间迁移。
功能支持一览
| 功能 | Xray-core | sing-box | mihomo |
|---|---|---|---|
| 配置格式 | JSON | JSON | YAML |
| 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 入站 | 最小 | 完整 | 完整 |
| 重定向 / TProxy | dokodemo + sockopt | 专用 | 快捷字段 + 监听器 |
| TLS / uTLS / REALITY / ECH | ✓ | ✓ | ✓ |
| 路由 | JSON 规则 + 负载均衡器 | 结构化规则 + 动作 | 紧凑字符串 |
| DNS | 服务器 URL 列表 | 类型化服务器 | URL 列表 + 策略映射 |
| 规则提供方 | —(仅内置 geo) | rule-set | rule-providers |
| 代理组 | 负载均衡器(4 种策略) | selector / urltest | select / url-test / fallback / load-balance |
| 统计 / Prometheus | gRPC + metrics | clash_api + v2ray_api | Clash API |
字段命名差异(同一功能的三种命名)
VLESS / VMess 用户列表
| 概念 | Xray | sing-box | mihomo |
|---|---|---|---|
| 用户 UUID 字段 | clients[].id | users[].uuid | uuid |
| 用户名字段 | clients[].email | users[].name | username |
| 单用户 flow | clients[].flow | users[].flow | flow |
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, 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