CLI-утилита для создания Cloudflare WARP VPN-тоннеля через AmneziaWG (обфусцированный форк WireGuard) на Windows.
English: README-en.md
- Регистрация в Cloudflare WARP и управление ключами
- AmneziaWG-тоннель с параметрами обфускации (jc, jmin, jmax, s1-s4, h1-h4, i1-i5)
- WFP firewall (kill switch)
- Сканер эндпоинтов v2 — поиск рабочих WARP-серверов через полноценный Noise-IK WireGuard handshake
- Авто-оптимизация —
awarp register --autoрегистрирует и находит лучший эндпоинт за одну команду - Интеграция с Запретом (winws) через привязку
--wf-iface
- Windows 10/11
- Права администратора (для
awarp up) wintun.dllрядом с бинарником
go build -o awarp.exe .Для создания TUN-интерфейса требуется библиотека wintun.dll. Скачать:
- Официальный сайт: https://www.wintun.net/
- GitHub: https://github.com/WireGuard/wintun
Поместите wintun.dll в ту же директорию, где лежит awarp.exe.
:: Всё в одном: регистрация + поиск лучшего эндпоинта
awarp register --auto
:: Подключение
awarp upПосле awarp register --auto вы получаете готовый к подключению профиль с оптимальным эндпоинтом. Профиль создаётся один раз и сохраняется рядом с бинарником.
awarp register --profile <name> [--license KEY] [--set-awg KEY=VAL ...] [--sni DOMAIN] [--i1-mode safe|reorder|legacy] [--auto]
awarp up --profile <name>
awarp down --profile <name>
awarp status --profile <name>
awarp scan [--community] [--fast] [--awg] [--full-as]
awarp config show --profile <name>
awarp config set --profile <name> [--endpoint IP:PORT] [--set-awg KEY=VAL ...]
awarp config profiles
awarp config delete --profile <name>
awarp help
Регистрирует новый аккаунт Cloudflare WARP.
:: Обычная регистрация
awarp register --profile mywarp
:: С WARP+ лицензией
awarp register --profile mywarp --license XXXXXX
:: С параметрами обфускации
awarp register --profile mywarp --set-awg jc=10 --set-awg jmin=50
:: С кастомным SNI для I1-пакета
awarp register --profile mywarp --sni cloudflare.com
:: С выбранной стратегией I1 (safe, reorder, legacy)
awarp register --profile mywarp --sni cloudflare.com --i1-mode reorder
:: Регистрация + авто-поиск лучшего эндпоинта
awarp register --profile mywarp --autoФлаг --auto автоматически находит самый быстрый WARP-сервер сразу после регистрации:
- Регистрирует аккаунт (или пропускает регистрацию, если профиль уже существует)
- Сканирует 10 подсетей Cloudflare WARP (8180 IP) через полноценный WireGuard handshake
- Находит лучший по задержке эндпоинт
- Сохраняет его в профиль
После этого остаётся только awarp up --profile <name>.
Если профиль уже существует, --auto не перерегистрирует его, а просто запускает сканирование и обновляет эндпоинт.
Сканирует эндпоинты Cloudflare WARP для поиска живых серверов.
:: Полное сканирование всех подсетей
awarp scan
:: С загрузкой community-списков
awarp scan --community
:: С AmneziaWG обфускацией (warp-plus junk noise)
awarp scan --awg
:: Быстрое сканирование (8 портов)
awarp scan --fast
:: Полное покрытие Cloudflare AS (~60k IP)
awarp scan --full-asВажно: сканер использует полноценный Noise-IKpsk2 WireGuard handshake (148-байтовая Initiation-посылка). Для корректной работы требуется зарегистрированный профиль (awarp register). Без профиля используется упрощённый MAC1-only probe, который всегда находит 0 эндпоинтов, т.к. WARP-серверы игнорируют Initiation-пакеты без MAC1 и незарегистрированного ключа.
Процесс сканирования:
- Phase 1: ICMP ping всех IP из 10 подсетей (8180 IP, или ~60k с
--full-as) - Phase 2: WireGuard handshake probe на 54 UDP-портах для топ-30 самых быстрых по ping IP
- Вывод таблицы живых эндпоинтов, отсортированных по задержке
Параметры сканирования:
- 10 подсетей (базовые):
162.159.192.0/21,188.114.96.0/20,8.6.112.0/24,8.34.70.0/24,8.34.146.0/24,8.35.211.0/24,8.39.125.0/24,8.39.204.0/24,8.39.214.0/24,8.47.69.0/24 - 26 подсетей (
--full-as): +162.159.200.0/21→162.159.248.0/21(7×/21) +188.114.112.0/20→188.114.240.0/20(8×/20) - 54 порта: 2408, 500, 1701, 4500, 854, 859, 864, 878, 880, 890, 891, 894, 903, 908, 928, 934, 939, 942, 943, 945, 946, 955, 968, 987, 988, 1002, 1010, 1014, 1018, 1070, 1074, 1180, 1387, 1843, 2371, 2506, 3138, 3476, 3581, 3854, 4177, 4198, 4233, 5279, 5956, 7103, 7152, 7156, 7281, 7559, 8319, 8742, 8854, 8886
- 50 конкурентных goroutines
- Progress bar для обеих фаз
:: Пример вывода
awarp scan
Results: 29 alive endpoints, top 20:
Distribution: 8.47.69.0/24=3 8.6.112.0/24=2 8.35.211.0/24=2 8.34.70.0/24=8 8.39.214.0/24=2 8.39.204.0/24=2 8.39.125.0/24=6 8.34.146.0/24=4
ENDPOINT PORT LATENCY
--------------------------------------------------
8.39.125.5 2408 46ms
8.6.112.245 2408 47ms
8.34.146.142 2408 47ms
...
Use the best endpoint:
awarp config set --profile <name> --endpoint 8.39.125.5:2408Использует warp-plus junk noise перед WireGuard handshake — для регионов где DPI блокирует чистый WG.
Быстрое сканирование на 8 основных портах вместо 54.
Загружает списки эндпоинтов с ircfspace/endpoint (GitHub) и использует их как источник IP. Если community-списки недоступны (блокировка в регионе или сетевые проблемы), сканер автоматически переключается на полное сканирование всех подсетей.
Максимальное покрытие Cloudflare AS — 26 подсетей (~60k IP). Добавляет 7 подсетей /21 (162.159.200.0/21 → 162.159.248.0/21) и 8 подсетей /20 (188.114.112.0/20 → 188.114.240.0/20). Рекомендуется для пользователей с хорошим каналом (занимает ~30 минут Phase 1).
После сканирования установите лучший эндпоинт:
awarp config set --profile mywarp --endpoint 8.39.125.5:2408
awarp down --profile mywarp
awarp up --profile mywarpЭндпоинт указывается в формате IP:PORT или хост:порт.
Дефолтный эндпоинт engage.cloudflareclient.com:2408 может работать медленно или быть недоступным в вашем регионе. Сканер находит ближайшие к вам WARP-серверы.
Сканер отправляет полноценный Noise-IKpsk2 handshake initiation — тот же самый пакет, который WireGuard (и AmneziaWG) отправляет при установке соединения:
- Генерация эфемерного ключа — для каждого probe создаётся новый ключ Curve25519
- KDF1/KDF2 через HMAC-Blake2s — вычисление цепочки ключей для шифрования
- mixHash/mixKey — лавинное перемешивание хэша для аутентифицированного шифрования
- TAI64N timestamp — защита от replay-атак
- Шифрование ChaCha20Poly1305 — статического ключа клиента и timestamp
- MAC1 через Blake2s-128 — подпись для аутентификации на WARP-сервере
WARP-сервер, получив валидный Initiation:
- Расшифровывает статический ключ клиента через
clientPub - Проверяет ключ в своей БД (зарегистрирован ли)
- Если всё ок — отправляет Handshake Response (32-байтный ответ)
- Если нет — молча дропает пакет
Именно поэтому сканирование без зарегистрированного профиля всегда находит 0 — сервер не знает ваш ключ и игнорирует запрос.
Обычный UDP-сканер проверяет, открыт ли порт (send → receive = "жив"). Это даёт ложные срабатывания: многие серверы в подсетях WARP имеют открытые UDP-порты, но не являются WARP-серверами. Noise-IK handshake даёт 100% точность — ответ приходит только от настоящего WARP-сервера, у которого зарегистрирован ваш ключ.
При регистрации можно задать стратегию генерации I1-пакета (QUIC Initial) через флаг --i1-mode:
| Режим | mini_quic level | Описание |
|---|---|---|
safe (default) |
4 | Split ClientHello на [0:1]+[38:∞], пропуск нулей, 2 CRYPTO фрейма |
reorder |
1 | Split+перестановка фреймов [38:∞]+[0:38], удаление хвоста 32 байта |
legacy |
0 | Один CRYPTO фрейм без фрагментации |
AWG 1.5+ <r N> tag: I1 может содержать <b 0x...> (include) и <r N> (skip N байт) для реконструкции фрагментированного QUIC-пакета. Алгоритм: чередовать <b> и <r>, где <r> пропускает N байт в оригинале.
Без --sni выбирается случайная статическая I1 маска (из 2 предсобранных).
QUIC Initial generation: HMAC-SHA256 с salt 38762cf7f55934b3..., AES-CBC для Header Protection mask (ECB fallback), AES-GCM шифрование payload. Алгоритм идентичен генератору llimonix/mini_quic.
| Параметр | Описание |
|---|---|
jc |
Количество junk-пакетов |
jmin, jmax |
Диапазон размеров junk-пакетов |
s1-s4 |
Заполнение сообщений |
h1-h4 |
Заголовки сообщений |
i1-i5 |
Пользовательские пакеты подписи |
- IPv4 (broad CIDR):
162.159.192.0/21(2046 IP),188.114.96.0/20(4094 IP),8.6.112.0/24,8.34.70.0/24,8.34.146.0/24,8.35.211.0/24,8.39.125.0/24,8.39.204.0/24,8.39.214.0/24,8.47.69.0/24 - IPv6:
2606:4700:100::/48,2606:4700:d0::/48 --full-as: добавляет162.159.200.0/21→162.159.248.0/21(7×/21) +188.114.112.0/20→188.114.240.0/20(8×/20) = ~60k IP
- Стандартный: UDP 2408
- Резервные: 500, 1701, 4500
- Все порты: 500, 854, 859, 864, 878, 880, 890, 891, 894, 903, 908, 928, 934, 939, 942, 943, 945, 946, 955, 968, 987, 988, 1002, 1010, 1014, 1018, 1070, 1074, 1180, 1387, 1701, 1843, 2371, 2408, 2506, 3138, 3476, 3581, 3854, 4177, 4198, 4233, 4500, 5279, 5956, 7103, 7152, 7156, 7281, 7559, 8319, 8742, 8854, 8886
engage.cloudflareclient.com:2408
При запуске winws (GoodbyeDPI/Запрет) вместе с WARP браузеры показывают "Нет интернета" и сайты не грузятся. Причина:
- WinDivert (используется winws) перехватывает пакеты на ВСЕХ сетевых интерфейсах
- WARP создаёт TUN-интерфейс (
warp0), который обрабатывает весь трафик - Windows NCSI отправляет HTTP-запросы через TUN
- WinDivert ломает эти запросы → Windows думает, что интернета нет
- curl и Telegram работают, потому что используют свой стек (Winsock)
curl https://youtube.comработает- Telegram работает
- Браузер показывает "Нет интернета", YouTube не грузится
- winws + WARP = браузер полностью не работает
Использовать --wf-iface=<индекс_физического_интерфейса> для привязки WinDivert только к физическому сетевому интерфейсу, исключая TUN.
- Скопируйте
zapret-warp-alt-chrome.batв директорию запрета (например,D:\zapret\) - Запустите WARP:
awarp up
- Запустите запрет (в отдельном терминале):
D:\zapret\zapret-warp-alt-chrome.bat
- Остановка:
awarp down taskkill /F /IM winws.exe
Bat-файл автоматически определяет сетевые интерфейсы:
- Находит индекс TUN-интерфейса (
warp0) черезnetsh int ip show interfaces - Находит индекс физического интерфейса (первый подключённый не-TUN интерфейс)
- Добавляет
--wf-iface=<индекс_физического>к аргументам winws - WinDivert захватывает пакеты ТОЛЬКО на физическом интерфейсе, игнорируя TUN
Если вы хотите использовать другую стратегию запрета (ALT1, ALT2 и т.д.) с WARP:
Готовый пример: examples/general (ALT11) + WARP.bat (на основе Flowseal/zapret-discord-youtube)
Шаг 1: Добавьте этот код после set "LISTS=%~dp0lists\" и перед cd /d %BIN%:
setlocal enabledelayedexpansion
set "PHY_IDX="
for /f "skip=1 tokens=1" %%a in ('netsh int ip show interfaces 2^>nul ^| findstr /i "connected"') do (
if not defined PHY_IDX set "PHY_IDX=%%a"
)
set "IFACE_FILTER="
if defined PHY_IDX set "IFACE_FILTER=--wf-iface=!PHY_IDX!"Шаг 2: Добавьте %IFACE_FILTER% перед --wf-tcp в команде winws:
:: До (ломается с WARP):
start "zapret: %~n0" /min "%BIN%winws.exe" --wf-tcp=80,443,...
:: После (работает с WARP):
start "zapret: %~n0" /min "%BIN%winws.exe" %IFACE_FILTER% --wf-tcp=80,443,...Если всё ещё не работает:
- Проверьте, что winws запущен:
tasklist | find winws - Проверьте индекс физического интерфейса:
netsh int ip show interfaces - Убедитесь, что
--wf-ifaceесть в командной строке winws - Попробуйте запустить winws вручную (не через bat), чтобы увидеть сообщения об ошибках
- Warp-in-WARP — два слоя WARP: внешний AmneziaWG (обфускация), внутренний чистый WireGuard. Первый обходит DPI, второй даёт выход с WARP-IP. Для регионов с глубокой блокировкой.
- SOCKS5 proxy-режим — вместо kernel TUN (админ, Wintun, роуты, DNS, фаерволл) — userspace WireGuard через gVisor netstack. SOCKS5 на
127.0.0.1:8086без прав администратора. Никаких конфликтов с WinDivert/zapret. Единый бинарник без sidecar. (из warp-plus) - LCG-рандомизация IP — ✓ реализовано (см. cmd/ipgen.go)
- Расширенные CIDR-диапазоны (broad CIDR +
--full-as) — ✓ реализовано: 10 подсетей (8180 IP) базово, 26 подсетей (~60k IP) с--full-as. Включает 8 новых /24 из warp-generator.github.io и 15 broad CIDR Cloudflare AS. Находит 29+ эндпоинтов. - TLS fingerprint rotation — 3-уровневый fallback для WARP API: uTLS (Chrome fingerprint) → stdlib TLS 1.3 → uTLS Chrome_Auto. Решит проблему keepalive timeout в регионах где stdlib TLS блокирован. (из warp-plus)
- Профили хранятся рядом с бинарником, не в
$HOME. Папкаprofiles/создаётся автоматически. - WARP keepalive может таймаутиться (TLS к api.cloudflareclient.com) — это не критично для работы тоннеля.
- Сканер без Zapret находит больше эндпоинтов (29 vs 20) — Zapret может rate-limit UDP probe-пакеты.
- При
awarp upвместе с тоннелем автоматически настраиваются: DNS (1.1.1.1), отключение IPv6 на физическом адаптере, метрики, отключение NCSI, очистка zombie-адаптеров. - При
awarp downвсе настройки возвращаются в исходное состояние.
MIT