README
¶
Mimic Protocol
Mimic — это открытый протокол обхода блокировок, который постоянно меняет своё "цифровое лицо", имитируя трафик различных легитимных сервисов (VK, Rutube, Telegram и др.).
🎯 Суть проекта
Вместо того чтобы просто шифровать трафик (что часто выделяется для систем DPI), Mimic маскирует его под обычную активность пользователя.
- Полиморфизм: Протокол динамически переключает профили поведения.
- Мимикрия: Трафик выглядит как просмотр видео, общение в мессенджере или скроллинг соцсети.
- Неуловимость: Нет постоянной сигнатуры, которую можно заблокировать.
🛠️ Самописные технологии
MTP — Mimic Transport Protocol
MTP — полностью самописный транспортный протокол поверх UDP, разработанный с нуля как замена TCP для обхода DPI.
| Компонент | Описание |
|---|---|
| QUIC маскировка | Пакеты на 100% маскируются под HTTP/3 (QUIC Short Header). Сервер защищен Active Probing Defender (отвечает фейковыми DNS пакетами сканерам) |
| Полиморфные заголовки | Структура каждого пакета уникальна. Умный Padding динамически растягивает размер до MTU, имитируя видео-поток. DPI не может написать регулярку |
| ChaCha20-Poly1305 | Каждый пакет шифруется индивидуально. Перешифровка при ретрансмиссии (новый nonce) |
| ARQ Engine | Гарантия доставки: скользящее окно, Selective ACK, адаптивный RTO (Jacobson/Karels) |
| BBR Congestion Control | Контроль перегрузок на базе замера пропускной способности (BtlBw) и пинга (Min RTT). Полностью заменяет устаревший алгоритм AIMD, давая макс. скорость |
| Forward Error Correction | Модуль (Reed-Solomon), который восстанавливает потерянные UDP-пакеты прямо на лету без ожидания ретрансмиссии (идеально для плохих 4G сетей) |
| Session Migration | Бесшовная ротация: клиент мигрирует сессию на новый UDP-сокет без потери данных |
| Keepalive | Автоматический PING/PONG каждые 5 секунд, обнаружение мёртвых соединений |
Как это работает
Клиент Сервер
│ │
│──── SYN (AUTH:uuid, зашифр.) ──────────>│
│<─── SYN-ACK (OK, зашифр.) ─────────────│
│ │
│──── DATA [junk][nonce][encrypted] ─────>│ (каждый пакет выглядит иначе)
│<─── ACK + SACK ────────────────────────│
│ │
│ === Ротация (бесшовная) === │
│──── SYN+MIGRATE (session_id) ─────────>│ (новый UDP-сокет)
│<─── SYN-ACK ───────────────────────────│ (сервер меняет адрес)
│ │ (yamux не замечает)
Полиморфный пакет MTP
[ QUIC Header: 9 байт ][ Padding: до 1350 байт ][ Nonce: 24 байт ][ Encrypted(Header+Payload) ]
↑ Фейковый префикс ↑ Smart Padding ↑ уникален ↑ ChaCha20-Poly1305
для обхода DPI (маскировка размера) для пакета
Ни один DPI не может перехватить этот трафик, потому что:
- Каждый пакет имеет разный размер (junk padding)
- Нет фиксированных маркеров или магических байтов
- Даже ретрансмиссия того же пакета выглядит полностью иначе (новый nonce + новый padding)
🏗️ Структура репозитория
Mimic-Protocol/
├── cmd/ # Исполняемые файлы
│ ├── client/ # CLI клиент с SOCKS5 прокси
│ └── server/ # Серверная часть (MTP)
├── pkg/ # Публичные библиотеки
│ ├── mtp/ # ★ MTP — самописный транспорт поверх UDP (ARQ, FEC, BBR)
│ ├── protocol/ # Ядро протокола (TLS-mimicry, legacy)
│ ├── transport/ # VirtualConn + Manager (бесшовная ротация)
│ ├── proxy/ # SOCKS5 прокси-сервер
│ ├── client/ # Клиент Mimic с управлением сессиями
│ ├── mimic/ # Генератор трафик-паттернов
│ ├── presets/ # Пресеты поведения (social, video, messenger)
│ ├── config/ # Конфигурация с валидацией
│ ├── compression/ # Сжатие данных (zstd)
│ ├── network/ # Сетевые утилиты (DNS, protected dialer)
│ ├── routing/ # Движок маршрутизации трафика
│ ├── tunnel/ # Туннелирование трафика
│ └── version/ # Информация о версии
├── internal/ # Внутренние компоненты
└── docs/ # Документация
🔧 Как это работает
Базовый принцип
- Пользователь задает список "белых" доменов (например,
vk.com,rutube.ru). - Mimic устанавливает MTP-соединение (UDP) с сервером.
- Поверх MTP работает yamux для мультиплексирования потоков.
- Клиент поднимает SOCKS5 прокси (
127.0.0.1:1080) с полной поддержкой UDP Associate (онлайн игры, DNS, WebRTC работают через туннель). - Встроенный Routing Engine гибко направляет трафик (
direct,proxy,block) по правилам. - Каждые 30-600 секунд происходит бесшовная ротация транспорта.
📋 Конфигурация
⚠️ Важно: Библиотека
goccy/go-yamlне поддерживает комментарии в конфигурационных файлах. При редактировании конфигов удаляйте комментарии (строки начинающиеся с#).
Настройка сервера (server.yaml)
Создайте файл конфигурации на основе примера:
cp config.example.yaml server.yaml
nano server.yaml # отредактируйте под себя (удалите комментарии!)
Все настройки сервера
| Параметр | Тип | Обязательный | Описание | Пример |
|---|---|---|---|---|
port |
int | ❌ | Порт прослушивания MTP (UDP). По умолчанию: 443 |
443, 8443, 8080 |
uuid |
string | ✅ | Уникальный UUID для аутентификации клиентов | "550e8400-e29b-41d4-a716-446655440000" |
name |
string | ❌ | Название сервера (отображается в логах и ссылках) | "My-Mimic-Server" |
transport |
string | ❌ | Тип транспорта: "mtp" (UDP, рекомендуется) или "tcp" (устаревший) |
"mtp" |
domain_list |
[]object | ❌ | Список доменов для мимикрии трафика (с опциональным пресетом) | [{"domain": "vk.com", "preset": "social"}] |
max_clients |
int | ❌ | Максимум одновременных клиентов. 0 = без ограничений |
100 |
dns |
string | ❌ | DNS-сервер для резолвинга доменов | "1.1.1.1:53" |
compression.enable |
bool | ❌ | Включить сжатие zstd. По умолчанию: false |
true, false |
compression.level |
int | ❌ | Уровень сжатия (1-3): 1=Fastest, 2=Default, 3=Better | 2 |
compression.min_size |
int | ❌ | Мин. размер для сжатия (байты). По умолчанию: 64 |
64, 128 |
Пример минимального конфига сервера
port: 443
uuid: "550e8400-e29b-41d4-a716-446655440000"
name: "My-Mimic-Server"
transport: "mtp"
# Домены для мимикрии (с опциональным пресетом)
# Формат: domain (автоопределение) или domain:preset (явное указание)
domain_list:
# Автоопределение пресета по домену
- vk.com # Авто: social
- rutube.ru # Авто: video
- telegram.org # Авто: messenger
# Явное указание пресета для конкретного домена
- domain: "some-gaming-site.com"
preset: "gaming" # Игровой трафик для этого домена
- domain: "my-video-site.com"
preset: "video" # Видео стриминг для этого домена
max_clients: 100
dns: "1.1.1.1:53"
# Сжатие данных (опционально, выключено по умолчанию)
compression:
enable: false # true = включить сжатие zstd
level: 2 # 1=Fastest, 2=Default, 3=Better
min_size: 64 # Не сжимать пакеты < 64 байт
Генерация UUID:
./server generate-uuid
Генерация ссылки для клиента:
./server generate-link server.yaml
Пример вывода:
================================================================
🚀 Share this link with clients to connect:
================================================================
mimic://550e8400-e29b-41d4-a716-446655440000@your-server.com:443?name=My-Mimic-Server&domains=vk.com,rutube.ru&transport=mtp&dns=1.1.1.1:53
================================================================
Настройка клиента (client.yaml)
Все настройки клиента
| Параметр | Тип | Обязательный | Описание | Пример |
|---|---|---|---|---|
server |
string | ✅ | Адрес сервера (IP:PORT или домен:PORT) | "192.168.1.100:443" |
uuid |
string | ✅ | UUID для аутентификации (должен совпадать с сервером) | "550e8400-e29b-41d4-a716-446655440000" |
domains |
[]object | ❌ | Список доменов для мимикрии (с опциональным пресетом) | [{"domain": "vk.com", "preset": "social"}] |
transport |
string | ❌ | Тип транспорта: "mtp" или "tcp" |
"mtp" |
local_port |
int | ❌ | Порт локального SOCKS5 прокси. По умолчанию: 1080 |
1080 |
dns |
string | ❌ | DNS-сервер для резолвинга | "1.1.1.1:53" |
compression.enable |
bool | ❌ | Включить сжатие zstd. По умолчанию: false |
true, false |
compression.level |
int | ❌ | Уровень сжатия (1-3). По умолчанию: 2 |
1, 2, 3 |
compression.min_size |
int | ❌ | Мин. размер для сжатия. По умолчанию: 64 |
64, 128 |
custom_presets |
map | ❌ | Кастомные пресеты для доменов (см. ниже) | {...} |
proxies |
[]object | ❌ | Список локальных прокси (см. ниже) | [{"type": "socks5", "port": 1080}] |
routing.default_policy |
string | ❌ | Политика по умолчанию: proxy, direct, block |
"proxy" |
routing.rules |
[]object | ❌ | Правила маршрутизации (см. ниже) | [...] |
settings.switch_time |
string | ❌ | Интервал смены профиля (формат: "60s-300s" или "1m-5m") |
"60s-300s" |
settings.randomize |
bool | ❌ | Случайный порядок смены доменов | true |
Настройка прокси (proxies)
Клиент может поднимать несколько локальных прокси одновременно.
| Параметр | Тип | Описание |
|---|---|---|
type |
string | Тип прокси: "socks5" (с поддержкой UDP) или "http" |
port |
int | Порт для прослушивания |
Пример настройки прокси:
proxies:
- type: "socks5"
port: 1080
- type: "http"
port: 8080
Кастомные пресеты (custom_presets)
Система пресетов позволяет задать специфичное поведение трафика для разных сервисов.
Встроенные пресеты:
web_generic— веб-серфинг (500-1420 байт, 10-150 PPS)social— соцсети (VK, Instagram)video— видеостриминг (YouTube, Twitch)messenger— мессенджеры (Telegram, WhatsApp)gaming— игры (CS2, Dota 2) — малые пакеты, высокий PPSvoip— VoIP/видеозвонки (Discord, Zoom) — симметричный трафик
Пример custom_presets:
custom_presets:
# Gaming preset для Steam
steampowered.com:
name: "Gaming - Steam"
type: "gaming"
packet_size_min: 64
packet_size_max: 512
packets_per_sec_min: 30
packets_per_sec_max: 120
upload_download_ratio: 0.8
session_duration: "600s-3600s"
# VoIP preset для Discord
discord.com:
name: "VoIP - Discord"
type: "voip"
packet_size_min: 80
packet_size_max: 300
packets_per_sec_min: 20
packets_per_sec_max: 50
upload_download_ratio: 1.0
session_duration: "300s-7200s"
# Video preset для YouTube
youtube.com:
name: "Video - YouTube"
type: "video"
packet_size_min: 1000
packet_size_max: 1450
packets_per_sec_min: 50
packets_per_sec_max: 200
upload_download_ratio: 0.05
session_duration: "300s-3600s"
Приоритет выбора пресетов:
- Custom presets (точное совпадение домена)
- Custom presets (по ключевому слову)
- Default presets (по маппингу доменов)
web_generic(по умолчанию)
Настройка маршрутизации (routing)
Встроенный Routing Engine направляет трафик на основе правил.
Политики:
proxy— направлять через туннель Mimicdirect— подключаться напрямую (в обход туннеля)block— блокировать соединение
Типы правил:
domain_suffix— совпадение по суффиксу домена (например,ru,org)domain_keyword— совпадение по ключевому слову в доменеip_cidr— совпадение по IP-диапазону (CIDR-нотация)
Пример настройки маршрутизации:
routing:
default_policy: proxy
rules:
- type: domain_suffix
value: ru
policy: direct
- type: domain_suffix
value: cn
policy: block
- type: ip_cidr
value: 192.168.0.0/16
policy: direct
- type: domain_keyword
value: google
policy: proxy
Пример полного конфига клиента
server: "your-mimic-server.com:443"
uuid: "550e8400-e29b-41d4-a716-446655440000"
local_port: 1080
# Домены для мимикрии (с опциональным пресетом)
# Формат: domain (автоопределение) или domain:preset (явное указание)
domains:
# Автоопределение пресета по домену
- vk.com # Авто: social
- rutube.ru # Авто: video
- telegram.org # Авто: messenger
# Явное указание пресета для конкретного домена
- domain: "some-gaming-site.com"
preset: "gaming" # Игровой трафик для этого домена
- domain: "my-video-site.com"
preset: "video" # Видео стриминг для этого домена
transport: "mtp"
dns: "1.1.1.1:53"
# Сжатие данных (опционально)
compression:
enable: false # true = включить сжатие zstd
level: 2 # 1=Fastest, 2=Default, 3=Better
min_size: 64 # Не сжимать пакеты < 64 байт
# Кастомные пресеты
custom_presets:
discord.com:
type: "voip"
packet_size_min: 80
packet_size_max: 300
packets_per_sec_min: 20
packets_per_sec_max: 50
proxies:
- type: "socks5"
port: 1080
- type: "http"
port: 8080
routing:
default_policy: proxy
rules:
- type: domain_suffix
value: ru
policy: direct
- type: ip_cidr
value: 127.0.0.0/8
policy: block
settings:
switch_time: "60s-300s"
randomize: true
📦 Используемые библиотеки (Go)
| Библиотека | Назначение |
|---|---|
| github.com/goccy/go-yaml | Быстрый YAML-парсер (в 10 раз быстрее стандартного) |
| github.com/hashicorp/yamux | Мультиплексирование потоков поверх MTP |
| github.com/klauspost/reedsolomon | Сверхбыстрая реализация FEC для восстановления потерь |
| github.com/refraction-networking/utls | Подмена TLS Fingerprint (имитация реальных браузеров) |
| golang.org/x/crypto | Надежное шифрование ChaCha20-Poly1305 |
| github.com/google/uuid | Генерация и парсинг UUID для авторизации |
| github.com/klauspost/compress | Высокопроизводительное сжатие данных |
🚀 Использование
⚡ Быстрая установка на Linux (автоматическая)
Поддерживаемые дистрибутивы:
- 🐧 Ubuntu/Debian (apt)
- 🔴 CentOS/RHEL (yum/dnf)
- 🔵 AlmaLinux/Rocky Linux (dnf)
- 🟡 Fedora (dnf)
- 🟢 Arch Linux/Manjaro (pacman)
- 🔷 openSUSE (zypper)
- 🏔️ Alpine Linux (apk)
Требования: root-доступ
# 1. Клонирование репозитория
git clone https://github.com/Locon213/Mimic-Protocol.git
cd Mimic-Protocol
# 2. Запуск установщика (от root)
sudo bash scripts/linux/install.sh
# 3. Готово! Сервер установлен и запущен
Установщик автоматически:
- ✅ Определит ваш дистрибутив и установит зависимости
- ✅ Скачает готовый бинарник для вашей архитектуры (amd64/arm64/arm)
- ✅ Сгенерирует UUID и создаст конфиг в
/etc/mimic/server.yaml - ✅ Настроит systemd-сервис
- ✅ Включит автозапуск при загрузке
- ✅ Применит оптимизации для высокой производительности:
- BBR congestion control для максимальной пропускной способности
- Увеличенные сетевые буферы
- Оптимизированные лимиты файловых дескрипторов
- TCP Fast Open для уменьшения задержек
Управление сервером через CLI
После установки доступна команда mimic:
# Управление сервером
mimic status-server # Статус сервера
mimic restart-server # Перезапуск
mimic stop-server # Остановка
mimic start-server # Запуск
# Конфигурация
mimic generate-uuid # Генерация UUID
mimic generate-link # Ссылка для клиента
mimic config-path # Путь к конфигу
mimic edit-config # Открыть конфиг в редакторе
# Диагностика
mimic logs # Последние 50 строк логов
mimic logs-follow # Логи в реальном времени
mimic optimize-status # Статус оптимизаций системы
mimic check-bbr # Проверка BBR congestion control
mimic version # Версия сервера
Ручная настройка фаервола
# UFW (Ubuntu/Debian)
sudo ufw allow 443/udp
sudo ufw reload
# firewalld (CentOS/RHEL/Fedora/AlmaLinux/Rocky)
sudo firewall-cmd --permanent --add-port=443/udp
sudo firewall-cmd --reload
# iptables (универсальный)
sudo iptables -A INPUT -p udp --dport 443 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4 # Debian/Ubuntu
# или
sudo service iptables save # CentOS/RHEL
🔧 Ручная установка на Linux
Если вы предпочитаете ручную настройку или хотите собрать из исходников:
# 1. Установка Go (выберите ваш дистрибутив)
# Ubuntu/Debian
sudo apt update && sudo apt install -y golang-go
# CentOS/RHEL/AlmaLinux/Rocky
sudo dnf install -y golang
# или для старых версий:
sudo yum install -y golang
# Fedora
sudo dnf install -y golang
# Arch Linux/Manjaro
sudo pacman -S go
# openSUSE
sudo zypper install go
# Alpine Linux
apk add go
# 2. Сборка
git clone https://github.com/Locon213/Mimic-Protocol.git
cd Mimic-Protocol
go build -o server ./cmd/server
chmod +x server
# 3. Настройка
cp config.example.yaml server.yaml # или создайте свой конфиг
./server generate-uuid # сгенерируйте UUID и вставьте в конфиг
# 4. Запуск
./server -config server.yaml
🌐 Кросс-компиляция
# Linux AMD64
GOOS=linux GOARCH=amd64 go build -o server ./cmd/server
# Windows AMD64
GOOS=windows GOARCH=amd64 go build -o server.exe ./cmd/server
# macOS ARM64
GOOS=darwin GOARCH=arm64 go build -o server ./cmd/client
📱 Запуск клиента
./client -config config.yaml
При успешном подключении клиент выведет:
✅ Session established!
🌐 SOCKS5 Proxy: 127.0.0.1:1080
↑ 125.3 KB/s ↓ 1.2 MB/s │ Traffic: 45.6 MB │ Connected: 00:15:32 │ Active: 3
📲 Официальное приложение (Beta)
Для удобного использования доступны готовые приложения с графическим интерфейсом:
Mimic App — официальное клиентское приложение (в бете)
Доступные платформы:
- 🐧 Linux
- 🍎 macOS
- 🪟 Windows
- 🤖 Android
Приложение включает:
- ✅ Графический интерфейс управления
- ✅ Импорт конфигураций по ссылке (
mimic://...) - ✅ Статистика трафика в реальном времени
🔌 Использование как Go SDK
Вы можете встроить клиент Mimic Protocol в собственное Go-приложение (например, GUI или мобильное приложение). Подробнее см. Документацию по SDK.
🔐 Безопасность
- Транспорт: MTP (самописный протокол поверх UDP) с ChaCha20-Poly1305 шифрованием
- Полиморфизм: Каждый пакет уникален — DPI не может создать сигнатуру
- Обмен ключами: Авторизация по UUID
- Анонимность: Сервер не хранит логи, регистрация не требуется
📄 Лицензия
Проект распространяется под лицензией GPLv3. Подробнее см. файл LICENSE.
Copyright (c) 2025-н.в. Locon213 & Contributors.