first commit
This commit is contained in:
129
README.md
Normal file
129
README.md
Normal file
@@ -0,0 +1,129 @@
|
||||
# 🌐 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` под текущую ОС и архитектуру.
|
||||
Reference in New Issue
Block a user