Как настроить разделение (split‑tunnel) трафика Cloudflare Warp на сервере, чтобы часть трафика шла через Warp, а часть — напрямую?

Хочу, чтобы на сервере (панель 3x-ui) Warp работал только для отдельных подключений: <i>одно inbound — через сервер и Warp, другое — просто через сервер</i>.<br/> При попытке включить Warp кнопкой в панели весь трафик идёт через Warp, хотя в Routing Rules я указываю соответствующий Inbound Tag и выставляю Outbound Tag = warp.<br/> <br/> Пробовал установить вручную:<br/> 1) curl -fsSL <a href="https://pkg.cloudflareclient.com/pubkey.gpg" rel="nofollow">https://pkg.cloudflareclient.com/pubkey.gpg</a> | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg <br/> <br/> 2) echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] <a href="https://pkg.cloudflareclient.com/" rel="nofollow">https://pkg.cloudflareclient.com/</a> $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list <br/> <br/> 3) sudo apt-get update && sudo apt-get install cloudflare-warp <br/> 4) warp-cli registration new <br/> 5) warp-cli mode proxy <br/> 6) warp-cli connect <br/> 7) warp-cli status <br/> <br/> Затем добавил Outbound -> socks: address 127.0.0.1, port 40000. В Routing Rules указал нужные домены, назначил соответствующий outbound tag, отключил всех пользователей, сохранил и перезагрузил ядро — проблема не ушла. Если правило с outbound=warp стоит первым, то весь трафик идёт через Warp; если вторым — весь трафик идёт через сервер. Помогите, пожалуйста: что нужно сделать, чтобы Warp работал только для выбранных подключений?
  • 12 апреля 2026 г. 20:01
Ответы на вопрос 3
Коротко — проблема почти всегда не в 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) и подсказать, почему текущее правило матчит всё.
Скорее всего routing rule для warp ловит всё потому что Inbound Tags пустое или неверно указанное — без фильтра правило применяется к любому трафику. В 3x-ui каждый inbound имеет тег вроде <code>inbound-PORT</code> (например <code>inbound-10443</code> ), его видно в настройках inbound'а в поле Tag. Пропиши именно этот тег в поле Inbound Tags правила для warp — тогда через него пойдёт только трафик из нужного inbound'а, остальное напрямую.
<a href="https://qna.habr.com/user/opium" rel="nofollow">Пума Тайланд</a>
Похожие вопросы