Коротко — проблема почти всегда не в Warp-клиенте, а в том, как составлены правила маршрутизации: правило, указывающее outbound = warp, у вас фактически матчится для всего трафика (или стоит раньше «общего» правила), поэтому весь трафик уходит через SOCKS Warp. Решение — сделать явные, конкретные правила с указанием inboundTag и правильным порядком, и не использовать в панели глобальный переключатель Warp.
Что нужно сделать (пошагово):
1) Убедиться, что warp-cli работает в режиме proxy и слушает SOCKS5
- warp-cli mode proxy
- warp-cli connect
- warp-cli status
По умолчанию SOCKS слушает 127.0.0.1:40000 (проверьте).
2) Создать outbound для Warp (SOCKS) и обычный outbound (direct/server)
Пример для движка Xray/V2Ray (фрагмент config.json):
"outbounds": [
{
"protocol": "socks",
"tag": "warp",
"settings": {
"servers": [
{
"address": "127.0.0.1",
"port": 40000
}
]
},
"streamSettings": {}
},
{
"protocol": "freedom",
"tag": "direct",
"settings": {}
}
]
Если хотите UDP через SOCKS (если SOCKS-сервер поддерживает), добавьте в settings "udp": true.
3) Настроить правила маршрутизации — обязательно указывать inboundTag (и тип field) и правильный порядок
Пример:
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"type": "field",
"inboundTag": ["inbound-warp"], <-- замените на тег вашего входящего, который должен идти через Warp
"outboundTag": "warp"
},
{
"type": "field",
"inboundTag": ["inbound-direct"], <-- тег входящего, который должен идти напрямую
"outboundTag": "direct"
},
{
"type": "field",
"outboundTag": "direct" <-- fallback: всё остальное напрямую
}
]
}
Обратите внимание:
- inboundTag — массив строк и должен точно совпадать с tag в настройке соответствующего inbound в конфиге (регистр и название).
- Правила читаются сверху вниз — более конкретные ставьте выше.
- Если у вас правило "outboundTag":"warp" без inboundTag/domain/условий, оно будет матчить всё — отсюда поведение «всё или ничего».
4) В панели (3x-ui) — не включайте её встроенный глобальный Warp toggle
Панель при нажатии может менять глобальный outbound/default route — это конфликтует с кастомными правилами. Делайте настройки либо через панель UI корректно (создавая outbound и правила как выше), либо вручную редактирование конфига, но не включайте глобальную опцию Warp.
5) Тестирование и отладка
- Включите лог level = debug в xray/v2ray, перезапустите и посмотрите, какое правило сработало при подключении — лог покажет matched rule/outbound.
- Проверьте, действительно ли inbound трафик уходит через нужный inbound (на клиенте запрос на ifconfig.co или ipinfo.io/ip покажет IP сервера/warp).
- Если всё уходит через warp — посмотрите в лог соответствия правил; скорее всего ваш warp-правило матчит раньше и без фильтра.
6) Возможные дополнительные тонкости
- SOCKS5 через warp-cli proxy может не поддерживать UDP (зависит от версии). Если нужен UDP- трафик, проверьте поддержку и настройки.
- Если вы используете панель, которая сама генерирует конфигы, редактируйте правила через её интерфейс (чтобы изменения не перезаписывались).
- Убедитесь, что имена inbound (tags) — те, что вы видите в /etc/xray/config.json или в UI — точно совпадают с теми, что указаны в правилах.
Если хотите, могу:
- Прислать конкретный пример JSON с вашими текущими именами inbound/outbound (пришлите фрагменты конфига из панели), или
- Посмотреть логи (debug) и подсказать, почему текущее правило матчит всё.