Сравнение — выбор ядра
Три ядра покрывают во многом пересекающиеся наборы возможностей, но исходят из очень разной философии дизайна. Эта страница сводит различия воедино, чтобы было проще выбрать подходящий инструмент и мигрировать между ядрами.
Сводная таблица возможностей
| Возможность | 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на входящем слушателе (mux в стиле sing)
Рецепты миграции
Из 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.- Неявный отпечаток chrome в Xray становится явным:
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 (two blocks)
outbounds:
- protocol: hysteria
settings: { version: 2, address: example.com, port: 443 }
streamSettings:
hysteriaSettings: { version: 2, auth: pw, up: 100mbps, down: 300mbps }json
// sing-box (one block, integer 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