中文 | English | Русский | فارسی
Chimera Client — это клиентский проект на Rust, который переосмысливает сетевой прокси-стек Clash. Цель проекта — по возможности сохранить совместимость с конфигурациями и привычным способом работы Clash / Mihomo, одновременно используя преимущества экосистемы Rust: строгую типизацию, асинхронный runtime, наблюдаемость и более удобную кроссплатформенную поддержку.
Текущая кодовая база в основном опирается на архитектуру upstream-проекта clash-rs и дальше развивается под задачи Chimera: дополняются протоколы, runtime и управляющие интерфейсы. В проект уже входят основные модули: CLI, разбор конфигурации, сборка runtime, DNS, маршрутизация, управление входящими и исходящими соединениями, прокси-протоколы, TUN, REST API и горячая перезагрузка конфигурации.
- Совместимый с Clash опыт настройки: сохранить знакомую YAML-конфигурацию и постепенно расширять поддержку прокси, групп прокси, правил, DNS, TUN, профилей и внешнего controller API.
- Нативный runtime на Rust: использовать
tokio, строгие типы, структурированные ошибки иtracingдля повышения надежности и сопровождаемости. - Модульное ядро прокси: отделить DNS, router, dispatcher, inbound, outbound, profile и API, чтобы их можно было развивать и тестировать независимо.
- Кроссплатформенность и встраиваемость: оставить направления интеграции через
clash-ffiиclash-netstackдля GUI, мобильных клиентов, TUN и FFI.
- XHTTP
- VLESS + Reality + TCP
- Trojan + TLS + WebSocket
- Hysteria2
- SOCKS5 inbound / outbound
- HTTP / Mixed listening ports
- Режим TUN
- DNS resolver, DNS listener, Fake IP и DNS filtering
- Группы прокси, включая Selector, URLTest и Fallback
- REST API controller
- Горячая перезагрузка конфигурации
- Загрузка и запросы MMDB, ASN MMDB и Geosite
- Выбор TLS crypto provider через
aws-lc-rsилиring
Часть модулей еще продолжает дорабатываться. Совместимость протоколов, поведение на разных платформах и тестовое покрытие будут улучшаться по мере развития проекта.
Запуск клиента:
cargo run -p clash-rs -- -c config.yamlОбщая схема запуска:
clash-binразбирает аргументы командной строки черезclap.- Если файл конфигурации отсутствует, CLI автоматически создаёт минимальный файл с содержимым
port: 7890. - Если передан
-tили--test-config, процесс только парсит конфигурацию и возвращает результат проверки. - При обычном запуске
clash-binвызываетclash-lib::start_scaffold. clash-libсоздаёт Tokio runtime, читает YAML-конфигурацию и преобразует её во внутреннюю runtime-структуру.- Ядро инициализирует логирование, кэш, DNS resolver, outbound manager, router, dispatcher, authenticator, inbound manager, DNS listener, TUN runner и REST API runner.
- Runtime слушает Ctrl+C или внутренний shutdown token и поддерживает горячую перезагрузку конфигурации через API.
Часто используемые команды:
cargo run -p clash-rs -- -c config.yaml
cargo run -p clash-rs -- --config config.yaml --directory .
cargo run -p clash-rs -- -t -c config.yaml
cargo run -p clash-rs -- --versionПроект использует Cargo features для управления опциональными возможностями. Основные feature-флаги:
tls: включает TLS-поддержку Rustls / Tokio Rustls.ws: включает транспорт WebSocket.trojan: включает поддержку протокола Trojan.hysteria: включает QUIC / H3 возможности Hysteria / Hysteria2.reality: включает транспорт Reality.tun: включает TUN, netstack и системную маршрутизацию.port,http_port,mixed_port: включают HTTP / Mixed listening ports.aws-lc-rs,ring: выбирают криптографический provider.tproxy,redir: возможности, связанные с прозрачным проксированием.
По умолчанию clash-bin включает standard и aws-lc-rs. Feature standard включает trojan, ws, tls, hysteria, reality, port, tun и другие ключевые возможности.
cargo check --all
cargo build
cargo run -p clash-rs -- -c config.yaml
cargo fmt
cargo clippy --all-targets --all-features
cargo test --allЗапуск отдельного crate или конкретного теста:
cargo test -p clash-lib
cargo test -p clash-lib put_configs_reloads_runtime_from_fileЗапуск в стиле CI:
CLASH_RS_CI=true cargo test --all --all-features- Проект всё ещё быстро развивается. Некоторые протоколы, платформенное поведение и API требуют дальнейшей доработки.
- Rust edition —
2024. - В процессе разработки лучше сначала запускать
cargo check --all, а затемcargo fmt,cargo clippy --all-targets --all-featuresиcargo test --allв зависимости от масштаба изменений. - При изменении конфигурации, DNS, маршрутизации, поведения прокси или жизненного цикла runtime лучше добавлять точечные тесты, чтобы не ломать hot reload и controller API.
- Функции TUN, Reality, Hysteria2, WebSocket и TLS зависят и от Cargo features, и от платформенной среды. Для их отладки обычно нужно одновременно проверять включенные features, права в системе и сетевое окружение.
- Упорядочить wiki проекта.
- Продолжить улучшать совместимость с конфигурациями Clash / Mihomo, чтобы типовые реальные конфиги стабильно разбирались и конвертировались.
- Усилить реализацию протоколов, особенно VLESS Reality, Trojan, Hysteria2, WebSocket, TLS и UDP-поведение.
- Улучшить обработку различий TUN, DNS hijack, Fake IP и системной маршрутизации на Windows, Linux и macOS.
- Повысить совместимость REST API с controller-интерфейсами Clash / Mihomo.
- Расширить интеграционные тесты для загрузки конфигурации, hot reload, сопоставления правил, DNS, inbound listeners и outbound dialing.