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
flow на уровне пользователяclients[].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 на входящем слушателе (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[].idusers[].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

Core Tutorial от Argsment