OxidProxy — руководство пользователя

Document version: 1.11
Software version: 2.4.1
Website: https://oxidproxy.com
Support: support@oxidproxy.com · Telegram

СоветЧитать всё это необязательно. Отдайте инструкцию для ИИ-агента любому агенту с доступом к серверу по SSH — он спросит, что ему нужно, и развернёт сервер сам. Руководство ниже пригодится потом, когда захотите разобраться в настройках.

Содержание

  1. 1. Описание продукта
  2. 2. Системные требования
  3. 3. Установка
  4. 4. Первоначальная настройка
  5. 5. Конфигурация (config.yaml)
    - 5.1 5.1. Лицензия
    - 5.2 5.2. Сетевые параметры
    - 5.3 5.3. Маскировка ОС (OS Fingerprinting)
    - 5.4 5.4. IPv6 подсети и ротация
    - 5.5 5.5. API и управление пользователями
    - 5.6 5.6. DNS-резолвер
    - 5.7 5.7. Ограничение скорости (Traffic Shaping)
    - 5.8 5.8. Тайм-ауты
    - 5.9 5.9. Сервисный аккаунт
    - 5.10 5.10. Чёрный список (Blacklist)
    - 5.11 5.11. Логирование
    - 5.12 5.12. MITM-режим (mitm_listeners)
    - 5.13 5.13. Брендирование панели
  6. 6. HTTP API
  7. 7. Web-Дашборд
  8. 8. Управление службой
  9. 9. Логирование и мониторинг
  10. 10. Командная строка (CLI)
  11. 11. Диагностика и устранение неполадок
  12. 12. FAQ
  13. 13. История изменений

1. Описание продукта

OxidProxy — высокопроизводительный SOCKS5(h) / HTTP CONNECT IPv6 прокси-сервер, написанный на Rust. Предназначен для развёртывания на собственном выделенном или виртуальном сервере (VPS) и выступает в роли шлюза: принимает входящие подключения по IPv4, авторизует их и маршрутизирует трафик через настроенные IPv6 подсети.

Ключевые возможности

Функция Описание
SOCKS5 / SOCKS5h Полная поддержка протокола, включая Remote DNS (предотвращение DNS-утечек)
HTTP CONNECT Поддержка HTTP(S) прокси-режима через метод CONNECT (для браузеров, curl, системных настроек)
Hybrid Mode Автоматическое определение протокола (SOCKS5/HTTP) на одном порту
UDP / QUIC Полноценное проксирование UDP-трафика, включая протокол QUIC (HTTP/3)
Мультисеть Подключение нескольких IPv6 подсетей с балансировкой по весам
Ленивая ротация Смена IP только при новой авторизации — активные сессии не разрываются
Smart DNS Failover Встроенный резолвер с балансировкой и автопереключением на резервные DNS
OS Fingerprinting (p0f) Маскировка TCP/IP отпечатка под различные ОС (Linux, Android, Windows, iOS, macOS)
Traffic Shaping Ограничение общей пропускной способности с поддержкой burst
HTTP(S) API Мгновенная генерация учётных записей, статистика, управление через REST API
IP Whitelist Управление списком разрешённых IP и подсетей прямо из дашборда, с защитой системных записей
Web-Дашборд Встроенная панель мониторинга с графиками трафика, аналитикой соединений и поддержкой тем оформления
Чёрный список Блокировка доменов и IP-адресов через файл blacklist.txt
Сервисный аккаунт Специальный аккаунт для чекеров/мониторинга с ограниченным доступом

Как это работает

   Ваше ПО            OxidProxy Server           IPv6 подсети         Интернет
  (SOCKS5h/HTTP)  →   Auth • DNS • Shaping   →  Subnet A (w:100)  →  Target
                                                 Subnet B (w:50)
ВажноДля максимальной анонимности ваш клиент должен использовать режим SOCKS5h (Remote DNS). В этом режиме DNS-запросы выполняются на стороне сервера OxidProxy, а не на вашем локальном компьютере.
ПримечаниеOxidProxy маршрутизирует трафик исключительно через IPv6. Целевой ресурс должен поддерживать IPv6.

2. Системные требования

Параметр Минимум Рекомендуется
ОС Debian 12 (Bookworm) x64 Debian 12 (Bookworm) x64
CPU 1 ядро 2+ ядра
RAM 512 МБ 1+ ГБ (зависит от max_accounts)
IPv6 /64 подсеть /48 или /32 подсеть
Права root (для установки) Служба запускается от пользователя oxidproxy
ПримечаниеДля работы функции маскировки ОС (p0f fingerprinting) требуется установка кастомного ядра 6.1.177-oxidproxy-p0f. Без него все остальные функции будут работать в обычном режиме.

3. Установка

ВажноРекомендуется устанавливать OxidProxy на чистую, обновлённую Debian 12 (Bookworm). Кастомное ядро, которое устанавливается вместе с сервером, обеспечивает поддержку OS Fingerprinting, однако оно не является на 100% универсальным — на некоторых конфигурациях оборудования могут отсутствовать необходимые драйверы, что приведёт к тому, что сервер не загрузится после установки ядра. Если после перезагрузки сервер недоступен — обратитесь в поддержку по почте support@oxidproxy.com или в Telegram.

Запустите от имени root:

curl -fsSL https://oxidproxy.com/downloads/install.sh | bash

Скрипт автоматически:
1. Скачает и установит кастомное ядро Linux с патчем p0f
2. Настроит загрузчик GRUB на приоритетную загрузку нового ядра
3. Скачает и установит пакет OxidProxy
4. Создаст системного пользователя oxidproxy
5. Настроит systemd-сервис
6. Предложит перезагрузить сервер

3.2. Ручная установка

  1. Скачайте .deb-пакет со страницы загрузки
  2. Установите пакет:
dpkg -i oxidproxy_*.deb
# При ошибках зависимостей:
apt-get install -f -y
  1. (Опционально) Установите кастомное ядро для p0f:
dpkg -i linux-image-6.1.177-oxidproxy-p0f_6.1.177-oxidproxy-p0f-1_amd64.deb
update-grub
ПримечаниеПакет linux-headers для ядра 6.1.177-oxidproxy-p0f доступен для скачивания на странице oxidproxy.com/#download. Он может понадобиться для сборки внешних модулей ядра.

3.3. Что создаётся при установке

Путь Назначение
/usr/bin/oxidproxy Исполняемый файл
/etc/oxidproxy/config.yaml Основной конфигурационный файл
/etc/oxidproxy/blacklist.txt Список заблокированных доменов/IP
/etc/oxidproxy/whitelist.txt Белый список разрешённых IP и подсетей
/etc/rc.local Правила маршрутизации IPv6 (создаётся при установке, если отсутствует)
/etc/sysctl.d/90-oxidproxy.conf Настройки ядра (sysctl)
/usr/lib/systemd/system/oxidproxy.service Файл службы systemd
/etc/logrotate.d/oxidproxy Конфигурация ротации логов
/var/log/oxidproxy/ Каталог логов
/var/lib/oxidproxy/ Каталог данных (экспорт аккаунтов)

4. Первоначальная настройка

После установки сервис не запускается автоматически. Необходимо выполнить следующие шаги:

Эти значения сервер проверяет при запуске. Если в license_key, master_token или public_ip остались значения из шаблона, служба назовёт нужное поле и не стартует: наполовину настроенный сервер в работу не уходит.

Шаг 1. Отредактируйте конфигурацию

nano /etc/oxidproxy/config.yaml

Обязательно заполните:
- license_key — ваш лицензионный ключ (получить в Telegram)
- public_ip — внешний IPv4 адрес вашего сервера
- ipv6_subnets — ваши IPv6 подсети
- master_token — секретный токен для API (замените на свой!)

Шаг 2. Настройте маршрутизацию IPv6

Отредактируйте файл /etc/rc.local и раскомментируйте строку маршрута:

nano /etc/rc.local

Замените шаблон на вашу реальную подсеть:

ip -6 route add local 2a01:xxxx::/32 dev lo
ВниманиеБез правильной маршрутизации IPv6 прокси не сможет привязываться к адресам из указанных подсетей.

Шаг 3. Проверьте конфигурацию

oxidproxy -t /etc/oxidproxy/config.yaml

Должно вывести ✅ Syntax OK. с перечислением основных параметров.

Шаг 4. Перезагрузите сервер

reboot

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

Шаг 5. Запустите сервис

systemctl start oxidproxy
systemctl status oxidproxy

5. Конфигурация (config.yaml)

Все настройки находятся в файле /etc/oxidproxy/config.yaml. Для применения изменений необходимо перезапустить службу.

СоветПеред перезапуском всегда проверяйте конфигурацию командой oxidproxy -t.

5.1. Лицензия

license_key: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

# license_servers: не обязателен — см. пояснение ниже
Параметр Описание
license_key Обязательный. Лицензионный ключ, полученный при покупке
license_servers Необязательный. Штатные адреса встроены в сервер, задавать их не нужно. Заполняется только тем адресом, который выдала поддержка — например, если обычные точки недоступны из вашей сети. Указанное здесь пробуется в первую очередь.
Примечание

Об адресах серверов лицензирования. Перечислять их в конфиге больше не нужно — они встроены в сервер и распределены по двум независимо зарегистрированным доменам, чтобы недоступность одного не останавливала проверку лицензии.

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

license_servers:
  - "адрес.выданный.поддержкой:8000"

Порядок обхода: сначала адреса из конфига (если заданы), затем встроенные. Сервер, ответивший успешно, поднимается в начало списка и используется при последующих проверках.

ВажноБез валидной лицензии сервер не запустится. Проверить доступность конкретной точки можно командой oxidproxy --ping адрес:порт — например, если поддержка выдала вам отдельный адрес и нужно убедиться, что он доступен из вашей сети. Штатные адреса проверять вручную не требуется: сервер обходит их сам.

5.2. Сетевые параметры

listen_ip: "0.0.0.0"
public_ip: "123.45.67.89"
# ext_iface: "eth0"  # Опционально
Параметр Описание По умолчанию
listen_ip Интерфейс для приёма входящих подключений 0.0.0.0 (все интерфейсы)
public_ip Обязательный. Публичный IPv4 адрес сервера (используется в API и генерации ссылок)
ext_iface Внешний сетевой интерфейс для QoS. Если не указан — определяется автоматически auto

5.3. Маскировка ОС (OS Fingerprinting)

Секция listeners позволяет создать несколько портов, каждый с собственным профилем маскировки TCP/IP отпечатка. Антифрод-системы, анализирующие трафик утилитами типа p0f, увидят характерные для указанной ОС параметры.

Каждый listener поддерживает поле mode, определяющее протокол:

Режим Описание
socks SOCKS5/SOCKS5h (по умолчанию)
http HTTP CONNECT прокси (метод CONNECT с авторизацией Proxy-Authorization: Basic)
hybrid Автодетект: SOCKS5 и HTTP на одном порту. Сервер определяет протокол по первому байту
listeners:
  - port: 1080
    os_preset: "linux"
    # mode: "socks"  # По умолчанию, можно не указывать

  - port: 1081
    os_preset: "android"
    mode: "hybrid"    # Принимает и SOCKS5, и HTTP CONNECT

  - port: 1082
    os_preset: "windows"
    mode: "http"

  - port: 1083
    os_preset: "ios"
    mode: "socks"

  - port: 1084
    os_preset: "macos"
    mode: "http"
СоветРежим hybrid — рекомендуемый. Один порт обслуживает оба протокола, не нужно открывать дополнительные порты. Определение протокола происходит мгновенно по первому байту.

Доступные профили:

Профиль TTL TCP MSS Congestion Control Описание
linux 64 Системное значение cubic Стандартный Linux сервер
android 64 Распространённые для платформы bbr Мобильный Android-клиент
windows 128 Распространённые для платформы cubic Windows-устройство
ios 64 Распространённые для платформы cubic iPhone / iPad
macos 64 Распространённые для платформы cubic macOS десктоп
ПримечаниеTCP MSS не является фиксированным числом. Для каждого профиля, который эмулирует операционную систему, значение выбирается из распространённых в тех сетях, где эта платформа обычно и работает, и привязывается к конкретному исходящему IPv6-адресу. В пределах сессии оно не меняется, поэтому поведение предсказуемо. При ротации адреса значение может смениться — так же, как это происходит у настоящего устройства при переходе между сетями. Профиль linux ничего не эмулирует и сохраняет системное значение.

Тонкая настройка (только для опытных пользователей):

Каждый listener поддерживает ручную настройку сетевых параметров:

  - port: 1081
    os_preset: "android"
    tcp_congestion: "bbr"      # Алгоритм контроля перегрузок
    tcp_window_size: 1048576   # Размер TCP окна (байт)
    latency_base_ms: 60        # Базовая задержка (мс)
    jitter_ms: 30              # Джиттер (разброс задержки, мс)
    tos: 10                    # Traffic Class (QoS-маркер)
ВниманиеБездумное изменение параметров тонкой настройки может привести к нестабильной работе или ухудшению маскировки. Если вы не уверены — оставьте значения по умолчанию.

5.4. IPv6 подсети и ротация

ipv6_subnets:
  - cidr: "2a01:xxxx::/32"
    weight: 427
  - cidr: "2a02:yyyy:yyyy:yyyy::/64"
    weight: 16

rotation_interval: 10
Параметр Описание
cidr IPv6 подсеть в CIDR-нотации. Поддерживаются подсети любого размера (/29, /32, /48, /64 и т.д.)
weight Вес подсети. Чем больше значение, тем чаще подсеть используется при генерации исходящих адресов
rotation_interval Интервал ротации IP в минутах. 0 — ротация отключена (IP сохраняется до перезагрузки)

Как работает ротация:
- IP-адрес привязан к паре логин/пароль (Sticky Session)
- При каждой авторизации проверяется, не истёк ли rotation_interval
- Если истёк — генерируется новый IPv6 из подсети (с учётом весов)
- Активные соединения НЕ разрываются — смена IP происходит только при новом подключении
- При простое сессии более 5 минут (настраиваемо через timeouts.idle) она закрывается

СоветПример: Если у Подсети-A вес 100, а у Подсети-B вес 50, то Подсеть-A будет выдавать адреса в 2 раза чаще.

5.5. API и управление пользователями

api_port: 8080
api_port_https: 8443  # Опционально — HTTPS с самоподписным сертификатом

master_token: "my-secret-token"

max_accounts: 100000

accounts_file: "/var/lib/oxidproxy/accounts_[port]_[os]_[mode].txt"

# account_seed: 123456789
Параметр Описание По умолчанию
api_port Порт HTTP API 8080
api_port_https Порт HTTPS API (самоподписной сертификат, опционально)
master_token Обязательный. Секретный токен для аутентификации запросов к API
max_accounts Максимум генерируемых уникальных аккаунтов (каждый со своим IPv6) 100000
accounts_file Путь для экспорта аккаунтов. Поддерживает шаблоны [port], [os] и [mode] accounts.txt
account_seed Зерно генерации. При одинаковом seed логины/пароли будут идентичны после перезагрузки случайный
СоветИспользуйте account_seed, если хотите, чтобы аккаунты оставались неизменными между перезапусками. Это полезно для интеграции с внешними системами — не нужно обновлять учётные данные.

5.6. DNS-резолвер

Имена разрешает сам сервер. Кэш общий для всех листенеров: имя, найденное для одного клиента, следующему достаётся уже готовым. Серверы с weight делят нагрузку между собой, серверы без веса включаются только тогда, когда взвешенные не отвечают. Резолвер следит за поведением каждого сервера и перестаёт слать запросы тому, кто замолчал, возвращаясь к нему позже. Если первый сервер медлит, запрос параллельно уходит следующему, и побеждает первый ответ, поэтому один медленный сервер не задерживает клиента.

timeout — это время, которое даётся одному серверу на ответ, а не время ожидания клиента: благодаря параллельному запросу клиент обычно получает ответ раньше. Задача этого значения — решать, как быстро замолчавший сервер будет выведен из ротации, поэтому оно короткое. Поставьте 2, если из ротации выводятся исправные серверы. Что происходит с каждым сервером сейчас, видно в /stats, раздел 6.2.

dns:
  timeout: 1
  cache_size: 8000
  suppress_aaaa_not_found: true

  servers:
    # Основные (с балансировкой)
    - address: "[2606:4700:4700::1111]:53"
      weight: 53
    - address: "1.1.1.1:53"
      weight: 7

    # Резервные (failover)
    - address: "[2620:fe::fe]:53"
    - address: "9.9.9.9:53"
Параметр Описание По умолчанию
timeout Тайм-аут DNS-запроса (секунд) 2
cache_size Количество закешированных DNS-записей 1024
suppress_aaaa_not_found Подавлять предупреждения о доменах без AAAA-записи false

Логика работы:
1. Запрос отправляется на один из основных серверов с весом (выбирается по weight — чем больше вес, тем чаще сервер используется). Основных серверов может быть несколько.
2. Если основной сервер не ответил (таймаут/ошибка) — запрос идёт в резервный пул. Резервных серверов также может быть несколько (указываются без параметра weight).
3. Если домен существует, но не имеет AAAA-записи — это не ошибка соединения, бэкап не используется

СоветРекомендация: Добавьте DNS вашего хостинг-провайдера с высоким весом. Адреса DNS бывают указаны в файле /etc/resolv.conf или их можно узнать в отделе поддержки провайдера. Провайдерские DNS обычно отвечают за 1–2 мс (против 10–50 мс у Google/Cloudflare).

5.7. Ограничение скорости (Traffic Shaping)

shaping:
  rate: 12500000   # 100 Мбит/с
  burst: 25000000  # 200 Мбит/с (burst)
Параметр Описание
rate Максимальная скорость в байтах/сек. 0 = без ограничения
burst Размер «взрывного» буфера в байтах. Позволяет кратковременно превысить rate
ПримечаниеОграничение действует суммарно на весь сервер (все пользователи, оба направления). Один и тот же лимит применяется отдельно к upload и download.

Шпаргалка:

Скорость Значение rate
1 Мбит/с 125 000
10 Мбит/с 1 250 000
100 Мбит/с 12 500 000
1 Гбит/с 125 000 000

5.8. Тайм-ауты

timeouts:
  shutdown: 10    # Ожидание завершения сессий при остановке (сек)
  idle: 300       # Максимальное бездействие сессии (сек)
Параметр Описание По умолчанию
shutdown Время ожидания (сек) для завершения активных соединений при остановке/перезапуске сервиса 15
idle Максимальное время неактивности TCP/UDP сессии, после которого она разрывается 300 (5 мин)

5.9. Сервисный аккаунт

service_account:
  enabled: true
  login: "checker"
  password: "strong_password"
  allowed_domain: "ifconfig.me"

Сервисный аккаунт предназначен для мониторинга и проверки работоспособности прокси. Особенности:
- Статический логин/пароль (не генерируется, не ротируется)
- Имеет доступ только к одному домену (allowed_domain)
- Не расходует лимиты ротации
- Не сменяет IP

СоветИдеально подходит для внешних чекеров: настройте allowed_domain: "ifconfig.me" и проверяйте исходящий IP командой curl --proxy socks5://checker:password@IP:PORT ifconfig.me.

5.10. Чёрный список (Blacklist)

blocked_file: "/etc/oxidproxy/blacklist.txt"

Файл содержит список заблокированных доменов и IP-адресов (по одному на строку). Комментарии начинаются с #.

# Блокировка рекламных доменов
doubleclick.net
ads.google.com

# Блокировка приватных IPv6 сетей
fc00::/7
fe80::/10
ВажноБлокировка работает с учётом поддоменов. Если заблокирован google.com, то mail.google.com и ads.google.com тоже будут недоступны.

5.11. Логирование

log:
  dir: "/var/log/oxidproxy"
  level: "info"
Уровень Описание
error Только критические ошибки
warn Ошибки и предупреждения
info Основные события (подключения, DNS, ротация) — рекомендуется
debug Детальная отладка (каждая сессия, каждый запрос DNS)

Создаются два файла логов:
- oxidproxy.log — полный лог (уровень задаётся параметром level)
- error.log — только ошибки (всегда)

Примечание

Запись только в journal. Параметр dir необязателен. Оставьте его пустым или уберите совсем — файлы на диск писаться не будут, а весь вывод уйдёт в системный журнал, откуда его заберёт journalctl -u oxidproxy.

log:
  dir: ""        # пусто = только journal
  level: "info"

Режим удобен, когда логи и так собираются journald и вторая копия на диске не нужна. Секцию log можно опустить целиком — тогда уровень примет значение info.

Проверить: oxidproxy -t /etc/oxidproxy/config.yaml покажет Log Dir: not set, logging to journal only.

5.12. MITM-режим (mitm_listeners)

В MITM-режиме OxidProxy терминирует TLS-соединение клиента собственным удостоверяющим центром (CA) и пересобирает запрос к целевому серверу с сетевым отпечатком настоящего браузера: JA4 (со всеми составляющими), HTTP/2 и Akamai. Профиль выбирается автоматически по User-Agent клиента, поэтому один порт обслуживает все ОС и браузеры — Chrome, Firefox и Safari на Windows, macOS, Linux, Android и iOS.

MITM-листенеры описываются в отдельной секции mitm_listeners и работают параллельно с обычными listeners:

mitm_listeners:
  - port: 8443
    profiles:
      - "windows-chrome"
      - "windows-firefox"
      - "macos-safari"
      - "android-chrome"
      - "ios-safari"
    default: "windows-chrome"    # профиль, если UA клиента не распознан
    # strict: false   # true — отказывать вместо подстановки default
    # mode: socks      # socks / http / hybrid, как у обычных listeners

Профили именуются по схеме <ос>-<браузер>. Доступные варианты:

ОС Профили
Windows windows-chrome, windows-firefox, windows-edge
macOS macos-chrome, macos-firefox, macos-safari
Linux linux-chrome, linux-firefox
Android android-chrome, android-firefox
iOS ios-safari

Поля листенера:

Параметр Описание
port Порт MITM-листенера
profiles Список разрешённых профилей (<ос>-<браузер>). Нужный выбирается по User-Agent клиента
default Профиль по умолчанию, если User-Agent не распознан или не входит в список
strict Если true — при несовпадении отказывать в соединении, а не подставлять default (по умолчанию false)
mode Протокол листенера: socks (по умолчанию), http или hybrid — так же, как у обычных listeners. Если параметр не указан, порт работает в режиме socks.
ВажноПоскольку TLS терминируется собственным CA, клиент должен один раз добавить сертификат CA сервера в доверенные — иначе браузер покажет ошибку сертификата. CA доступен для скачивания с сервера (эндпоинт /ca).

5.13. Брендирование панели

Веб-панель может нести ваш знак вместо нашего. Сделано для перепродажи: панель клиента не обязана рекламировать поставщика.

brand:
  name:   "Acme"
  accent: "Proxy"
  url:    "https://acme.example"
Параметр Описание
name Первая половина надписи, основным цветом
accent Вторая половина, красится акцентным цветом выбранной темы. Оставьте пустым — надпись будет одноцветной
url Куда ведёт надпись. Пустое значение убирает ссылку совсем. Принимаются только http:// и https://

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

ПримечаниеСекция необязательна. Без неё в панели остаётся знак OxidProxy, как и раньше. Обе половины имени вместе не должны превышать 64 символа.

6. HTTP API

API доступен по адресу http://YOUR_IP:PORT или https://YOUR_IP:PORT, где PORT задаётся параметрами api_port и api_port_https в конфигурации (8080 и 8443 по умолчанию).

Для аутентификации используется параметр token (значение из master_token).

Каждый метод отвечает стандартным кодом HTTP: 200 при успехе, 401, если токен не передан или неверен, 400, если запрос невыполним как написан, например запрошен режим, которого нет у листенера, и 500, если сервер не может ответить, например в конфигурации вовсе нет листенеров. Пояснение приходит в теле, но ветвиться в скрипте следует по коду.

6.1. Получение нового прокси — GET /allocate

Возвращает строку подключения с новой парой логин/пароль. Листенер указывается портом — ту же ссылку формирует дашборд (раздел 7.6):

curl "http://YOUR_IP:8080/allocate?token=YOUR_TOKEN&port=1080&mode=socks5"

Ответ:

socks5://user_AbCdEfGh:KlMnOpQrSt@YOUR_IP:1080

Параметры запроса:

Параметр Описание По умолчанию
token Обязательный. Секретный master_token
port Порт листенера, для которого нужны реквизиты. Указывает листенер однозначно
mode Протокол: socks5 или http socks5
os Профиль ОС: linux, android, windows, ios, macos. Выбирает листенер по профилю; при заданном port не учитывается linux

Порт указывает листенер однозначно. os выбирает его по профилю; если листенеров с таким профилем несколько, вернётся первый по конфигурации. Порт или профиль, которых нет в конфигурации, получают ответ 400 со списком настроенных.

Примеры:

# Реквизиты для листенера на порту 1081
curl "http://YOUR_IP:8080/allocate?token=YOUR_TOKEN&port=1081&mode=socks5"
# Ответ: socks5://user_xxx:pass_xxx@YOUR_IP:1081

# Тот же листенер, HTTP-прокси (листенер в режиме http или hybrid)
curl "http://YOUR_IP:8080/allocate?token=YOUR_TOKEN&port=1081&mode=http"
# Ответ: http://user_xxx:pass_xxx@YOUR_IP:1081

# По профилю ОС
curl "http://YOUR_IP:8080/allocate?token=YOUR_TOKEN&os=android"
ПримечаниеПорт, которого нет в конфигурации, и протокол, который листенер не поддерживает, отклоняются с кодом 400:
Error: no listener on port 1090. Configured ports: 1080, 1081, 1082
Error: http mode is not enabled for 'linux' profile (port 1080). Listener mode: socks
СоветВ режиме hybrid оба варианта (mode=socks5 и mode=http) работают на одном порту.

6.2. Статистика — GET /stats

Возвращает полную статистику сервера в JSON.

curl "http://YOUR_IP:8080/stats?token=YOUR_TOKEN"

Пример ответа (сокращённо — поля listeners/mitm_listeners опущены, это эхо соответствующих секций конфига):

{
  "version": "2.0.0",
  "uptime_seconds": 9980,
  "active_connections": { "tcp": 56, "udp": 4 },
  "mitm": { "active": 3, "total": 512 },
  "traffic": {
    "ingress_bytes": 264074969,
    "egress_bytes": 35524983
  },
  "dns": {
    "total_queries": 18905,
    "cache_hits": 17106,
    "cache_stale_served": 12,
    "cache_misses": 1799,
    "cache_entries": 1420,
    "inflight_joined": 63,
    "hedge_fired": 208,
    "hedge_won_by_backup": 41,
    "all_failed": 3,
    "bad_names": 0,
    "servers": [
      {
        "address": "[2606:4700:4700::1111]:53",
        "weight": 53, "state": "healthy",
        "queries": 1502, "failures": 7,
        "timeouts": 6, "servfails": 1, "net_errors": 0,
        "consecutive_failures": 0,
        "last_failure_ago_s": 1840, "last_error": "Timeout"
      },
      {
        "address": "1.1.1.1:53",
        "weight": 7, "state": "healthy",
        "queries": 261, "failures": 0,
        "timeouts": 0, "servfails": 0, "net_errors": 0,
        "consecutive_failures": 0,
        "last_failure_ago_s": null, "last_error": null
      },
      {
        "address": "[2620:fe::fe]:53",
        "weight": null, "state": "healthy",
        "queries": 36, "failures": 0,
        "timeouts": 0, "servfails": 0, "net_errors": 0,
        "consecutive_failures": 0,
        "last_failure_ago_s": null, "last_error": null
      }
    ]
  },
  "events": {
    "total_connections": 18963,
    "connection_errors": 12,
    "access_denied": 0,
    "blocked_domains": 0,
    "dns_no_ipv6": 4,
    "firewall_blocks": 0
  },
  "license": {
    "expires_at_unix": 1770484105,
    "days_left": 29,
    "is_active": true,
    "servers": {
      "L1": "online",
      "L2": "online"
    }
  },
  "telemetry": {
    "cpu_cores": 2,
    "total_mem_mb": 2048,
    "latest_cpu_usage": 4.8,
    "latest_mem_mb": 96
  },
  "server_ip": "1.2.3.4",
  "shaper": {
    "enabled": false,
    "rate_bytes": 0,
    "burst_bytes": 0
  }
}

Основные поля:

Поле Описание
mitm Активные и суммарные (с момента запуска) соединения через MITM-порты
dns Попадания и промахи кэша, как часто использовался параллельный запрос к резервному серверу, и строка по каждому серверу: состояние, вес, сколько запросов он обслужил и как его отказы делятся на таймауты, SERVFAIL и сетевые ошибки. Сервер, который перестал отвечать, виден здесь первым
events.dns_no_ipv6 / firewall_blocks Домены без AAAA-записи и соединения, отклонённые IP Whitelist'ом — те же категории, что и на диаграмме дашборда (раздел 7.3)
license.is_active Подтверждена ли лицензия в данный момент. При false прокси-порты закрыты до повторной проверки
telemetry Загрузка CPU/RAM сервера — источник данных для панели «Аппаратные ресурсы» (раздел 7.1)
server_ip Значение public_ip из конфигурации
shaper Текущие лимиты и статистика ограничения скорости (раздел 5.7)
listeners / mitm_listeners Полное эхо соответствующих секций config.yaml — удобно для скриптов, которым нужен список активных портов и профилей
ПримечаниеСтатистика доступна без токена с localhost (127.0.0.1). Это позволяет использовать её в скриптах мониторинга непосредственно на сервере.

7. Web-Дашборд

Встроенный дашборд доступен по адресу:

http://YOUR_IP:8080/dashboard?token=YOUR_TOKEN

7.1. Мониторинг в реальном времени

Дашборд доступен по адресу http://YOUR_IP:PORT/dashboard?token=YOUR_TOKEN, где PORT задаётся параметром api_port в конфигурации. Поддерживается также HTTPS-режим через api_port_https.

Дашборд обновляется каждые 10 секунд и отображает:
- Аппаратные ресурсы — загрузка CPU (с указанием числа ядер) и использование RAM с прогресс-барами
- Сетевой трафик — суммарный Ingress/Egress в удобочитаемом формате (КБ/МБ/ГБ), количество всех и активных TCP/UDP соединений
- Лицензия и статус — оставшиеся дни и статус каждого сервера лицензирования (online/offline) в режиме реального времени
- Версия и аптайм — в шапке дашборда

7.2. Графики трафика

Два графика скорости (Rx/Tx в Мбит/с) с подписями средних значений:
- Почасовой — последние 60 минут с шагом 1 минута
- Суточный — последние 24 часа с шагом 1 час

7.3. Connection Analytics

Круговая диаграмма показывает разбивку всех соединений по категориям:

Категория Цвет Описание
Success зелёный Успешно проксированные соединения
Auth Denied жёлтый Отклонённые по причине неверной авторизации
Conn Errors фиолетовый Сетевые ошибки при установке соединения
Blocked (DPI) серый Заблокированные по чёрному списку доменов
No IPv6 синий Домены без AAAA-записи (не поддерживают IPv6)
Firewall Blocks красный Отклонённые IP Whitelist'ом

7.4. Управление IP Whitelist

Панель «IP Whitelist» позволяет управлять списком разрешённых IP-адресов и подсетей прямо из браузера, без перезапуска сервиса:
- Просмотр — отображает все записи с индикатором защищённости (🔒 — системная запись, недоступная для удаления)
- Добавление — поле ввода принимает отдельный IP или подсеть в CIDR-нотации (например, 192.168.1.0/24). Нажмите + Add Entry или Enter
- Удаление — кнопка «×» напротив каждой записи. Удаление 0.0.0.0/0 требует подтверждения во избежание случайной блокировки доступа
- Импорт из файла — кнопка «📁 Import» позволяет загрузить .txt-файл с перечнем IP/CIDR (по одному на строку, поддерживаются комментарии через #)

Список автоматически обновляется каждые 10 секунд — изменения, внесённые с другого устройства или администратором, отразятся без перезагрузки страницы.

ВниманиеЗапись 0.0.0.0/0 разрешает подключения со всех IP-адресов. Если вы её удалите, доступ к прокси получат только адреса, явно перечисленные в списке. Убедитесь, что ваш IP добавлен, прежде чем это делать.

7.5. Recent Blocks

Панель «🚨 Recent Blocks» отображает последние заблокированные соединения (до 10 записей) с IP-адресом и временем блокировки. Счётчик Total показывает суммарное число блокировок с момента последнего запуска сервиса.

В верхней части дашборда автоматически генерируются кнопки быстрого копирования прокси-ссылок, сгруппированные по профилям ОС (Linux, Android, Windows, iOS, macOS). Кнопки SOCKS5 и HTTP неактивны, если соответствующий протокол не включён для данного профиля.

При нажатии на кнопку в буфер обмена копируется ссылка для получения нового прокси (запрос GET /allocate?port=...&mode=...), а в нижнем правом углу появляется уведомление.

Под кнопками API-ссылок для каждого профиля расположены кнопки TXT SOCKS5 и TXT HTTP для прямого скачивания файла со списком аккаунтов соответствующего профиля и режима. Кнопка неактивна, если режим не включён для данного профиля или файл аккаунтов ещё не создан.

Для MITM-листенеров отображается отдельная карточка MITM: в ней расположена ссылка для подключения и кнопка Скачать сертификат — клиент скачивает CA сервера и один раз добавляет его в доверенные, после чего весь HTTPS-трафик идёт через выбранный профиль браузера.

7.8. Загрузка файлов аккаунтов

В секции Downloads дашборда доступны кнопки для скачивания файлов со списком аккаунтов. Файлы сгруппированы по профилю ОС и режиму прокси:

Файл Содержимое
accounts_1080_linux_socks5.txt SOCKS5 аккаунты для профиля Linux (порт 1080)
accounts_1081_android_socks5.txt SOCKS5 аккаунты для профиля Android
accounts_1081_android_http.txt HTTP аккаунты для профиля Android (hybrid)
accounts_1082_windows_http.txt HTTP аккаунты для профиля Windows

Каждый файл содержит строки формата protocol://login:password@IP:PORT, готовые для импорта в любое ПО.

СоветНабор доступных файлов зависит от конфигурации listeners и accounts_file. Для hybrid-листенеров создаются два файла — SOCKS5 и HTTP.

7.7. Темы оформления

Дашборд поддерживает восемь визуальных тем, переключаемых без перезагрузки страницы. Выбранная тема сохраняется в браузере:

Тема Описание
OxidProxy Dark Фирменная тёмная тема (по умолчанию)
Light Classic Светлая классическая
Dracula Фиолетово-розовая тёмная
Deep Ocean Тёмно-синяя морская
Teal Lagoon Бирюзовая тёмная
Gruvbox Retro Тёплая ретро-палитра
Baroque Bling 💰 Барочная тема с золотыми акцентами
Hacker Монохромная зелёная на чёрном

8. Управление службой

OxidProxy устанавливается как systemd-сервис и запускается от пользователя oxidproxy.

# Запуск
systemctl start oxidproxy

# Остановка (graceful — ждёт завершения активных сессий)
systemctl stop oxidproxy

# Перезапуск
systemctl restart oxidproxy

# Статус
systemctl status oxidproxy

# Включить автозапуск
systemctl enable oxidproxy

# Просмотр логов в реальном времени
journalctl -u oxidproxy -f
ВниманиеНе запускайте OxidProxy напрямую от root! При запуске от root файлы логов и данных будут принадлежать root, что вызовет ошибки прав доступа при последующих запусках через systemd. Правильный способ — запускать сервис командой systemctl start oxidproxy: systemd автоматически переключается на пользователя oxidproxy, прописанного в юнит-файле службы.

9. Логирование и мониторинг

Файлы логов

Файл Описание
/var/log/oxidproxy/oxidproxy.log Основной лог (уровень задаётся в конфиге)
/var/log/oxidproxy/error.log Только ошибки

Ротация логов

Логи ротируются автоматически через logrotate:
- Ежедневно или при достижении 100 МБ
- Хранится 10 предыдущих версий
- Сжатие gzip

Системная телеметрия

Каждые 10 секунд в лог выводится строка [SYS_STATS]:

[SYS_STATS] System Mem: 524/2048 MB | App Mem: 85 MB | CPU: 12.3% | Conns: 42 / 4096

10. Командная строка (CLI)

oxidproxy [OPTIONS]

Опции:
  -c, --config <PATH>      Путь к файлу конфигурации (по умолчанию: config.yaml)
  -t, --test [<PATH>]      Проверить синтаксис конфигурации
  -g, --generate           Сгенерировать пример config.yaml.example
  -b, --blacklist          Сгенерировать пример blacklist.txt.example
  -H, --hwid               Показать HWID сервера
  -p, --ping <HOST:PORT>   Проверить доступность лицензионного сервера
  -V, --version            Показать версию
  -h, --help               Показать справку

Примеры:

# Запуск с конфигом по умолчанию
oxidproxy

# Запуск с указанием конкретного конфига
oxidproxy -c /etc/oxidproxy/config.yaml

# Проверка конфига перед деплоем
oxidproxy -t /etc/oxidproxy/config.yaml

# Генерация примера конфигурации
oxidproxy -g

# Проверка доступности сервера лицензий
oxidproxy --ping адрес.выданный.поддержкой:8000

# Получение HWID
oxidproxy -H

11. Диагностика и устранение неполадок

Сервис не запускается

  1. Проверьте конфигурацию:
    oxidproxy -t /etc/oxidproxy/config.yaml

  2. Проверьте логи:
    journalctl -u oxidproxy --no-pager -n 50

  3. Проверьте лицензионный сервер:
    oxidproxy --ping <HOST:PORT>
    Адрес HOST:PORT берётся из параметра license_servers в конфигурации.

Нет подключения через прокси

  1. Убедитесь, что клиент использует правильный протокол — SOCKS5, SOCKS5h или HTTP CONNECT (все поддерживаются). Для максимальной анонимности рекомендуется SOCKS5h (DNS-запросы разрешаются на стороне сервера).
  2. Проверьте маршрутизацию IPv6 — осмотрите содержимое файла /etc/rc.local и вывод команды:
    ip -6 route show
  3. Проверьте, что порт доступен извне:
    ss -tlnp | grep oxidproxy
  4. Проверьте файрвол (iptables/nftables)

Не открываются некоторые сайты

OxidProxy работает только через IPv6. Если целевой сайт не имеет AAAA-записи (IPv6), подключение невозможно.

Проверить наличие AAAA:

dig AAAA example.com

IP не меняется

OxidProxy использует Sticky Sessions. IP привязан к паре логин/пароль. Для смены IP:
- Запросите нового пользователя через GET /allocate
- Или дождитесь истечения rotation_interval и переподключитесь


12. FAQ

В: Что такое SOCKS5h и чем отличается от SOCKS5?

О: В режиме SOCKS5h DNS-запросы выполняются на стороне прокси-сервера (Remote DNS). В обычном SOCKS5 DNS разрешается на стороне клиента — это может привести к DNS-утечкам и раскрыть реальный IP. Всегда используйте SOCKS5h.


В: Почему при каждом перезапуске генерируются новые логины/пароли?

О: По умолчанию аккаунты генерируются из случайного энтропийного зерна. Раскомментируйте и задайте account_seed в конфиге — логины/пароли станут постоянными между перезапусками.


В: Можно ли использовать несколько IPv6 подсетей?

О: Да, добавьте их в секцию ipv6_subnets с разными весами. Трафик будет распределяться пропорционально весам.


В: Как узнать HWID моего сервера?

О: Выполните oxidproxy -H. HWID нужен для привязки лицензии к серверу.


В: Сколько ресурсов потребляет OxidProxy?

О: При 100 000 аккаунтов и ~50 активных соединениях — около 80–120 МБ RAM и ~5% CPU на 1 ядре. Сервер написан на Rust — это обеспечивает высокую производительность и предсказуемое потребление памяти.


В: Безопасен ли API?

О: При включённом api_port_https API работает через HTTPS с самоподписным сертификатом. Для cURL используйте флаг -k. Доступ к API защищён master_token. Статистика (/stats) доступна без токена только с localhost.


В: Что такое HTTP CONNECT режим?

О: HTTP CONNECT — стандартный метод проксирования HTTPS-трафика. Клиент отправляет CONNECT host:443 HTTP/1.1 с заголовком Proxy-Authorization: Basic, после чего устанавливается зашифрованный туннель. Поддерживается всеми браузерами, curl, системными настройками прокси и большинством ПО.

Пример использования через curl:

curl -x http://user_xxx:pass_xxx@YOUR_IP:1081 https://ifconfig.me

В: Чем hybrid отличается от отдельных socks/http портов?

О: В режиме hybrid сервер принимает оба протокола на одном порту. Протокол определяется автоматически по первому байту соединения (0x05 = SOCKS5, иначе HTTP). Это удобнее — не нужно открывать дополнительные порты. Все фишки (p0f, shaping, DNS, лимиты) работают одинаково для обоих протоколов.


В: Что делает переменная [mode] в accounts_file?

О: При экспорте аккаунтов [mode] заменяется на протокол (socks5 или http). Для hybrid-листенеров создаются два файла — один с socks5:// ссылками, другой с http://. Пример: accounts_1081_android_socks5.txt и accounts_1081_android_http.txt.


В: Браузер показывает ошибку сертификата при работе через MITM-порт.

О: MITM-порт терминирует TLS собственным удостоверяющим центром (CA), поэтому клиентское устройство должно один раз добавить сертификат CA сервера в доверенные — иначе браузер будет считать соединение небезопасным. Сертификат доступен для скачивания с сервера (эндпоинт /ca) или кнопкой «Скачать сертификат» на карточке MITM в дашборде (раздел 7.6).


В: Что произойдёт, если User-Agent клиента не входит ни в один из профилей mitm_listeners?

О: По умолчанию сервер подставит профиль из поля default. Если задать strict: true, при нераспознанном User-Agent сервер вместо этого откажет в соединении.


13. История изменений

v2.4.1 — сентябрь 2026

v2.4.0 — сентябрь 2026

v2.3.7 — сентябрь 2026

v2.3.6 — сентябрь 2026

v2.2.0 — сентябрь 2026

v2.1.2 — август 2026

v2.1.0 — август 2026

v2.0.0 — июнь 2026

v1.8.1 — май 2026

v1.7.1 — апрель 2026

v1.7.0 — март 2026

v1.6.0 — январь 2026