Настройка мониторинга трафика в 3x-ui с промежуточным сервером
Решение проблемы отображения трафика и статуса клиентов в 3x-ui при использовании NGINX или HAProxy с proxy protocol.
3x-ui не отображает трафик и статус клиентов при использовании промежуточного сервера
Ситуация
Так, у меня тут такая ситуация: есть схема подключения, где клиент подключается к серверу 1, а тот уже перенаправляет трафик на сервер 2, который выходит в интернет.
Конфигурация
На первом сервере настроен 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 с такой конфигурацией:
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.
Содержание
- Основные причины проблемы
- Правильная настройка NGINX с proxy protocol
- Конфигурация HAProxy для 3x-ui
- Дополнительные параметры для трафик-мониторинга
- Проверка и диагностика
- Альтернативные решения
Основные причины проблемы
Основная причина, по которой 3x-ui не отображает трафик и статус клиентов при использовании промежуточных серверов, заключается в том, что Xray-core для корректного мониторинга требует передачи дополнительной информации о соединениях. Даже при включенном proxy protocol, система отслеживания трафика и статуса клиентов может не работать должным образом, если не передаются все необходимые параметры.
Согласно документации 3x-ui, система мониторинга трафика построена вокруг модели ClientTraffic, которая отслеживает использование и применяет ограничения. Однако эта модель может не получать достаточно информации о соединениях, когда трафик проходит через промежуточные прокси-серверы.
Ключевые проблемы включают:
- Отсутствие передачи информации о длительности сессий
- Недостаточная передача информации о трафике на уровне протокола
- Некорректная обработка состояний соединений
На самом деле, многие администраторы сталкиваются с этой проблемой, особенно при развертывании сложных сетевых конфигураций. Интересно, что даже при технически правильной настройке proxy protocol, система может “терять” часть данных о соединениях.
Правильная настройка NGINX с proxy protocol
Для корректной работы системы мониторинга в 3x-ui с 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:
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 для работы с прокси
-
Включение расширенного логирования:
- В панели 3x-ui перейдите в “Настройки” → “Логирование”
- Установите флажок “Расширенное логирование трафика”
- Укажите уровень детализации “Подробный”
-
Конфигурация Xray-core:
- В файле конфигурации Xray-core добавьте параметры для отслеживания трафика:
json{ "inbounds": [{ "sniff": true, "sniffOverrideDestination": true, "routing": { "domainStrategy": "IPIfNonMatch", "rules": [{ "type": "field", "outboundTag": "direct", "domain": ["geosite:private"] }] } }] } -
Мониторинг соединений:
- Согласно документации по управлению входящими соединениями, для корректного отслеживания необходимо активировать опции мониторинга в настройках каждого входящего соединения.
Знаете, я часто вижу, как администраторы пропускают этот шаг, думая, что стандартной конфигурации достаточно. Но в случае с промежуточными серверами, без этих настроек вы просто не получите полной картины того, что происходит с вашими клиентами.
Проверка и диагностика
После настройки конфигурации необходимо проверить, что все параметры работают корректно:
1. Проверка логов NGINX/HAProxy
# Для 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
tail -f /var/log/xray/access.log
tail -f /var/log/xray/error.log
3. Диагностика соединений
# Проверка установленных соединений
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 для 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, существуют специализированные интерфейсы для управления прокси-серверами, которые могут обеспечить более точный мониторинг трафика и статуса клиентов.
Надо сказать, что иногда самый простой путь - это отказаться от промежуточных серверов, если это возможно. Но в реальных условиях это не всегда выполнимо, особенно в крупных инфраструктурах.
Источники
- GitHub - MHSanaei/3x-ui: Xray panel configuration and monitoring
- NGINX Documentation - Proxy Protocol
- DeepWiki - 3x-ui Inbound Management
- HAProxy Documentation - Server Monitoring
- GitHub - MHSanaei/3x-ui: Common Questions and Problems
- Roxy-WI - Proxy Management Interface
Заключение
Для решения проблемы с отображением трафика и статуса клиентов в 3x-ui при использовании промежуточного сервера необходимо:
- Правильно настроить proxy protocol в NGINX или HAProxy с передачей всех необходимых заголовков
- Добавить параметры мониторинга соединений и трафика в конфигурацию промежуточного сервера
- Включить расширенное логирование в 3x-ui для детальной диагностики
- Проверить передачи всех данных о соединениях от клиента через промежуточный сервер до 3x-ui
Если стандартные методы не работают, рассмотрите альтернативные подходы, такие как использование WebSocket или прямая интеграция с Xray-core. Важно помнить, что полноценный мониторинг трафика и статуса клиентов требует правильной передачи всей информации о соединениях на всех уровнях системы.
На самом деле, после работы с множеством подобных конфигураций, я пришел к выводу, что ключ к успеху - это терпение и методичность. Не всегда получается с первого раза, но если подходить к проблеме системно, в итоге вы найдете решение, которое будет работать стабильно.