← К библиотеке
Обход блокировок Практика

WARP на выходе: подключаем

Зачем WARP на выходе — разбирали в теории. Теперь ставим. Покажу, как я подключаю WARP-outbound на боевой ноде: креды через wgcf, аутбаунд wireguard, правила роутинга под OpenAI/Spotify/Netflix и две грабли, на которых спотыкаются все — reserved и noKernelTun.

Читать теорию

Шаг 1: креды WARP через wgcf

wgcf регистрирует бесплатный аккаунт WARP и выдаёт WireGuard-профиль (приватный ключ, адреса v4/v6). У ассета имя с версией — статичной ссылки нет, тянем актуальную через GitHub API:

get-wgcf.sh
WGCF_URL=$(curl -fsSL https://api.github.com/repos/ViRb3/wgcf/releases/latest \
  | grep -oE 'https://[^"]*wgcf_[0-9.]+_linux_amd64' | head -1)
curl -fsSL -o /usr/bin/wgcf "$WGCF_URL"
chmod +x /usr/bin/wgcf
wgcf register     # создаёт wgcf-account.toml (прими ToS)
wgcf generate     # создаёт wgcf-profile.conf (PrivateKey, Address v4/v6)
cat wgcf-profile.conf

Из wgcf-profile.conf нам нужны PrivateKey и Address (v4/v6). Из wgcf-account.toml понадобится client_id — из него считается reserved (об этом ниже).

Шаг 2: wireguard-outbound в конфиге ноды

В секцию outbounds конфига добавляем WARP. Комментарии — где что взять:

config.json
{
  "tag": "warp",
  "protocol": "wireguard",
  "settings": {
    "secretKey": "PRIVATE_KEY_X25519",
    "address": ["172.16.0.2/32", "2606:4700:110:XXXX/128"],
    "peers": [{
      "publicKey": "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=",
      "endpoint": "162.159.192.1:2408"
    }],
    "mtu": 1280,
    "reserved": [0, 0, 0],
    "noKernelTun": true
  }
}

Разбор полей:

  • secretKeyPrivateKey из wgcf-profile.conf.
  • addressAddress v4/v6 из профиля. Нет IPv6 на ядре — убери v6-адрес, WARP и сам выдаст v6.
  • publicKey пира — публичный ключ Cloudflare WARP (константа, как в примере).
  • endpointявный IPv4 162.159.192.1:2408. Если оставить доменное имя, оно резолвится в IPv6, и на ноде без v6 WARP «висит».
  • reserved — критично, см. грабли.
  • noKernelTun: true — обязательно на ноде в Docker.

Шаг 3: роутинг — что гнать через WARP

Выше правил DIRECT/proxy добавляем: домены сервисов, которые режут дата-центры, → в warp. Всё остальное идёт как шло:

config.json
{
  "type": "field",
  "outboundTag": "warp",
  "domain": [
    "geosite:openai",
    "domain:chatgpt.com",
    "domain:oaistatic.com",
    "domain:spotify.com",
    "domain:scdn.co",
    "geosite:netflix"
  ]
}

Так через WARP уходит только то, что иначе не работает — скорость основного трафика не проседает.

Грабля 1: reserved (иначе хэндшейк висит)

reserved — это 3 байта, вычисляемые из client_id твоего аккаунта. Без корректного reserved рукопожатие к свежим эндпоинтам WARP не проходит — соединение просто висит. Напрямую в wgcf-profile.conf его нет: бери через конвертер «wgcf → Xray reserved» по client_id/Reserved из wgcf-account.toml. Многие панели считают его сами — если поставил, а WARP висит, первым делом пересчитай reserved.

Грабля 2: noKernelTun на ноде в Docker

Топовая грабля именно на панельных нодах. Симптом — WARP не стартует, в логах ноды:

node-log
failed to disable ipv4 rp_filter for all: open /proc/sys/net/ipv4/conf/all/rp_filter: read-only file system

Причина: Xray ноды крутится в Docker, где /proc/sys смонтирован только для чтения, а свежий Xray по умолчанию поднимает WireGuard через kernel-TUN, которому нужна запись в /proc/sys. Лечится одной строкой "noKernelTun": true в settings WARP-аутбаунда — это возврат на userspace-стек, /proc/sys больше не трогается. После правки — restart ноды, строка Using kernel TUN из лога должна исчезнуть.

Шаг 4: проверка

WARP клиенту не виден и Host не создаёт — это внутренний egress ноды. Проверяем так:

  • Подключись клиентом, открой chat.openai.com — должно работать.
  • На 2ip.ru посмотри, каким видят твой IP: для OpenAI/Spotify это будет Cloudflare, для остального — твоя нода.

Если OpenAI ожил, а прочий трафик по-прежнему идёт через ноду — WARP собран правильно: точечный белый выход только для проблемных сервисов.

WARP+ (если нужна скорость)

Бесплатный WARP лимитирован. Есть ключ-лицензия WARP+ — привяжи и перегенерируй профиль:

warp-plus.sh
wgcf update --license-key ВАШ_КЛЮЧ
wgcf generate

Под серьёзную нагрузку — WARP+ или несколько WARP-аккаунтов с балансировкой между warp-аутбаундами.

Зачем всё это и что WARP решает, а что нет (гео, аккаунт, резидентность) — разбирали в парной теории «WARP на выходе: зачем и что даёт».

Следующий гайд Zapret и разблокировка YouTube → Не понравилась статья или что-то непонятно? Напишите мне — помогу или поправлю. @notrealvpn →
Материал носит образовательный характер и посвящён инженерии сетевой инфраструктуры. Вы отвечаете за соблюдение законов своей юрисдикции.