Files
proxy-switcher/README.md
Александр Ебаклаков 9a2f1387f9 first commit
2026-04-06 14:07:11 +03:00

130 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🌐 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` под текущую ОС и архитектуру.