TiredVPN

Anonymizers v1.3.17 · 30.06.2026 активный

DPI-устойчивый VPN с адаптивным движком выбора стратегии. 20+ техник обхода в одном инструменте: REALITY (имитация TLS-fingerprint Chrome/Firefox), HTTP/2 стеганография (данные прячутся в легитимные HTTP/2 фреймы), Traffic morphing (статистически подражает паттернам популярных сервисов), SNI-фрагментация, Salamander padding (QUIC), Geneva engine с правилами для России, Китая, Ирана, Турции. Адаптивный fallback: если текущая стратегия заблокирована — автоматически переключается на следующую в середине сессии без разрыва соединения. Включает TSPU Intelligence — ежемесячно обновляемую базу сигнатур российских блокировок.

v1.3.17
30.06.2026 current
Добавлен 24.06.2026 · Обновлён 24.06.2026 · Anonymizers
Установка
git clone https://github.com/tiredvpn/tiredvpn
cd tiredvpn

# Сервер
go build ./cmd/server && ./server --config server.yaml

# Клиент
go build ./cmd/client && ./client --server my.server:443 \
  --strategy adaptive --country ru

# Android APK — в релизах на GitHub
переведено ИИ

TiredVPN

VPN, устойчивый к DPI, разработанный для работы в сильно цензурируемых сетях.

CI Release Docker Pulls Go Report Card License: AGPL-3.0 Go Version TiredVPN)

Связанные репозитории: tiredvpn/tiredvpn-android — Android-клиент


Что такое TiredVPN?

TiredVPN — это VPN, устойчивый к цензуре, который использует множественные стратегии обхода для установки и поддержания соединения в сетях с активной глубокой инспекцией пакетов (DPI). Вместо того чтобы полагаться на единую технику обфускации, он реализует адаптивный движок стратегий, который автоматически выбирает оптимальный транспорт в зависимости от текущих условий сети.

Система исследует доступные стратегии, ранжирует их по задержке и надежности и переключается на альтернативы в середине сеанса, если активная стратегия оказывается заблокированной. Это делает ее эффективной против сложных фильтрующих систем, таких как ТСПУ (Россия), ВФКН (Китай) и аналогичные инфраструктуры DPI.

Ключевые цели разработки:

  • Устойчивость - отсутствие единственной точки отказа; если одна стратегия заблокирована, клиент бесшовно переключается на другую.
  • Скрытность - паттерны трафика деформируются, чтобы имитировать легитимные службы (видеостриминг, CDN-трафик, HTTPS-сёрфинг).
  • Производительность - мультиплексированные соединения через smux, QUIC-транспорт и адаптивная маскировка RTT минимизируют накладные расходы.

Особенности

  • 20+ стратегий обхода DPI с автоматическим выбором и переключением в середине сеанса
  • QUIC и TLS транспорты с паддингом Salamander и фрагментацией SNI
  • Протокол REALITY - имитация легитимных веб-сайтов с почти идеальными отпечатками TLS
  • Стеganография HTTP/2 - скрытие данных туннеля внутри реальных фреймов HTTP/2
  • Деформация трафика - статистическое соответствие паттернам трафика популярных сервисов
  • Движок Geneva - специфичные для стран правила манипуляции пакетами (Россия, Китай, Иран, Турция)
  • Мультиплексированные соединения через smux для эффективного управления потоками
  • TUN-режим для туннелирования всего системного трафика
  • Режимы SOCKS5 и HTTP прокси
  • Прыжки по портам со случайными, последовательными и фибоначчи стратегиями
  • IPv6 транспорт с двухстековой поддержкой и автоматическим переключением
  • Зашифрованный Client Hello (ECH) для скрытия SNI от DPI
  • Постквантовая криптография (ML-KEM-768 + ML-DSA-65)
  • Многохоповая маршрутизация через цепочку серверов
  • Метрики, совместимые с Prometheus
  • Интеграция с Android через JNI (режим сборки c-shared)
  • Поддержка Docker со многоэтапными сборками
  • Управление клиентами с бэкендом Redis и REST API
  • Генерация QR-кодов для provision мобильных клиентов

Сравнение TiredVPN

Особенность TiredVPN Xray/VLESS sing-box Outline
Стратегии обхода 20+ 3–5 5–8 1–2
Адаптивное переключение ✅ В середине сеанса Частичное
Исследования ТСПУ Ежедневные отчёты
Постквантовая криптография ✅ ML-KEM-768
Движок Geneva
Маскировка RTT
ICMP fallback
Деформация трафика
Приложение для Android ✅ Нативное Стороннее Стороннее
Лицензия AGPL-3.0 MPL-2.0 GPL-3.0 Apache-2.0

Быстрый старт

Установка

Однострочник (рекомендуемый)

curl -fsSL https://tiredvpn.github.io/tiredvpn/install.sh | sudo bash -s -- --port 443

Устанавливает сервер, генерирует секрет и TLS-сертификат, запускает службу и выводит строку подключения, а также QR-код для мобильного приложения. Выберите другой порт с помощью --port N (по умолчанию 443).

Debian/Ubuntu (apt)

curl -fsSL https://tiredvpn.github.io/tiredvpn/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/tiredvpn-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/tiredvpn-archive-keyring.gpg] https://tiredvpn.github.io/tiredvpn/apt stable main" | sudo tee /etc/apt/sources.list.d/tiredvpn.list
sudo apt update && sudo apt install tiredvpn
sudo tiredvpn-init        # генерирует секрет/сертификат, печатает ключи, запускает службу

Fedora/RHEL (dnf)

sudo tee /etc/yum.repos.d/tiredvpn.repo >/dev/null <<'EOF'
[tiredvpn]
name=TiredVPN
baseurl=https://tiredvpn.github.io/tiredvpn/rpm/$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://tiredvpn.github.io/tiredvpn/gpg.key
EOF
sudo dnf install tiredvpn && sudo tiredvpn-init

Пакеты apt и dnf устанавливают службу в отключенном состоянии — они поставляют бинарный файл, но оставляют его остановленным. Запустите sudo tiredvpn-init для завершения настройки: он генерирует секрет и сертификат, печатает ключи доступа и запускает службу. Однострочник и install.sh уже делают это за вас.

Ручная загрузка бинарного файла

Для других дистрибутивов или хостов без systemd загрузите бинарный файл напрямую:

curl -LO https://github.com/tiredvpn/tiredvpn/releases/latest/download/tiredvpn-linux-amd64.tar.gz
tar xzf tiredvpn-linux-amd64.tar.gz
sudo mv tiredvpn-linux-amd64 /usr/local/bin/tiredvpn

Доступные платформы: linux-amd64, linux-arm64. Другие методы установки описаны в разделах Docker и Сборка из исходников ниже.

Kubernetes через Helm (сервер и/или клиент из одного релиза):

helm install my-tiredvpn oci://ghcr.io/tiredvpn/charts/tiredvpn --version 0.1.0 \
  -f my-values.yaml

Смотрите deploy/helm/tiredvpn/README.md) для значений, примеров и опций TLS/аутентификации/Redis/HPA.

Генерация общего секрета

Следующие шаги (секрет, сертификаты, флаги сервера) предназначены только для ручной или продвинутой настройки. Однострочник и пакеты apt/dnf обрабатывают все это за вас через tiredvpn-init — перейдите к разделам о приложениях, если вы использовали один из них.

openssl rand -hex 32

Генерация TLS-сертификатов

Для тестирования создайте самоподписанный сертификат:

openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \
  -days 365 -nodes -keyout server.key -out server.crt \
  -subj "/CN=your-server.com"

Для производства используйте Let's Encrypt с certbot:

sudo certbot certonly --standalone -d your-server.com
# Сертификаты будут по пути:
#   /etc/letsencrypt/live/your-server.com/fullchain.pem
#   /etc/letsencrypt/live/your-server.com/privkey.pem

Сервер

tiredvpn server \
  -listen :443 \
  -cert server.crt \
  -key server.key \
  -secret <your-secret>

По умолчанию сервер слушает как TCP (TLS), так и UDP (QUIC). Он обслуживает поддельный веб-сайт для неаутентифицированных посетителей, делая его неотличимым от обычного HTTPS-сервера.

Серверный файрвол и проброс (необходимо для TUN-режима)

Если вы используете TUN-режим (-tun / -ip-pool), вы должны самостоятельно включить IP-форвардинг и NAT на хосте сервера. TiredVPN намеренно не изменяет ваш файрвол или маршрутизацию. Без этого TUN-клиент подключается, и в логах сервера появляется TUN mode established, но трафик не идет — пакеты клиента достигают TUN-интерфейса сервера и деваться некуда. (Режим SOCKS5-прокси не затронут: процесс сервера сам выводит этот трафик.)

# 1) Включить IP-форвардинг (сделать это постоянным)
sysctl -w net.ipv4.ip_forward=1
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf

# 2) NAT для пула клиентов через ваш аплинк-интерфейс.
#    Найти аплинк с помощью: ip route get 1.1.1.1   (часть "dev <iface>")
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o <wan-iface> -j MASQUERADE

# 3) Только если ваша политика FORWARD — DROP (проверить: iptables -S FORWARD | head -1)
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -d 10.8.0.0/24 -j ACCEPT

Замените 10.8.0.0/24 на ваш CIDR из -ip-pool, а <wan-iface> на ваш реальный аплинк (например, eth0, enp1s0). Для IPv6-пулов продублируйте правила с ip6tables и net.ipv6.conf.all.forwarding=1. Используйте менеджер файрволов (nftables, ufw, firewalld), если предпочитаете — требование то же: проброс и NAT для пула.

Клиент (SOCKS5-прокси)

tiredvpn client \
  -server your-server.com:443 \
  -secret <your-secret> \
  -listen 127.0.0.1:1080

Запускает локальный SOCKS5-прокси на порту 1080. Настройте свой браузер или приложения на socks5://127.0.0.1:1080.

Клиент (полный VPN / режим TUN)

sudo tiredvpn client \
  -server your-server.com:443 \
  -secret <your-secret> \
  -tun \
  -tun-routes 0.0.0.0/0

Это создает TUN-интерфейс и маршрутизирует весь трафик через VPN.


Конфигурация

TiredVPN настраивается полностью через флаги CLI. Запустите tiredvpn server -help или tiredvpn client -help для получения полного списка.

Флаги сервера

Флаг По умолчанию Описание
-listen :443 IPv4 адрес прослушивания
-listen-v6 [::]:995 IPv6 адрес прослушивания
-cert server.crt Файл TLS-сертификата
-key server.key Файл закрытого ключа TLS
-secret Общий секрет (одноклиентский режим)
-redis Адрес Redis для многоклиентского режима
-api-addr 127.0.0.1:8080 REST API для управления клиентами
-ip-pool CIDR для назначения IP-адресов клиентам TUN
-tun-mtu 1280 MTU интерфейса TUN (1280-9000)
-port-range Многопортовое прослушивание (например, 47000-47100)
-no-quic false Отключить прослушиватель QUIC/UDP
-upstream Вышестоящий сервер для многохоповой маршрутизации
-fake-root ./www Каталог, предоставляемый неаутентифицированным посетителям
-enable-icmp false Включить прослушиватель ICMP-туннеля (требует CAP_NET_RAW)
-debug false Подробное логирование

Флаги клиента

Флаг По умолчанию Описание
-server Адрес удаленного сервера (обязательный)
-secret Общий секрет (обязательный)
-listen 127.0.0.1:1080 Локальный адрес SOCKS5/HTTP прокси
-tun false Включить режим TUN (полный VPN)
-tun-routes Маршруты для туннелирования (например, 0.0.0.0/0)
-quic false Включить транспорт QUIC
-strategy Принудительно указать конкретную стратегию
-port-hop false Включить переключение портов
-ech false Включить Encrypted Client Hello
-pq false Включить постквантовую криптографию
-rtt-masking false Скрывать временную сигнатуру прокси
-prefer-ipv6 true Предпочтение транспорта IPv6
-fallback true Откат стратегии во время сессии
-benchmark false Запустить тестирование задержки стратегий

Управление клиентами

# Добавить клиента (многоклиентский режим с Redis)
tiredvpn admin add -api http://127.0.0.1:8080 -server vpn.example.com:443

# Вывести список клиентов
tiredvpn admin list -api http://127.0.0.1:8080

# Удалить клиента
tiredvpn admin delete -api http://127.0.0.1:8080 -id <client-id>

# Сгенерировать QR-код для мобильного приложения
tiredvpn admin qr -server vpn.example.com:443 -secret <secret>

Docker

Готовые образы доступны на Docker Hub. Платформы: linux/amd64, linux/arm64.

Тег Описание
latest Последний стабильный релиз
1.3.3 Закрепленная версия
edge Последняя сборка из ветки main

Запуск сервера

docker run -d \
  --name tiredvpn-server \
  -p 443:443/tcp \
  -p 443:443/udp \
  -v /path/to/certs:/certs:ro \
  tiredvpn/tiredvpn:latest \
  server -listen :443 \
  -cert /certs/server.crt \
  -key /certs/server.key \
  -secret <your-secret>

Docker Compose

curl -O https://raw.githubusercontent.com/tiredvpn/tiredvpn/main/docker-compose.yml
TIREDVPN_SECRET=<your-secret> docker compose up -d

Или с пользовательским docker-compose.yml:

version: "3.8"

services:
  tiredvpn-server:
    image: tiredvpn/tiredvpn:latest
    ports:
      - "443:443/tcp"
      - "443:443/udp"
    volumes:
      - ./certs:/certs:ro
    command:
      - "server"
      - "-listen"
      - ":443"
      - "-cert"
      - "/certs/server.crt"
      - "-key"
      - "/certs/server.key"
      - "-secret"
      - "${TIREDVPN_SECRET}"
      - "-redis"
      - "redis:6379"
    depends_on:
      - redis
    restart: unless-stopped

  redis:
    image: redis:7-alpine
    volumes:
      - redis-data:/data
    restart: unless-stopped

volumes:
  redis-data:

Локальная сборка

docker build -t tiredvpn .

Режим TUN в контейнерах

Образ по умолчанию представляет собой сборку scratch-прокси без iptables, поэтому серверный TUN (-ip-pool) в нем не работает. Для полного туннелирования TUN используйте цель сборки tun (tiredvpn:tun), которая требует /dev/net/tun, NET_ADMIN и доступа на запись net.ipv4.ip_forward; его точка входа автоматически настраивает NAT. То же самое относится к Helm с параметром server.tun.enabled. Полные рецепты для docker run / compose / Helm приведены в docs/deployment.md → TUN mode in containers).


Сборка из исходников

Требования

  • Go 1.26 или новее
  • Linux, macOS или Windows (режим TUN требует Linux)

Сборка

git clone https://github.com/tiredvpn/tiredvpn.git
cd tiredvpn
make build

Или напрямую с помощью Go:

go build -o tiredvpn ./cmd/tiredvpn/

Кросс-компиляция для Linux (amd64)

make build-linux

Кросс-компиляция для Android (arm64)

make build-android

Запуск тестов

make test

Стратегии

TiredVPN включает адаптивный стратегический движок, который автоматически выбирает лучший транспорт. Каждая стратегия ориентирована на аспект обхода DPI.

ID Название Описание
quic_salamander QUIC Salamander QUIC поверх UDP с набивкой Salamander (по умолчанию, труднее всего идентифицировать)
quic QUIC Tunnel Транспорт QUIC с подменой версии (draft-29 для обхода TSPU)
reality Протокол REALITY Маскируется под легитимные веб-сайты с аутентичными TLS-отпечатками
http2_stego Стеганография HTTP/2 Скрывает данные внутри фреймов HTTP/2 с набивкой в стиле NaiveProxy
websocket_padded WebSocket Salamander Транспорт WebSocket с набивкой обфускации Salamander
http_polling HTTP Polling Кратковременные запросы HTTP/1.1 (стиль meek), обнаруживает обход длительных соединений
morph_* Морфинг трафика Переформатирует трафик для соответствия профилям видеостриминга (Yandex, VK)
confusion_* Замешательство протоколов Заставляет пакеты выглядеть как DNS/HTTP/SSH/SMTP поверх TLS
geneva_* Движок Geneva Манипуляция пакетами для конкретных стран (Россия TSPU, Китай GFW, Иран, Турция)
antiprobe Анти-проба Сервер маскируется под обычный веб-сайт; раскрывает туннель только аутентифицированным клиентам
state_exhaustion Иссчерпание состояния Заполняет таблицу состояний DPI обманными пакетами для активации режима fail-open
mesh_relay Mesh Relay Маршрутизирует через ретрансляционные узлы в регионах с более слабой фильтрацией
icmp_tunnel ICMP-туннель Резервный туннель поверх ICMP Echo (режим скрытности, требует CAP_NET_RAW)
ssh_camouflage Маскировка SSH Туннель под трафиком SSH (приоритет 28, требует поддержки сервером)
imap_camouflage Маскировка IMAP Туннель под почтовым протоколом IMAP (приоритет 29, требует поддержки сервером)

Движок стратегий поддерживает:

  • Автоматическое зондирование — тестирует все доступные стратегии и ранжирует по задержке.
  • Прерыватели цепи — отключает неудачные стратегии после настраиваемого порога.
  • Откат во время сессии — переключает стратегию без разрыва соединения.
  • Периодическое повторное зондирование — повторно проверяет заблокированные стратегии по таймеру.
  • Бенчмаркингtiredvpn client -benchmark для тестирования всех стратегий.

Архитектура

cmd/tiredvpn/          CLI точка входа (сервер, клиент, admin)
internal/
  server/              Серверная обработка соединений, прослушиватели TLS/QUIC
  client/              Клиентский прокси, TUN, оркестрация стратегий
  strategy/            Стратегии обхода DPI и адаптивный движок
  tun/                 Управление устройствами TUN
  mux/                 Интеграция мультиплексора smux
  tunnel/              Абстракции туннелей
  proxy/               SOCKS5 и HTTP прокси
  tls/                 Утилиты TLS и отпечатки uTLS
  evasion/             Примитивы обхода низкого уровня
  geneva/              Движок манипуляции пакетами Geneva
  porthopping/         Логика переключения портов
  multiport/           Многопортовый прослушиватель
  pool/                Пул IP-адресов для клиентов TUN
  metrics/             Коллектор метрик Prometheus
  padding/             Утилиты набивки трафика
  protect/             Защита сокетов VpnService на Android
  control/             Протокол управляющего сокета Android
  config/              Типы конфигурации
  log/                 Структурированное логирование
  benchmark/           Тестирование стратегий
  kt offload/          Снятие нагрузки TLS на уровне ядра

Документация

Полная документация доступна в каталоге docs/):


Участие в разработке

Мы приветствуем вклад. Пожалуйста, ознакомьтесь с CONTRIBUTING.md), где описаны руководящие принципы отправки патчей, сообщения об ошибках и рабочий процесс разработки.

Прежде чем отправлять pull request:

  1. Выполните make test и убедитесь, что все тесты проходят.
  2. Выполните make lint, если у вас установлен golangci-lint.
  3. Делайте коммиты сфокусированными и с хорошими описаниями.

Сообщество


Лицензия

TiredVPN лицензирована в соответствии с GNU Affero General Public License v3.0).


История звезд

График истории звезд

Комментарии
Войдите, чтобы оставить комментарий