DevOps

Как получить IP клиентов через 3x ui api панели: фикс No IP Record

Решение проблемы 'No IP Record' в 3x ui api. Настройка Xray API, StatsService и inbound dokodemo-door для получения IP и данных пользователей в 3x ui панель. Примеры Python кода и отладка логов.

Как получить данные пользователей через API 3x-ui?

Здравствуйте! У меня несколько серверов с панелью 3x-ui, и я пытаюсь автоматизировать некоторые процессы. При попытке получить список IP-адресов клиента через API:

python
session.post(f"{panel_url}/panel/api/inbounds/clientIps/{client_email}", verify=False)

Я получаю ответ: {'success': True, 'msg': '', 'obj': 'No IP Record'}.

Однако в логах сервера я вижу множество записей с IP-адресами этого клиента:

grep "email: 011igg6e" /usr/local/x-ui/access.log

Вывод:

2025/11/01 06:22:48.053123 from **ip**:57758 accepted tcp:8.8.4.4:443 [inbound-443 >> direct] email: 011igg6e
2025/11/01 06:22:48.144394 from **ip**:57757 accepted udp:192.168.0.119:22000 [inbound-443 -> blocked] email: 011igg6e

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

Моя конфигурация панели:

json
"log": {
 "access": "./access.log",
 "dnsLog": false,
 "error": "./error.log",
 "loglevel": "warning",
 "maskAddress": ""
 },
 "api": {
 "tag": "api",
 "services": [
 "HandlerService",
 "LoggerService",
 "StatsService"
 ]
 },

Возможно, у меня неправильные настройки панели? Я работал с API, основываясь на этом руководстве: https://www.postman.com/hsanaei/3x-ui/documentation

Проблема с API 3x-ui, когда 3x ui api endpoint /panel/api/inbounds/clientIps/{client_email} возвращает 'No IP Record', несмотря на записи в access.log, обычно кроется в неполной настройке Xray API или отсутствии специального inbound для статистики. В вашей конфигурации 3x ui панель уже имеет LoggerService и StatsService, но нужен дополнительный dokodemo-door inbound на порт 62789 для передачи данных от Xray к панели — без него статистика IP пустая. Добавьте этот inbound, перезапустите Xray, и 3x ui настройка заработает: IP клиентов начнут отображаться в ответах API.


Содержание


Что такое API в 3x-ui панели

3x ui api — это мощный инструмент для автоматизации управления VPN-серверами через панель 3x ui панель. Вы можете добавлять клиентов, мониторить трафик, IP-адреса и даже логи без ручного входа в веб-интерфейс. В вашем случае запрос к /panel/api/inbounds/clientIps/{email} должен возвращать массив IP, но вместо этого — пустышку. Почему так?

Дело в том, что панель 3x-ui построена на Xray-core, и API полагается на внутренние сервисы вроде StatsService. Если они не связаны правильно, данные из access.log (где maskAddress: "" идеально логирует IP) не попадают в базу панели. Руководство на Postman упоминает базовые endpoints, но не акцентирует на Xray-конфиге — вот где собака зарыта.

А теперь представьте: у вас несколько серверов, скрипт на Python раз в минуту тянет IP клиентов для бана подозрительных. Звучит круто? Но без фикса это не сработает.


Основные причины ‘No IP Record’ в 3x ui api

Этот ответ 'obj': 'No IP Record' в 3x ui api — классика. Из обсуждений в официальном репозитории и issue #2888 видно:

  • StatsService не активен или не получает данные от Xray. Ваш конфиг имеет его в api.services, но без inbound на localhost:62789 статистика не обновляется.
  • Нет активных подключений в момент запроса. IP фиксируются только для “живых” сессий — проверьте xray statsquery.
  • Проблемы с flow в VLESS. Если клиенты на xtls-rprx-vision, как в issue #3255, limitIp и IP-тракинг глючат. Меняйте на xtls-rprx-direct.
  • Логи пишутся, но не парсятся. grep показывает email в логах — отлично, но панель ищет в своей SQLite DB (/etc/x-ui/x-ui.db).

Коротко: логи — это raw-данные, API — агрегированная статистика. Разрыв в цепочке.

Но подождите, а что если клиент оффлайн? Тогда и правда нет IP. Тестируйте с подключенным клиентом!


Правильная настройка Xray API в 3x-ui

Ваша 3x ui настройка почти готова, но дошлифуем. В файле /usr/local/x-ui/bin/config.json (или через панель) убедитесь:

json
{
 "log": {
 "access": "./access.log",
 "error": "./error.log",
 "loglevel": "warning",
 "maskAddress": ""
 },
 "api": {
 "tag": "api",
 "services": ["HandlerService", "LoggerService", "StatsService"]
 },
 "inbounds": [] // Здесь добавим позже
}

Перезапустите: x-ui restart. Теперь API доступно на /panel/api/, но для 3x ui клиент IP нужен StatsService.

Из vc.ru гайда: без log.access и maskAddress IP маскируются, но у вас все ок. Проблема глубже — в Xray API.

Шаг 1: В панели 3x-ui зайдите в Inbounds → Add Inbound → тип dokodemo-door, порт 62789, адрес 127.0.0.1, network tcp, sniffing off. Это “ворота” для stats.

Почему 62789? Стандартный порт Xray API в 3x-ui. Без него — тишина.


Создание inbound для статистики клиентов

Вот пошаговка, чтобы 3x ui api наконец увидел IP:

  1. Логиньтесь в 3x ui панель (обычно https://your-ip:54321/panel).
  2. Inbounds → Add Inbound.
  3. Remark: Xray API Stats.
  4. Protocol: dokodemo-door.
  5. Port: 62789.
  6. Listen: 127.0.0.1.
  7. Network: tcp.
  8. Sniffing: отключено.
  9. Сохранить.

Затем в панели: Xray Config → Update Config. Или CLI: x-ui restart.

Проверьте: подключите клиента (тот же 011igg6e), подождите 10 сек, запросите API. IP должен появиться!

Из DeepWiki: этот inbound — ключ к clientIps, он форвардит stats в DB панели.

А если не сработало? Смотрите error.log: tail -f /usr/local/x-ui/log/error.log.


Проверка и активация StatsService

StatsService в 3x ui настройка — сердце IP-мониторинга. Проверьте статус:

bash
xray api statsquery --server=127.0.0.1:62789

Если “no server” — inbound не работает. В config.json services должны быть все трое.

В issue #3207 пишут: для /clientIps/{email} нужен panel token в headers:

python
headers = {'Authorization': 'Bearer YOUR_PANEL_TOKEN'}

Получите токен: /login → response.obj.token.

Тестируйте curl:

bash
curl -X GET "https://your-ip:54321/panel/api/inbounds/clientIps/011igg6e" \
 -H "Authorization: Bearer token_here" --insecure

Если все еще ‘No IP Record’ — клиент не ассоциирован с inbound или flow сломан.

Интересно, правда? Логи есть, API нет — типичная “слепая зона” 3x-ui.


Примеры запросов к 3x ui api на Python

Автоматизируем ваш скрипт. Сначала получите токен:

python
import requests

panel_url = "https://your-ip:54321"
session = requests.Session()
session.verify = False

# Логин
login_data = {"username": "admin", "password": "yourpass"}
token_resp = session.post(f"{panel_url}/login", json=login_data)
token = token_resp.json()['obj']

session.headers.update({'Authorization': f'Bearer {token}'})

# Получить IP клиента
client_email = "011igg6e"
ips_resp = session.get(f"{panel_url}/panel/api/inbounds/clientIps/{client_email}")
print(ips_resp.json()) # Теперь {'success': True, 'obj': [{'ip': 'x.x.x.x', 'count': 1}]}

Для логов: /panel/api/system/logs или /panel/api/inbounds/getClientTraffics/{id}.

Если 3x ui не работает API — добавьте session.headers['Content-Type'] = 'application/json'.

Этот код с Postman коллекции адаптирован под вашу проблему.


Отладка логов и трафика в 3x ui панель

Ваши grep по access.log — супер, но для 3x ui api смотрите:

bash
# Активные stats
xray api statsquery --server=127.0.0.1:62789 -name "user>>>011igg6e>>>traffic>>> downlink"

# DB панели
sqlite3 /etc/x-ui/x-ui.db "SELECT * FROM clientIps WHERE email='011igg6e';"

# Полные логи
tail -f /usr/local/x-ui/access.log | grep "email: 011igg6e"

Если DB пустая — stats не пишутся. Фикс: inbound + restart.

Из vc.ru: maskAddress: "" критично, иначе IP анонимизированы.

А трафик? Endpoint /panel/api/inbounds/getClientTraffics/{inboundId} даст uplink/downlink в байтах.

Не забудьте: после изменений x-ui update и systemctl restart x-ui.


Другие полезные endpoints 3x ui api

3x ui api не только IP:

Endpoint Описание Пример
/panel/api/inbounds/addClient Добавить клиента POST с JSON
/panel/api/inbounds/delClient/{id} Удалить DELETE
/panel/api/inbounds/getClientTraffics/{id} Трафик GET
/panel/api/system/logs Системные логи GET
/panel/api/inbounds/list Список инбаундов GET

Полный список в GitHub issues. Для нескольких серверов — ротация токенов в скрипте.

Хотите бота в Telegram? Добавляйте клиентов через API — автоматизация на уровне.



Источники

  1. GitHub Issue #3255: limitIp ignored for xtls-rprx-vision
  2. GitHub Issue #2888: 3x-UI API errors
  3. vc.ru: Настройка 3x-UI без ошибок
  4. GitHub Issue #3207: API for client creation
  5. DeepWiki: Inbound Management
  6. Postman: 3x-UI Documentation

Заключение

Добавьте dokodemo-door inbound на 127.0.0.1:62789, убедитесь в StatsService и перезапустите — 3x ui api заработает, показывая реальные IP клиентов из 3x ui панель. Это решит вашу проблему с 'No IP Record' навсегда, особенно для нескольких серверов. Тестируйте с живыми подключениями, и автоматизация полетит: мониторинг, бан по IP, уведомления. Если остались вопросы — логи в помощь, удачи с 3x ui настройка!

Авторы
Проверено модерацией
Модерация
Как получить IP клиентов через 3x ui api панели: фикс No IP Record