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

7.0 KiB
Raw Blame History

🌐 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

⚠ Важные ограничения

  1. Прокси не на localhost: Прокси-сервер должен быть на удалённом хосте. Если прокси на 127.0.0.1, возникнет routing loop.
  2. Один экземпляр: Не запускайте несколько экземпляров одновременно.
  3. Graceful shutdown: Всегда используйте Ctrl+C для корректного отключения. При аварийном завершении маршруты могут остаться в ОС.

📜 Лицензия

MIT

📝 TODO

  • Добавить отдельные CLI флаги --user и --password для прокси с авторизацией (сейчас поддерживается через передачу параметров внутри --proxy URL).
  • Добавить скрипт или команду для автоматического скачивания нужного бинарника tun2socks под текущую ОС и архитектуру.