WARP на выходе: подключаем
Зачем WARP на выходе — разбирали в теории. Теперь ставим. Покажу, как я подключаю WARP-outbound на боевой ноде: креды через wgcf, аутбаунд wireguard, правила роутинга под OpenAI/Spotify/Netflix и две грабли, на которых спотыкаются все — reserved и noKernelTun.
Читать теорию →Шаг 1: креды WARP через wgcf
wgcf регистрирует бесплатный аккаунт WARP и выдаёт WireGuard-профиль (приватный ключ, адреса v4/v6). У ассета имя с версией — статичной ссылки нет, тянем актуальную через GitHub API:
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. Комментарии — где что взять:
{
"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
}
}Разбор полей:
secretKey—PrivateKeyизwgcf-profile.conf.address—Addressv4/v6 из профиля. Нет IPv6 на ядре — убери v6-адрес, WARP и сам выдаст v6.publicKeyпира — публичный ключ Cloudflare WARP (константа, как в примере).endpoint— явный IPv4162.159.192.1:2408. Если оставить доменное имя, оно резолвится в IPv6, и на ноде без v6 WARP «висит».reserved— критично, см. грабли.noKernelTun: true— обязательно на ноде в Docker.
Шаг 3: роутинг — что гнать через WARP
Выше правил DIRECT/proxy добавляем: домены сервисов, которые режут дата-центры, → в warp. Всё остальное идёт как шло:
{
"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 не стартует, в логах ноды:
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+ — привяжи и перегенерируй профиль:
wgcf update --license-key ВАШ_КЛЮЧ
wgcf generateПод серьёзную нагрузку — WARP+ или несколько WARP-аккаунтов с балансировкой между warp-аутбаундами.
Зачем всё это и что WARP решает, а что нет (гео, аккаунт, резидентность) — разбирали в парной теории «WARP на выходе: зачем и что даёт».
Следующий гайд Zapret и разблокировка YouTube → ↗ Не понравилась статья или что-то непонятно? Напишите мне — помогу или поправлю. @notrealvpn →