9a2f1387f964384a9ac50b04b99568b95da291a9
🌐 Proxy Switcher
Кроссплатформенный прозрачный прокси — направляет 100% трафика ОС через заданный прокси-сервер с помощью TUN-интерфейса и tun2socks.
В отличие от системных настроек прокси (которые игнорируются играми, CLI-утилитами, фоновыми сервисами), proxy-switcher работает на уровне сетевого стека ОС — перехватывает весь трафик, включая TCP и UDP.
⚡ Быстрый старт
1. Скачайте tun2socks
# 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. Запустите
# 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
⚠ Важные ограничения
- Прокси не на localhost: Прокси-сервер должен быть на удалённом хосте. Если прокси на
127.0.0.1, возникнет routing loop. - Один экземпляр: Не запускайте несколько экземпляров одновременно.
- Graceful shutdown: Всегда используйте
Ctrl+Cдля корректного отключения. При аварийном завершении маршруты могут остаться в ОС.
📜 Лицензия
MIT
📝 TODO
- Добавить отдельные CLI флаги
--userи--passwordдля прокси с авторизацией (сейчас поддерживается через передачу параметров внутри--proxy URL). - Добавить скрипт или команду для автоматического скачивания нужного бинарника
tun2socksпод текущую ОС и архитектуру.
Description
Languages
Python
100%