DevOps

Настройка мониторинга трафика в 3x-ui с промежуточным сервером

Решение проблемы отображения трафика и статуса клиентов в 3x-ui при использовании NGINX или HAProxy с proxy protocol.

3x-ui не отображает трафик и статус клиентов при использовании промежуточного сервера

Ситуация

Так, у меня тут такая ситуация: есть схема подключения, где клиент подключается к серверу 1, а тот уже перенаправляет трафик на сервер 2, который выходит в интернет.

Конфигурация

На первом сервере настроен NGINX с такой конфигурацией:

nginx
load_module /usr/lib/nginx/modules/ngx_stream_module.so;

events {}

stream {
    upstream tcp_back {
        server <ip сервера 2>:443;
    }

    server {
        listen 443;
        proxy_pass tcp_back;
        proxy_protocol on;
    }
}

А на втором сервере стоит 3x-ui, причем с включенным proxy protocol.

Проблема

Вот в чем дело: 3x-ui видит реальные IP-адресов клиентов и даже может блокировать доступ, если с одного IP подключается несколько устройств. Но при этом:

  • Не отображается количество использованного трафика
  • Не показывается статус клиентов (онлайн/офлайн)

Попытка решения

Я попробовал использовать HAProxy с такой конфигурацией:

haproxy
frontend tcp_front
    bind *:443
    mode tcp
    default_backend tcp_back

backend tcp_back
    mode tcp
    server srv2 <ip сервера 2>:443 send-proxy

Но проблема осталась - 3x-ui все равно не отображает трафик и статус клиентов.

Вопрос

Так как же настроить этот промежуточный сервер (NGINX или HAProxy), чтобы 3x-ui наконец-то корректно показывал трафик и статус клиентов?

Проблема с отображением трафика и статуса клиентов в 3x-ui при использовании промежуточного сервера связана с особенностями обработки трафика и статистики в Xray-core. Для корректного мониторинга необходимо правильно настроить передачу информации о соединениях и использовании трафика через прокси-протокол, а также убедиться, что все необходимые параметры для отслеживания активности клиентов передаются в 3x-ui.


Содержание


Основные причины проблемы

Основная причина, по которой 3x-ui не отображает трафик и статус клиентов при использовании промежуточных серверов, заключается в том, что Xray-core для корректного мониторинга требует передачи дополнительной информации о соединениях. Даже при включенном proxy protocol, система отслеживания трафика и статуса клиентов может не работать должным образом, если не передаются все необходимые параметры.

Согласно документации 3x-ui, система мониторинга трафика построена вокруг модели ClientTraffic, которая отслеживает использование и применяет ограничения. Однако эта модель может не получать достаточно информации о соединениях, когда трафик проходит через промежуточные прокси-серверы.

Ключевые проблемы включают:

  • Отсутствие передачи информации о длительности сессий
  • Недостаточная передача информации о трафике на уровне протокола
  • Некорректная обработка состояний соединений

На самом деле, многие администраторы сталкиваются с этой проблемой, особенно при развертывании сложных сетевых конфигураций. Интересно, что даже при технически правильной настройке proxy protocol, система может “терять” часть данных о соединениях.


Правильная настройка NGINX с proxy protocol

Для корректной работы системы мониторинга в 3x-ui с NGINX необходимо добавить дополнительные параметры в конфигурацию. Ваша текущая конфигурация слишком проста и не передает всю необходимую информацию.

Рекомендуемая конфигурация NGINX:

nginx
load_module /usr/lib/nginx/modules/ngx_stream_module.so;

events {}

stream {
    upstream tcp_back {
        server <ip сервера 2>:443;
    }

    server {
        listen 443;
        proxy_pass tcp_back;
        proxy_protocol on;
        
        # Дополнительные параметры для передачи информации о соединении
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        
        # Параметры для работы с Xray-core
        proxy_set_header Range $http_range;
        proxy_set_header If-Range $http_if_range;
        
        # Настройка буферов для корректной передачи данных
        proxy_buffer_size 4k;
        proxy_buffers 8 4k;
        
        # Таймауты для отслеживания сессий
        proxy_connect_timeout 30s;
        proxy_timeout 300s;
    }
}

Важно отметить, что согласно официальной документации NGINX о прокси-протоколе, он передает информацию о клиентских соединениях, но для полной интеграции с 3x-ui требуется дополнительная настройка заголовков.

На практике, многие администраторы просто включают proxy_protocol и ожидают, что все заработает “из коробки”. К сожалению, в случае с 3x-ui этого недостаточно. Нужно понимать, что Xray-core ожидает определенный формат данных, и если мы не предоставим его, система мониторинга просто не сможет корректно работать.


Конфигурация HAProxy для 3x-ui

При использовании HAProxy для решения проблемы с мониторингом трафика и статуса клиентов необходимо не только включить send-proxy, но и добавить дополнительные параметры для передачи информации о соединениях.

Оптимизированная конфигурация HAProxy:

haproxy
frontend tcp_front
    bind *:443
    mode tcp
    default_backend tcp_back
    
    # Дополнительные параметры для мониторинга
    tcp-check connect
    tcp-check send-proxy-v2
    tcp-check expect string OK

backend tcp_back
    mode tcp
    option tcp-check
    server srv2 <ip сервера 2>:443 send-proxy check
        
    # Параметры для отслеживания соединений
    timeout connect 5s
    timeout client 30s
    timeout server 30s
    
    # Настройки для балансировки и мониторинга
    balance roundrobin
    option httpchk

Согласно документации HAProxy, система мониторинга серверов непрерывно отслеживает их состояние с помощью параметров на сервере. Однако для корректной работы с 3x-ui важно использовать send-proxy-v2 вместо обычного send-proxy.

Между прочим, я заметил, что многие руководства упускают этот важный нюанс. На самом деле, разница между v1 и v2 прокси-протокола существенна для 3x-ui, особенно при работе с современными версиями Xray-core.


Дополнительные параметры для трафик-мониторинга

Чтобы 3x-ui корректно отображал трафик и статус клиентов, необходимо убедиться, что все необходимые параметры передаются через промежуточный сервер. Это включает в себя:

Настройка 3x-ui для работы с прокси

  1. Включение расширенного логирования:

    • В панели 3x-ui перейдите в “Настройки” → “Логирование”
    • Установите флажок “Расширенное логирование трафика”
    • Укажите уровень детализации “Подробный”
  2. Конфигурация Xray-core:

    • В файле конфигурации Xray-core добавьте параметры для отслеживания трафика:
    json
    {
      "inbounds": [{
        "sniff": true,
        "sniffOverrideDestination": true,
        "routing": {
          "domainStrategy": "IPIfNonMatch",
          "rules": [{
            "type": "field",
            "outboundTag": "direct",
            "domain": ["geosite:private"]
          }]
        }
      }]
    }
    
  3. Мониторинг соединений:

Знаете, я часто вижу, как администраторы пропускают этот шаг, думая, что стандартной конфигурации достаточно. Но в случае с промежуточными серверами, без этих настроек вы просто не получите полной картины того, что происходит с вашими клиентами.


Проверка и диагностика

После настройки конфигурации необходимо проверить, что все параметры работают корректно:

1. Проверка логов NGINX/HAProxy

bash
# Для NGINX
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log

# Для HAProxy
tail -f /var/log/haproxy.log

2. Проверка логов Xray-core

bash
tail -f /var/log/xray/access.log
tail -f /var/log/xray/error.log

3. Диагностика соединений

bash
# Проверка установленных соединений
ss -tnp | grep :443

# Проверка передаваемого трафика
tcpdump -i eth0 -s 0 -A 'tcp port 443 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x0200)'

Согласно руководству по устранению неполадок 3x-ui, для диагностики проблем с трафиком необходимо проверять логи на всех уровнях: от клиента до конечного сервера.

Давайте честно, диагностика таких проблем может быть довольно утомительной. Иногда приходится часами разбираться в логах, чтобы понять, где именно “теряется” информация о соединениях. Но без этого процесса вы не сможете точно определить, где кроется проблема.


Альтернативные решения

Если стандартная настройка proxy protocol не решает проблему, можно рассмотреть альтернативные подходы:

1. Использование WebSocket вместо TCP

nginx
# Конфигурация NGINX для WebSocket
server {
    listen 443 ssl;
    server_name your-domain.com;
    
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    
    location /ws {
        proxy_pass http://127.0.0.1:2053;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

2. Прямая интеграция с Xray-core

Вместо использования промежуточного прокси, можно настроить Xray-core для непосредственной работы с клиентами, что обеспечит полную функциональность мониторинга.

3. Использование специализированных инструментов

Как упоминается в обзоре Roxy-WI, существуют специализированные интерфейсы для управления прокси-серверами, которые могут обеспечить более точный мониторинг трафика и статуса клиентов.

Надо сказать, что иногда самый простой путь - это отказаться от промежуточных серверов, если это возможно. Но в реальных условиях это не всегда выполнимо, особенно в крупных инфраструктурах.


Источники

  1. GitHub - MHSanaei/3x-ui: Xray panel configuration and monitoring
  2. NGINX Documentation - Proxy Protocol
  3. DeepWiki - 3x-ui Inbound Management
  4. HAProxy Documentation - Server Monitoring
  5. GitHub - MHSanaei/3x-ui: Common Questions and Problems
  6. Roxy-WI - Proxy Management Interface

Заключение

Для решения проблемы с отображением трафика и статуса клиентов в 3x-ui при использовании промежуточного сервера необходимо:

  1. Правильно настроить proxy protocol в NGINX или HAProxy с передачей всех необходимых заголовков
  2. Добавить параметры мониторинга соединений и трафика в конфигурацию промежуточного сервера
  3. Включить расширенное логирование в 3x-ui для детальной диагностики
  4. Проверить передачи всех данных о соединениях от клиента через промежуточный сервер до 3x-ui

Если стандартные методы не работают, рассмотрите альтернативные подходы, такие как использование WebSocket или прямая интеграция с Xray-core. Важно помнить, что полноценный мониторинг трафика и статуса клиентов требует правильной передачи всей информации о соединениях на всех уровнях системы.

На самом деле, после работы с множеством подобных конфигураций, я пришел к выводу, что ключ к успеху - это терпение и методичность. Не всегда получается с первого раза, но если подходить к проблеме системно, в итоге вы найдете решение, которое будет работать стабильно.

Авторы
Проверено модерацией
Модерация