# 🌐 Proxy Switcher **Кроссплатформенный прозрачный прокси** — направляет **100% трафика ОС** через заданный прокси-сервер с помощью TUN-интерфейса и [tun2socks](https://github.com/xjasonlyu/tun2socks). > В отличие от системных настроек прокси (которые игнорируются играми, CLI-утилитами, фоновыми сервисами), proxy-switcher работает на уровне сетевого стека ОС — перехватывает **весь** трафик, включая TCP и UDP. ## ⚡ Быстрый старт ### 1. Скачайте tun2socks ```bash # macOS (Apple Silicon) curl -L -o tun2socks.zip https://github.com/xjasonlyu/tun2socks/releases/download/v2.6.0/tun2socks-darwin-arm64.zip unzip tun2socks.zip && mv tun2socks-darwin-arm64 bin/ && rm tun2socks.zip # macOS (Intel) curl -L -o tun2socks.zip https://github.com/xjasonlyu/tun2socks/releases/download/v2.6.0/tun2socks-darwin-amd64.zip unzip tun2socks.zip && mv tun2socks-darwin-amd64 bin/ && rm tun2socks.zip # Windows — скачайте архив и wintun.dll: # https://github.com/xjasonlyu/tun2socks/releases/download/v2.6.0/tun2socks-windows-amd64.zip # Извлеките tun2socks-windows-amd64.exe в папку bin/ # https://www.wintun.net/ → извлеките wintun.dll в папку bin/ ``` ### 2. Запустите ```bash # macOS / Linux (требует sudo) sudo python -m src.main --proxy socks5://your-proxy-server:1080 # С авторизацией sudo python -m src.main --proxy socks5://user:password@proxy:1080 # HTTP прокси sudo python -m src.main --proxy http://proxy:8080 # Тестовый режим (показывает команды, не выполняет) sudo python -m src.main --proxy socks5://proxy:1080 --dry-run ``` ### 3. Отключение Нажмите `Ctrl+C` — все маршруты автоматически восстановятся. ## 🏗 Архитектура ``` ┌──────────────────────────────────────────────────────┐ │ Python Manager (main.py) │ │ ┌─────────┐ ┌──────────────┐ ┌────────────────┐ │ │ │ Privile-│ │ Network │ │ Platform │ │ │ │ ges │ │ Utils │ │ Router (ABC) │ │ │ │ check │ │ (gateway │ │ ┌────────────┐ │ │ │ │ │ │ detection) │ │ │macOS Router│ │ │ │ └─────────┘ └──────────────┘ │ │Win Router │ │ │ │ │ └────────────┘ │ │ │ ┌──────────────────────────┐ └────────────────┘ │ │ │ Tun2socks Manager │ │ │ │ (subprocess lifecycle) │ │ │ └────────────┬─────────────┘ │ └───────────────┼──────────────────────────────────────┘ │ subprocess ┌───────────▼───────────┐ │ tun2socks binary │ │ (Go + gVisor stack) │ │ ┌─────────────────┐ │ │ │ TUN Interface │◄─── All OS traffic │ │ (utun / wintun) │ │ │ └────────┬────────┘ │ │ │ IP→SOCKS │ │ ┌────────▼────────┐ │ │ │ Proxy Server │──── Internet │ └─────────────────┘ │ └───────────────────────┘ ``` ## 📋 CLI-параметры | Параметр | Описание | По умолчанию | |---|---|---| | `--proxy`, `-p` | URL прокси (обязательный) | — | | `--tun-name` | Имя TUN-интерфейса | `utun123` (macOS) / `wintun` (Windows) | | `--tun-ip` | IP-адрес TUN | `198.18.0.1` (macOS) / `192.168.123.1` (Win) | | `--dns` | DNS-серверы | `8.8.8.8 8.8.4.4` | | `--interface`, `-i` | Основной интерфейс ОС | auto-detect | | `--log-level`, `-l` | Уровень логов | `info` | | `--dry-run` | Только показать команды | `false` | ## 🔒 Требования - **Python** 3.8+ - **Права root/Administrator** (создание TUN + маршруты) - **tun2socks** binary в `bin/` или PATH - **Windows**: дополнительно `wintun.dll` ## 📁 Структура проекта ``` proxy-switcher/ ├── bin/ # Бинарники tun2socks (скачиваются) ├── src/ │ ├── __init__.py │ ├── main.py # CLI + оркестратор │ ├── config.py # Конфигурация (dataclass) │ ├── privileges.py # Проверка прав admin/root │ ├── network_utils.py # Детекция шлюза + DNS resolve │ ├── platform_router.py # Абстракция маршрутизации │ ├── macos_router.py # macOS: ifconfig + route │ ├── windows_router.py # Windows: netsh │ └── tun2socks_manager.py # Управление процессом tun2socks ├── requirements.txt └── README.md ``` ## ⚠ Важные ограничения 1. **Прокси не на localhost**: Прокси-сервер должен быть на удалённом хосте. Если прокси на `127.0.0.1`, возникнет routing loop. 2. **Один экземпляр**: Не запускайте несколько экземпляров одновременно. 3. **Graceful shutdown**: Всегда используйте `Ctrl+C` для корректного отключения. При аварийном завершении маршруты могут остаться в ОС. ## 📜 Лицензия MIT ## 📝 TODO - [ ] Добавить отдельные CLI флаги `--user` и `--password` для прокси с авторизацией (сейчас поддерживается через передачу параметров внутри `--proxy URL`). - [ ] Добавить скрипт или команду для автоматического скачивания нужного бинарника `tun2socks` под текущую ОС и архитектуру.