OxidProxy — руководство пользователя
Document version: 1.11
Software version: 2.4.1
Website: https://oxidproxy.com
Support: support@oxidproxy.com · Telegram
Содержание
- 1. Описание продукта
- 2. Системные требования
- 3. Установка
- 4. Первоначальная настройка
- 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. HTTP API
- 7. Web-Дашборд
- 8. Управление службой
- 9. Логирование и мониторинг
- 10. Командная строка (CLI)
- 11. Диагностика и устранение неполадок
- 12. FAQ
- 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)
2. Системные требования
| Параметр | Минимум | Рекомендуется |
|---|---|---|
| ОС | Debian 12 (Bookworm) x64 | Debian 12 (Bookworm) x64 |
| CPU | 1 ядро | 2+ ядра |
| RAM | 512 МБ | 1+ ГБ (зависит от max_accounts) |
| IPv6 | /64 подсеть | /48 или /32 подсеть |
| Права | root (для установки) | Служба запускается от пользователя oxidproxy |
6.1.177-oxidproxy-p0f. Без него все остальные функции будут работать в обычном режиме.3. Установка
3.1. Автоматическая установка (рекомендуется)
Запустите от имени root:
curl -fsSL https://oxidproxy.com/downloads/install.sh | bash
Скрипт автоматически:
1. Скачает и установит кастомное ядро Linux с патчем p0f
2. Настроит загрузчик GRUB на приоритетную загрузку нового ядра
3. Скачает и установит пакет OxidProxy
4. Создаст системного пользователя oxidproxy
5. Настроит systemd-сервис
6. Предложит перезагрузить сервер
3.2. Ручная установка
- Скачайте .deb-пакет со страницы загрузки
- Установите пакет:
dpkg -i oxidproxy_*.deb
# При ошибках зависимостей:
apt-get install -f -y
- (Опционально) Установите кастомное ядро для p0f:
dpkg -i linux-image-6.1.177-oxidproxy-p0f_6.1.177-oxidproxy-p0f-1_amd64.deb
update-grub
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
Шаг 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 десктоп |
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) она закрывается
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-записи — это не ошибка соединения, бэкап не используется
/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 |
Шпаргалка:
| Скорость | Значение 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. |
/ca).5.13. Брендирование панели
Веб-панель может нести ваш знак вместо нашего. Сделано для перепродажи: панель клиента не обязана рекламировать поставщика.
brand:
name: "Acme"
accent: "Proxy"
url: "https://acme.example"
| Параметр | Описание |
|---|---|
name |
Первая половина надписи, основным цветом |
accent |
Вторая половина, красится акцентным цветом выбранной темы. Оставьте пустым — надпись будет одноцветной |
url |
Куда ведёт надпись. Пустое значение убирает ссылку совсем. Принимаются только http:// и https:// |
Настройка меняет не только шапку. Она же переименовывает заголовок вкладки браузера, подпись темы в списке и файл сертификата, который панель предлагает скачать, — этот файл раздаётся конечным пользователям, и чужое имя в нём выдало бы всё сразу.
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"
Error: no listener on port 1090. Configured ports: 1080, 1081, 1082Error: http mode is not enabled for 'linux' profile (port 1080). Listener mode: sockshybrid оба варианта (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 — удобно для скриптов, которым нужен список активных портов и профилей |
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 показывает суммарное число блокировок с момента последнего запуска сервиса.
7.6. AUTO-ROTATION API LINKS
В верхней части дашборда автоматически генерируются кнопки быстрого копирования прокси-ссылок, сгруппированные по профилям ОС (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
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. Диагностика и устранение неполадок
Сервис не запускается
-
Проверьте конфигурацию:
oxidproxy -t /etc/oxidproxy/config.yaml -
Проверьте логи:
journalctl -u oxidproxy --no-pager -n 50 -
Проверьте лицензионный сервер:
oxidproxy --ping <HOST:PORT>
АдресHOST:PORTберётся из параметраlicense_serversв конфигурации.
Нет подключения через прокси
- Убедитесь, что клиент использует правильный протокол — SOCKS5, SOCKS5h или HTTP CONNECT (все поддерживаются). Для максимальной анонимности рекомендуется SOCKS5h (DNS-запросы разрешаются на стороне сервера).
- Проверьте маршрутизацию IPv6 — осмотрите содержимое файла
/etc/rc.localи вывод команды:
ip -6 route show - Проверьте, что порт доступен извне:
ss -tlnp | grep oxidproxy - Проверьте файрвол (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
- Проверка конфигурации без указания пути —
oxidproxy -tпроверяет установленную конфигурацию/etc/oxidproxy/config.yaml, путь указывать не нужно.
v2.4.0 — сентябрь 2026
- Сетевые профили улучшены — характеристики соединения стали ближе к реальным сетям, поведение профилей естественнее.
v2.3.7 — сентябрь 2026
- Выбор листенера по порту в
/allocate— параметрportуказывает листенер точно, что важно, когда на одном профиле работает несколько листенеров с разными настройками. Параметрosпродолжает работать. - Контроль параметров
/allocate— порт или профиль, которых нет в конфигурации, получают ответ 400 со списком настроенных.
v2.3.6 — сентябрь 2026
- Новый DNS-резолвер — общий кэш на все листенеры, отслеживание доступности серверов и параллельный запрос к резервному. Резолвинг стал быстрее и устойчивее, расширен набор поддерживаемых имён.
- Подробная статистика DNS в
/stats— по каждому серверу видно состояние, вес и характер отказов, это удобно для диагностики. - UDP-режим оптимизирован — повышены надёжность сессий и совместимость с сетями.
- SOCKS5: точные коды ответов — клиент получает конкретную причину, по которой соединение не состоялось.
- HTTP-режим оптимизирован — повышены устойчивость под нагрузкой и совместимость с клиентами.
- Профили iOS приведены в соответствие с реальными устройствами.
- Браузерный режим улучшен — повышены точность работы и совместимость с сайтами, крупные загрузки обрабатываются экономнее по памяти.
- Проверка конфигурации при запуске — служба сразу указывает на незаполненные обязательные поля и не стартует, пока
license_key,master_tokenилиpublic_ipсодержат шаблонные значения. - Стандартные коды ответов API —
/allocate,/statsи/dashboardвозвращают 401 при неверном токене и 400 при некорректном запросе. - Панель: улучшена читаемость тёмной темы.
v2.2.0 — сентябрь 2026
- Задержки профилей снижены — мобильные профили (
android,ios) добавляют 30 мс, настольные (windows,macos) — 10 мс,linuxне добавляет ничего. Прежние значения были завышены и стоили лишних десятков миллисекунд на каждом запросе. Заданное явно вconfig.yamlимеет приоритет: умолчания действуют только там, где ключ не указан. jitter_msбольше не применяется — ключ по-прежнему принимается, конфигурации с ним остаются рабочими, но при запуске служба пишет о нём предупреждение в журнал.- Снято ограничение пропускной способности, проявлявшееся при высокой нагрузке.
v2.1.2 — август 2026
- MITM-порт отказывает небраузерным клиентам — curl, скрипты и всё, что не присылает браузерный
User-Agent, получают короткую страницу с объяснением вместо выхода наружу под чужим профилем. Чтобы вернуть прежнее поведение, добавьте в листенерallow_unknown_ua: true. Браузеров изменение не касается. - Баннер при входе по SSH — необязательный, предлагается при установке. Показывает состояние службы, загруженное ядро, настроенные подсети и адрес панели, а также предупреждает, если
master_tokenостался из шаблона. Токен в баннер намеренно не попадает; полную ссылку выдаёт командаdashboard-url. - Версия браузера согласована с рукопожатием — для трафика без браузерного
User-Agentсервер заявляет ту версию, чьё TLS-рукопожатие эмуляция действительно воспроизводит.
v2.1.0 — август 2026
- Новое кастомное ядро —
6.1.177-oxidproxy-p0fвзамен 6.1.170, вместе с подходящим пакетомlinux-headersна странице загрузки. - Адреса лицензирования вшиты в сервер —
license_serversбольше не обязательный ключ. Поле называется Дополнительные серверы лицензий и обычно не заполняется вовсе; впишите адрес, только если его выдала поддержка. - Журнал вместо файлов — оставьте
log.dirпустым, и сервер будет писать только в журнал systemd. Удобно там, где логи собираются централизованно. - Брендирование панели — секция
brandзаменяет надпись над панелью и адрес, куда ведёт глобус: панель можно отдавать своим клиентам под собственным именем. - Разнообразнее отпечаток TCP — MSS больше не одно значение на все соединения. Оно берётся из правдоподобного распределения и остаётся постоянным для конкретного исходящего адреса, поэтому профиль перестал выделяться одинаковой величиной повсюду.
- Понятные ошибки каталога логов — недоступный для записи каталог сообщается при запуске, а не роняет службу.
- Честный статус p0f — если ядро не может выдать отпечаток, сервер говорит об этом прямо, а не переключается на запасной путь молча.
v2.0.0 — июнь 2026
- MITM-режим — новый режим работы: сервер терминирует TLS собственным CA и пересобирает трафик к целевому серверу с сетевым отпечатком настоящего браузера (Chrome, Firefox, Safari) по всем слоям — JA4 (со всеми составляющими), HTTP/2 и Akamai. Профиль выбирается автоматически по
User-Agentклиента, поэтому один порт обслуживает все ОС. - Секция
mitm_listeners— отдельные MITM-порты рядом с обычнымиlisteners, с выбором разрешённых профилей по схеме<ос>-<браузер>и профилем по умолчанию. - Карточка MITM в дашборде — ссылка для подключения и кнопка скачивания сертификата CA для добавления в доверенные на стороне клиента.
v1.8.1 — май 2026
- QUIC по стандарту RFC — масштабная переработка реализации UDP/QUIC: устранены отклонения от спецификации, улучшена совместимость с клиентами, снижены потери пакетов на высоких нагрузках.
- Новое кастомное ядро 6.1.170-oxidproxy-p0f — обновлённое ядро с кардинально улучшенной совместимостью оборудования. Теперь оно загружается на любых гипервизорах и конфигурациях железа так же стабильно, как стандартное ядро Debian 12 (в предыдущей версии ряд конфигураций не загружался после установки ядра).
- Скачивание файлов аккаунтов из дашборда — в блоке AUTO-ROTATION API LINKS появились кнопки TXT SOCKS5 и TXT HTTP для прямой загрузки файлов со списком прокси-аккаунтов, сгруппированных по профилю ОС и режиму.
v1.7.1 — апрель 2026
- Web-Дашборд — IP Whitelist — полноценное управление белым списком прямо из браузера: добавление, удаление, импорт из файла. Изменения вступают в силу немедленно, без перезапуска сервиса.
- Автообновление дашборда — данные IP Whitelist и Recent Blocks теперь обновляются автоматически каждые 10 секунд вместе с остальной статистикой.
- Connection Analytics — новая круговая диаграмма с разбивкой соединений по категориям (успешные, заблокированные, ошибки, IPv4-only домены).
- Recent Blocks — панель последних заблокированных соединений с отметками времени и суммарным счётчиком.
- Темы оформления — добавлены пять визуальных тем дашборда с сохранением выбора в браузере.
- Поддержка HTTP CONNECT — полноценный HTTP-прокси режим с авторизацией
Proxy-Authorization: Basic, корректной обработкой всех вариантов заголовка. - Улучшена устойчивость сервиса — порт API-дашборда больше не вызывает бесшумное падение при занятом порту; ошибка явно указывается в журнале.
- Исправлен макет дашборда — устранена проблема несовпадения границ колонок между виджетами при различных разрешениях экрана.
v1.7.0 — март 2026
- Hybrid Mode — автоматическое определение протокола (SOCKS5 / HTTP CONNECT) на одном порту по первому байту соединения.
- HTTP прокси — добавлена поддержка режима
httpв секцииlisteners. - Поле
[mode]вaccounts_file— для hybrid-листенеров экспортируются два файла аккаунтов: с SOCKS5 и HTTP ссылками.
v1.6.0 — январь 2026
- HTTPS API — опциональный порт
api_port_httpsс самоподписным сертификатом. - Smart DNS Failover — резервный пул DNS-серверов с автопереключением при недоступности основного.
- Сервисный аккаунт — статическая учётная запись с ограничением доступа одним доменом для чекеров и мониторинга.