Skip to content

PA3MA3AH/smartroute

Repository files navigation

SmartRoute

CI Release License Rust

Умная маршрутизация трафика через разные proxy с гибкими правилами

О проектеВозможностиУстановкаБыстрый стартКомандыРазработка


📖 О проекте

SmartRoute — CLI/TUI-приложение на Rust для умной маршрутизации трафика через разные proxy-ноды.

Проект работает поверх sing-box и позволяет удобно управлять:

  • глобальным proxy для всего трафика;
  • отдельными правилами для сайтов;
  • отдельными локальными SOCKS-портами для приложений;
  • цепочками proxy из нескольких нод;
  • kill-switch для блокировки direct-трафика;
  • диагностикой утечек DNS/SNI;
  • импортом и обновлением proxy-подписок.

SmartRoute — это не VPN, а локальный smart proxy router.


🧠 Главная модель

[Global proxy] → используется для всего трафика по умолчанию

[S] Site rule   → отдельный proxy/chain для сайта
[A] App profile → отдельный локальный SOCKS-порт для приложения
[C] Chain proxy → цепочка из нескольких proxy-нод

Пример

[Global] → ru-chain

[S] youtube.com → 5-gbit-tcp-3
[S] github.com  → chain "git"

[A] Steam       → chain "gaming"
[A] Browser     → local SOCKS port 127.0.0.1:1082

[C] ru-chain    → tcp-1 → youtube
[C] git         → 5-gbit-3 → 5-gbit

✨ Возможности

Основные

  • 🎯 Site rules — отдельный proxy или chain для конкретных доменов.
  • 📱 App profiles — отдельные локальные SOCKS-порты для приложений.
  • ⛓️ Chain proxy — цепочки из нескольких proxy-нод.
  • 🌐 Global proxy — дефолтный outbound для всего трафика.
  • 🖥️ TUI-интерфейс — управление через терминал.
  • 🌍 RU/EN интерфейс — переключение языка в TUI.

Безопасность

  • 🔒 Kill-switch
    • Linux: через nftables.
    • Windows: через Windows Firewall.
  • 🔍 DNS leak-test — проверка DNS-утечек.
  • 🕵️ SNI leak-test — проверка видимости target domain.
  • Whitelist-compatible checks — проверка маскировки трафика.
  • 🛡️ Reality/uTLS masks — управление fingerprint и SNI.

Управление

  • 📥 Импорт подписок — импорт proxy-нод из subscription URL.
  • 🔄 Merge-nodes — обновление нод без потери rules/chains/profiles.
  • 💾 Backup/restore — автоматические бэкапы конфигурации.
  • 🏥 Health-check — проверка работоспособности SmartRoute.
  • 🔧 Auto-repair — автоматическое восстановление.
  • 📋 Doctor — валидация конфигурации.
  • 🚀 Autostart
    • Linux: systemd.
    • Windows: Task Scheduler.

Технические

  • 🦀 Rust — быстрый нативный бинарник.
  • 📊 Structured logging — логи с уровнями trace/debug/info/warn/error.
  • ⚛️ Atomic writes — защита конфигов от повреждения.
  • 🧪 Unit-тесты — тесты критичной логики.
  • 🪟 Windows support — сборка, тесты и .exe installer.
  • 🐧 Linux support — systemd, nftables, стандартные CLI tools.

🚀 Установка

Windows 10/11 x64

Скачайте последнюю версию установщика из раздела Releases:

  • SmartRoute-Setup-x64.exe

Страница релизов:

https://github.com/PA3MA3AH/smartroute/releases

После установки SmartRoute будет доступен из PowerShell/CMD:

smartroute.exe --help

Windows runtime-папки

C:\ProgramData\SmartRoute\run
C:\ProgramData\SmartRoute\config

Требования для Windows

  • Windows 10/11 x64.
  • sing-box.exe должен быть установлен и доступен в PATH.

Если sing-box.exe лежит в отдельной папке, укажите путь вручную:

setx SMARTROUTE_SINGBOX "C:\path\to\sing-box.exe" /M

После этого перезапустите PowerShell/Terminal.

Пример запуска на Windows

smartroute.exe doctor C:\ProgramData\SmartRoute\config\imported.toml
smartroute.exe start C:\ProgramData\SmartRoute\config\imported.toml
smartroute.exe status
smartroute.exe stop

Windows kill-switch и autostart

Эти команды запускайте из PowerShell или Windows Terminal от имени администратора:

smartroute.exe kill-switch enable C:\ProgramData\SmartRoute\config\imported.toml
smartroute.exe kill-switch status
smartroute.exe kill-switch disable
smartroute.exe autostart enable C:\ProgramData\SmartRoute\config\imported.toml
smartroute.exe autostart status
smartroute.exe autostart disable

Linux

Arch Linux

sudo pacman -S --needed rust cargo git curl sing-box nftables iproute2

Debian/Ubuntu

sudo apt install rust cargo git curl nftables iproute2

sing-box для Debian/Ubuntu может потребоваться установить отдельно:

https://sing-box.sagernet.org/

Сборка из исходников

git clone https://github.com/PA3MA3AH/smartroute.git
cd smartroute

cargo build --release

sudo cp target/release/smartroute /usr/local/bin/

Проверка:

smartroute --help

Быстрая установка через install.sh

Важно: install.sh ожидает Linux binary artifact в GitHub Releases. Если в релизе есть только Windows installer, используйте сборку из исходников.

curl -fsSL https://raw.githubusercontent.com/PA3MA3AH/smartroute/master/install.sh | sudo bash

или:

wget -qO- https://raw.githubusercontent.com/PA3MA3AH/smartroute/master/install.sh | sudo bash

🎯 Быстрый старт

1. Создайте конфиг

Linux:

sudo mkdir -p /etc/smartroute
sudo nano /etc/smartroute/config.toml

Windows:

notepad C:\ProgramData\SmartRoute\config\config.toml

2. Минимальный конфиг

[general]
mode = "socks"
listen = "127.0.0.1"
listen_port = 1081
final_outbound = "my-proxy"

[[nodes]]
tag = "my-proxy"
type = "vless"
server = "example.com"
port = 443
uuid = "your-uuid"
security = "reality"
server_name = "example.com"
reality_public_key = "your-public-key"
reality_short_id = ""
utls_fingerprint = "chrome"

3. Проверка конфига

Linux:

smartroute doctor /etc/smartroute/config.toml

Windows:

smartroute.exe doctor C:\ProgramData\SmartRoute\config\config.toml

4. Запуск

Linux:

sudo smartroute start /etc/smartroute/config.toml

Windows:

smartroute.exe start C:\ProgramData\SmartRoute\config\config.toml

5. Проверка статуса

smartroute status

На Windows:

smartroute.exe status

🖥️ TUI

SmartRoute имеет терминальный интерфейс управления.

Linux:

sudo smartroute ui

Windows:

smartroute.exe ui

В TUI можно:

  • запускать/останавливать SmartRoute;
  • включать daemon;
  • менять global proxy;
  • добавлять site rules;
  • создавать app profiles;
  • создавать chain proxy;
  • смотреть rules/chains/app ports;
  • импортировать subscription URL;
  • запускать проверки.

📚 Команды

Управление runtime

smartroute start <config>
smartroute stop
smartroute status
smartroute daemon <config>

TUI

smartroute ui

Проверка и восстановление

smartroute doctor <config>
smartroute health <config>
smartroute repair <config>

Правила маршрутизации

smartroute rule add <config> domain_suffix youtube.com my-proxy
smartroute rule list <config>

Импорт подписок

smartroute import-url --output nodes.toml "https://example.com/sub"
smartroute merge-nodes base.toml nodes.toml -o base.toml

Backup/restore

smartroute backup <config>
smartroute restore <config> --latest

Kill-switch

Linux:

sudo smartroute kill-switch enable <config>
sudo smartroute kill-switch status
sudo smartroute kill-switch disable

Windows, PowerShell от администратора:

smartroute.exe kill-switch enable C:\ProgramData\SmartRoute\config\config.toml
smartroute.exe kill-switch status
smartroute.exe kill-switch disable

Autostart

Linux:

sudo smartroute autostart enable <config>
sudo smartroute autostart status
sudo smartroute autostart disable

Windows, PowerShell от администратора:

smartroute.exe autostart enable C:\ProgramData\SmartRoute\config\config.toml
smartroute.exe autostart status
smartroute.exe autostart disable

Leak tests

Linux:

sudo smartroute leak-test <config> --domain youtube.com -i eth0
sudo smartroute dns-test <config> --domain youtube.com -i eth0
sudo smartroute whitelist test <config> --domain youtube.com -i eth0

Некоторые leak-test команды требуют tcpdump, tshark и root-доступ.


⚙️ Конфигурация

Общий блок

[general]
mode = "socks"
listen = "127.0.0.1"
listen_port = 1081
final_outbound = "my-proxy"

Node

[[nodes]]
tag = "my-proxy"
type = "vless"
server = "example.com"
port = 443
uuid = "your-uuid"
security = "reality"
server_name = "example.com"
reality_public_key = "your-public-key"
reality_short_id = ""
utls_fingerprint = "chrome"

Site rule

[[rules]]
type = "domain_suffix"
value = "youtube.com"
outbound = "my-proxy"

Chain proxy

[[chains]]
tag = "my-chain"
outbounds = ["proxy-1", "proxy-2"]

App profile

[[local_profiles]]
tag = "browser"
listen = "127.0.0.1"
listen_port = 1082
outbound = "my-chain"

После запуска приложение может использовать отдельный локальный SOCKS-порт:

127.0.0.1:1082

🌍 Переменные окружения

Логирование

Linux:

RUST_LOG=debug sudo smartroute start config.toml

Windows PowerShell:

$env:RUST_LOG="debug"
smartroute.exe start C:\ProgramData\SmartRoute\config\config.toml

Доступные уровни:

trace
debug
info
warn
error

Путь к sing-box

Linux:

export SMARTROUTE_SINGBOX="/usr/bin/sing-box"

Windows:

setx SMARTROUTE_SINGBOX "C:\path\to\sing-box.exe" /M

🛠️ Разработка

Сборка

cargo build
cargo build --release

Тесты

cargo test
cargo test --lib

Форматирование

cargo fmt

Проверка

cargo check --all-targets

Сборка Windows installer

Windows installer собирается GitHub Actions workflow:

Actions → Windows Installer → Run workflow

Результат появляется в artifacts:

SmartRoute-Setup-x64.exe

Для релиза создайте tag:

git tag v0.1.0
git push origin v0.1.0

Workflow автоматически:

  1. Соберёт smartroute.exe.
  2. Соберёт SmartRoute-Setup-x64.exe.
  3. Создаст GitHub Release.
  4. Прикрепит installer к релизу.

🧪 CI

CI проверяет проект на Linux и Windows:

cargo fmt
cargo check --all-targets
cargo test --all

Windows installer workflow собирает отдельный .exe установщик.


⚠️ Важные замечания

  • SmartRoute не является VPN.
  • SmartRoute работает как локальный proxy router.
  • Для работы требуется sing-box.
  • На Windows kill-switch использует Windows Firewall.
  • На Linux kill-switch использует nftables.
  • Для kill-switch и autostart обычно нужны права администратора/root.
  • Windows installer не включает sing-box.exe; установите его отдельно.

🤝 Поддержка


📝 Лицензия

Этот проект распространяется под лицензией MIT.

Подробности в файле LICENSE.


🙏 Благодарности

  • sing-box — универсальная proxy-платформа.
  • ratatui — TUI-фреймворк.
  • crossterm — терминальный backend.
  • Всем контрибьюторам проекта.

Сделано с ❤️ на Rust

⬆ Наверх

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors