Mimic-Protocol

module
v0.3.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 21, 2026 License: GPL-3.0

README

Mimic Protocol

Mimic Protocol Logo

🇷🇺 Русский | 🇺🇸 English

Mimic — это открытый протокол обхода блокировок, который постоянно меняет своё "цифровое лицо", имитируя трафик различных легитимных сервисов (VK, Rutube, Telegram и др.).

License Go Version Go Report Card Go Reference codecov


🎯 Суть проекта

Вместо того чтобы просто шифровать трафик (что часто выделяется для систем DPI), Mimic маскирует его под обычную активность пользователя.

  1. Полиморфизм: Протокол динамически переключает профили поведения.
  2. Мимикрия: Трафик выглядит как просмотр видео, общение в мессенджере или скроллинг соцсети.
  3. Неуловимость: Нет постоянной сигнатуры, которую можно заблокировать.

🛠️ Самописные технологии

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/               # Документация

🔧 Как это работает

Базовый принцип
  1. Пользователь задает список "белых" доменов (например, vk.com, rutube.ru).
  2. Mimic устанавливает MTP-соединение (UDP) с сервером.
  3. Поверх MTP работает yamux для мультиплексирования потоков.
  4. Клиент поднимает SOCKS5 прокси (127.0.0.1:1080) с полной поддержкой UDP Associate (онлайн игры, DNS, WebRTC работают через туннель).
  5. Встроенный Routing Engine гибко направляет трафик (direct, proxy, block) по правилам.
  6. Каждые 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) — малые пакеты, высокий PPS
  • voip — 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"

Приоритет выбора пресетов:

  1. Custom presets (точное совпадение домена)
  2. Custom presets (по ключевому слову)
  3. Default presets (по маппингу доменов)
  4. web_generic (по умолчанию)
Настройка маршрутизации (routing)

Встроенный Routing Engine направляет трафик на основе правил.

Политики:

  • proxy — направлять через туннель Mimic
  • direct — подключаться напрямую (в обход туннеля)
  • 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.

Directories

Path Synopsis
cmd
client command
server command
pkg
mtp
tunnel
Package tunnel provides TUN tunnel integration for Android VpnService.
Package tunnel provides TUN tunnel integration for Android VpnService.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL