English · Русский
Панель управления прокси, которая может работать на одном сервере с 3x-ui
MTProxy, NaiveProxy, Mieru, AmneziaWG и TrustTunnel под одной панелью — с транзакционным установщиком, который либо доводит установку до конца, либо возвращает сервер в прежнее состояние.
Что это · Требования · Установка человеком · Установка ИИ-агентом · Обновление · Документация
Note
Текущий выпуск — v4.0.1. Что изменилось — в описании выпуска и журнале изменений.
Important
Проект рассчитан на людей, которые понимают, что такое DNS, TLS, Nginx и Docker. Установщик берёт на себя рутину и не даст сделать опасный шаг молча, но не заменяет понимания того, как устроен ваш сервер.
Навигация по README
Proxy Control — отдельная панель управления прокси MTProxy, NaiveProxy, Mieru, AmneziaWG и TrustTunnel, их пользователями и доступами. Это не дополнение и не ответвление 3x-ui: панель ставится на чистый сервер или рядом с уже работающим 3x-ui — тогда обе панели делят общий порт 443 и не мешают друг другу. По желанию установщик поставит и сам 3x-ui.
| Компонент | Что он даёт |
|---|---|
| MTProxy / Telemt | Прокси для Telegram: tg://-ссылки и QR-коды, лимиты, срок действия, состояние службы. |
| NaiveProxy | HTTPS-прокси, который снаружи выглядит обычным сайтом. HTTP/1.1 CONNECT и HTTP/2 CONNECT поверх TLS/TCP, один доступ на оба; квота и учёт трафика на пользователя. |
| Mieru | Прокси с маскировкой трафика на собственном протоколе поверх TCP; одноразовая mierus://-ссылка и QR. |
| AmneziaWG | VPN поверх UDP — WireGuard с маскировкой трафика. Версии 1.5, 2.0 и 3.1 работают каждая на своём порту; у клиента может быть доступ к нескольким, конфиг выдаётся файлом .conf и QR. Включается необязательно. |
| TrustTunnel | VPN от AdGuard: HTTP/2 поверх TLS, только TCP, на общем порту 443 через SNI-маршрут Nginx, без новых портов и UDP. Выдаётся ссылкой tt:// с QR, конфигом TOML и записью в ленте Clash/mihomo; маршрутизируется как служба (без полос для отдельных клиентов). Включается необязательно, нужен свой домен. |
| Рядом с 3x-ui | Режим existing принимает уже установленный 3x-ui: делит с ним порт 443 и не меняет его файлы. Режим managed-new на чистом сервере ставит 3x-ui 3.10.2 и создаёт VLESS Reality (TCP и XHTTP) и Hysteria2. Управление 3x-ui остаётся в его собственной панели. |
| Клиенты и подписки | Один клиент — доступы ко всем протоколам и одна отзываемая ссылка https://<домен подписки>/s/<token> для sing-box/Karing, Clash/mihomo и других. Учётные данные хранятся под мастер-ключом (AES-256-GCM). |
| Связанные панели (Fleet) | Центральная панель выдаёт доступы на другие серверы с Proxy Control по HTTPS и API-ключу node-sync. |
| Маршрутизация | Правила исходящего трафика для каждого узла и службы: напрямую, через WARP, через свой выход или другой узел; блокировки по домену, CIDR, geosite и geoip через необязательный Xray-router. |
| Мониторинг | Ресурсы сервера и трафик по протоколам в прямом эфире (CPU, память, диск, сеть, контейнеры, скорости ↑/↓ MTProxy, NaiveProxy, Mieru, AmneziaWG и TrustTunnel), история до года, сравнение узлов и оповещения. Только чтение, видно всем ролям. |
| Обновления | Экран «Версии» обновляет Telemt, NaiveProxy, Mieru, AmneziaWG, TrustTunnel, Xray-router и саму панель с резервной копией и откатом, а менеджеры после обновления панели пересобирает сам; сервер целиком обновляется одной командой. |
| MCP и навыки для ИИ | Необязательный MCP-сервер на центральной панели: API панели как инструменты для Claude Code и Claude Desktop, необратимые действия — только с confirm. |
| Панель | Роли владельца, администратора и наблюдателя; API-ключи с областями admin | monitor | node-sync; аудит без секретов; интерфейс на русском и английском. |
Учёт трафика у протоколов разный, и панель этого не скрывает: Telemt разделяет счётчик
процесса и расход квоты, NaiveProxy считает байты только после закрытия туннеля, а Mieru
показывает unavailable, когда безопасного счётчика на пользователя нет.
Снимки панели с изолированного стенда и тестовыми данными — без ключей, QR-кодов и адресов рабочих узлов.
| Обзор | Маршрутизация по шагам |
|---|---|
![]() |
![]() |
Мобильный обзор · Клиенты с поиском · Окно доступа · Клиенты на телефоне · Встроенная инструкция · Английский обзор · Маршрутизация на английском · Вход
Мониторинг в прямом эфире: Сейчас · Трафик · Узлы · Сейчас на телефоне · Сейчас на английском
Схема подключения и таблица портов
Публичный порт 443 остаётся у Nginx. Nginx смотрит только на имя домена в TLS-приветствии (SNI) и передаёт соединение нужной службе. Proxy Control не забирает 443 себе: установщик добавляет в карту SNI только свои строки и никогда не переписывает её целиком. Если конфигурацию Nginx нельзя понять однозначно, он останавливается, а не угадывает.
Клиент ── TCP/443 ──► Nginx stream + SNI
├──► 3x-ui и его протоколы
├──► MTProxy / Telemt
├──► NaiveProxy
├──► TrustTunnel (необязательно)
├──► другие ваши сайты
└──► панель Proxy Control
| Граница | Адрес | Кто имеет доступ |
|---|---|---|
| Публичный вход | TCP/443 | Только Nginx stream, маршрутизация по SNI |
| Telemt / MTProxy | 127.0.0.1:8445 |
Только Nginx и локальная система |
| Панель | 127.0.0.1:8787 (HTTP) |
Локально; наружу — через виртуальный узел HTTPS на 127.0.0.1:8443 |
| NaiveProxy (Caddy) | 127.0.0.1:4443 |
Только Nginx |
| Telemt API | mtproxy:9091 |
Только внутри сети Compose |
| TrustTunnel (необязательно) | 127.0.0.1:4453 (endpoint), 127.0.0.1:1987 (метрики менеджера) |
Только Nginx и локальная система; наружу — TCP/443 по SNI; ни портов, ни UDP |
| Вход Xray-router для TrustTunnel (необязательно) | 127.0.0.1:45104 (SOCKS5 без пароля) |
Только локальная система: любой локальный процесс или контейнер с сетью хоста может им пользоваться |
| Mieru | Выбранные вами TCP-порты | Публично; порт 443 не используется |
| Управление Mieru | /run/mita/mita.sock |
Только локальный Unix-сокет |
| AmneziaWG (необязательно) | По одному UDP-порту на версию: случайный свободный, свой на каждый сервер (или ваш) | Публично, напрямую по UDP; управление — Unix-сокет контейнера awg-manager |
Свежая установка сохраняет IP клиента панели через общий вход Nginx. Если входящими соединениями управляет ваша собственная конфигурация Nginx, настройте передачу адреса по протоколу PROXY — порядок описан в справочнике установщика.
Контейнеры называются proxy-control-*, проект Compose — proxy_panel_by_dubr1k.
- Сервер x86-64 с Ubuntu 24.04 LTS и
systemd. Другие архитектуры установщик отвергает при проверке сервера, до любых изменений. - Bash, awk, curl, tar, sha256sum и обычная учётная запись с
sudo. Проверка релиза идёт без root. Python и Rust на хосте не нужны: релиз содержит статические бинарники. - DNS-записи A/AAAA всех ваших имён указывают напрямую на сервер. Для MTProto проксирование CDN выключено — только режим DNS-only.
- Свободный TCP/80: по нему Let's Encrypt проверяет домены.
- Режим
fresh— сервер ваш целиком, установщик сам ставит и настраивает Nginx; чужого владельца порта 443 быть не должно. Режимcoexist— уже работающий Nginx соstreamвладеет портом 443, и в файле маршрутов есть ровно одна понятная карта$ssl_preread_server_name. - Свободные локальные порты из таблицы выше.
- Для необязательного AmneziaWG: устройство
/dev/net/tunна сервере, имя, которое доходит до сервера напрямую по UDP, без CDN. Нового домена не нужно — подойдёт домен панели. - Для необязательного TrustTunnel: отдельный домен с A-записью на сервер, только DNS (без проксирования CDN); сертификат для него выпускает установщик. UDP и новые порты не нужны.
- Своя резервная копия Nginx, служб, маршрутов и состояния Docker.
Установщик остановится и ничего не тронет, если увидит несовпадение DNS с адресом
сервера, NAT, CDN перед MTProto, неоднозначную карту Nginx, занятый порт, владельца 443,
который не является Nginx, или ошибку nginx -t. Это повод сначала разобраться, а не
«продолжить всё равно».
Внешние файлы сторонних компонентов готовить не нужно: установщик сам скачивает их по
закреплённым HTTPS-адресам в /var/lib/proxy-control/ и сверяет SHA-256 до любого
использования. Для сервера без интернета положите их туда заранее — положенный вручную
файл используется как есть. Список, адреса и контрольные суммы — в
release/external-artifacts.json.
Именно здесь установка чаще всего останавливается. Полный набор — профиль full, 3x-ui в
режиме managed-new, домен подписки клиентов, MCP-сервер и TrustTunnel — требует 12 разных доменов.
Сертификат нужен не всем:
Все домены и правила выпуска сертификатов
| Домен | Когда нужен | Сертификат |
|---|---|---|
panel — панель |
Всегда | Да |
mtproxy — MTProxy (Fake-TLS) |
Всегда | Да |
naive — NaiveProxy |
Профили с NaiveProxy | Да |
mieru — Mieru |
Профили с Mieru | Нет |
three_xui.panel_domain — панель 3x-ui |
managed-new |
Да |
three_xui.hysteria_domain — Hysteria2 |
managed-new |
Да |
three_xui.vless_tcp_domain — VLESS Reality TCP |
existing и managed-new |
Нет |
three_xui.vless_xhttp_domain — VLESS Reality XHTTP |
existing и managed-new |
Нет |
three_xui.subscription_domain — подписка 3x-ui |
managed-new, если нужна |
Да |
subscription — подписка клиентов |
Если нужны ссылки https://<домен>/s/<token> |
Да |
mcp — MCP-сервер |
Только на центральной панели, если нужен | Да |
trusttunnel — TrustTunnel |
Если включён TrustTunnel; свой домен, A-запись на сервер, без проксирования CDN | Да |
Mieru и VLESS Reality не нужен сертификат Let's Encrypt: Mieru работает на собственном протоколе, Reality использует сертификат сайта-прикрытия. Домен им всё равно нужен — он попадает в клиентские конфигурации.
Перед выпуском сертификата установщик сам проверяет каждое имя:
- есть запись A, и хотя бы один её адрес — адрес этого сервера;
- записи AAAA нет, либо все её адреса тоже принадлежат серверу (забытая AAAA на старый сервер — самая частая причина «сертификат выпущен, а протокол не работает»);
- CAA самого домена и его родителей не запрещает Let's Encrypt;
- уже существующий сертификат покрывает это имя — чужой сертификат не трогается.
Сертификаты выпускаются certbot certonly --webroot по TCP/80 без DNS-01 и API
регистратора. Имена группируются по линиям (--cert-name): proxy-control — панель и
MTProxy одним сертификатом, naive, three-xui-panel, three-xui-hysteria,
three-xui-subscription. Сразу после выпуска выполняется certbot renew --dry-run, чтобы
продление было проверено в момент установки, а не через три месяца.
Работайте обычным пользователем с доступом к sudo. Скачивание и проверка проходят
без прав администратора:
curl -fsSLO https://github.com/dubr1k/proxy-control/releases/latest/download/install-release.sh &&
curl -fsSLO https://github.com/dubr1k/proxy-control/releases/latest/download/install-release.sh.sha256 &&
sha256sum --check install-release.sh.sha256Если контрольная сумма совпала, прочитайте сценарий и требования, затем запустите мастер:
less install-release.sh
bash install-release.sh --requirements
bash install-release.shСценарий скачивает архив, SHA256SUMS, release-manifest.json и sbom.spdx.json,
сверяет контрольные суммы, описание выпуска и SHA-256 архива, записанную в самом сценарии:
подменённый архив не распаковывается, даже если вместе с ним подменён SHA256SUMS. При
наличии gh дополнительно проверяется attestation — подтверждение происхождения файлов.
Происхождение самого сценария проверяется командой
gh attestation verify install-release.sh --repo dubr1k/proxy-control.
Полезные параметры: --check-only только скачивает и проверяет; --no-wizard ещё и
распаковывает, но мастер не запускает; --lang ru|en — язык сообщений и мастера (язык
мастер тогда не спрашивает). Сценарий запускает нативный бинарник установщика
с необходимыми правами; Python на сервере не нужен. Если Proxy Control на сервере уже
стоит, используйте bash install-release.sh --update, а не кнопку «Обновить» в панели
3.3.0. Сначала проверьте Fleet v1: установленный агент или ingress с mTLS требует
сохранения состояния и явного переноса, не удаления тома при обновлении.
В архиве — установочные бинарники, исходники для сборки контейнеров, общие библиотеки,
приёмочные клиенты и пользовательские инструкции. Тестовые наборы, CI, лаборатории и
инструменты разработки остаются в исходном репозитории; состав задаёт
release/runtime-files.json.
Проект намеренно не предлагает «скачать и сразу выполнить одной командой»: сценарий сначала проверяется, потом читается и только потом запускается.
Мастер говорит по-русски или по-английски, перед каждым выбором коротко объясняет варианты и сохраняет ответы в файл TOML, который можно прочитать и поправить вручную. В квадратных скобках — ответ по умолчанию, клавиша ввода его принимает.
Профили, параметры и вопросы мастера
Режим сервера. fresh (по умолчанию) — установщик сам ставит и настраивает Nginx.
coexist — Nginx уже держит порт 443, установщик только дописывает свои маршруты.
Профиль.
| Профиль | Что ставится |
|---|---|
core |
Telemt/MTProxy и панель |
core-naive |
То же плюс NaiveProxy |
core-mieru |
То же плюс Mieru |
full |
Всё вместе (по умолчанию) |
Режим 3x-ui.
none— 3x-ui не трогаем совсем (по умолчанию);existing— принять уже установленный: установщик добавит маршруты к его входящим подключениям VLESS Reality TCP и XHTTP и не изменит ни одного его файла. Входящие подключения вы заводите в 3x-ui сами;managed-new— поставить 3x-ui3.10.2: установщик выпишет сертификаты, уведёт панель 3x-ui с публичных портов на127.0.0.1под приватный адрес, сменит заводскиеadmin/adminна ваши и сам создаст VLESS Reality TCP, VLESS Reality XHTTP и Hysteria2. Только в режимеfresh.
Домены. Мастер спрашивает только те, что нужны выбранному профилю и режиму 3x-ui (см.
таблицу доменов). Домен подписки клиентов и домен MCP-сервера можно
оставить пустыми — тогда эти функции выключены. Домен TrustTunnel мастер спрашивает только после «да» на вопрос о TrustTunnel. MCP нужен только на центральной панели.
Порты Mieru по умолчанию — 46001; мастер не даст выбрать порт, занятый самим
установщиком, и скажет, кем он занят.
WARP. В режиме managed-new мастер спрашивает, включать ли WARP для Xray, и при ответе
«да» требует непустой список доменов и geosite:-списков через запятую (например,
example.com, geosite:openai); NaiveProxy и Mieru при этом остаются на прямом выходе.
В режимах 3x-ui none и existing вопрос задаётся, если профиль включает NaiveProxy или
Mieru: ответ «да» направляет весь их трафик через WARP. Установщик сам ставит закреплённый
официальный клиент Cloudflare и поднимает собственную точку SOCKS5 127.0.0.1:40000;
заранее запущенный WARP не нужен и считается чужим состоянием.
AmneziaWG. Необязательный VPN для любого профиля: «да/нет», затем версии (по умолчанию
все три — 1.5, 2.0, 3.1) и имя или IPv4-адрес, по которому клиенты подключаются (по
умолчанию домен панели; он должен указывать прямо на сервер и не проксироваться). Новый домен не
нужен. UDP-порты случайные и свободные, свои на каждый сервер (не общеизвестные 51820–51822, которые
цензоры узнают по отпечатку): мастер показывает их и даёт ввести свои, в TOML есть ports.
MTU и DNS задаются только в TOML (секция [amneziawg]).
Установщик собирает образ awg-manager из закреплённого коммита amneziawg-go, создаёт
/var/lib/awg-manager (ключи сервера) и sysctl-файл пересылки IPv4. В режиме fresh с UFW он
открывает UDP-порты и маршрутизацию на интерфейсах awg15, awg20, awg31; в остальных случаях
откройте эти UDP-порты и разрешите пересылку на интерфейсах awg* сами.
TrustTunnel. Необязательный VPN для любого профиля: два вопроса — «установить?» и домен. Домен свой:
A-запись на сервер, только DNS (без проксирования CDN), не совпадающий ни с одним другим доменом.
Установщик выпускает для него сертификат, добавляет строку в карту SNI Nginx и собирает образ
trusttunnel-manager из закреплённого trusttunnel_endpoint (v1.1.0), создаёт /var/lib/trusttunnel-manager
(учётные данные и счётчики). Endpoint слушает только 127.0.0.1:4453 (listen_port); новых портов, UDP и
правил UFW нет. Нужен доступ к GitHub на время сборки образа.
Почта для сертификатов. Адрес для Let's Encrypt.
Учётные данные. Имя первого пользователя MTProxy и Mieru; пароль владельца панели
(имя для входа всегда owner); имя и пароль панели 3x-ui в режиме managed-new. Пароль
вводится дважды и не отображается. Пустой ответ означает «создай сам» — установщик
сгенерирует случайный пароль. Требование одно: не короче 12 символов.
[!IMPORTANT] Пароли не попадают в файл конфигурации. Если вы выбираете «сохранить» (
save), мастер кладёт их рядом, в<имя-конфигурации>.credentialsс правами0600, — удалите этот файл сразу после установки. При выборе «применить» (apply) пароли передаются установке напрямую и стираются, как только она закончится.
Порты в UFW. Только в режиме fresh: разрешить ли установщику открыть нужные порты
(по умолчанию да). Он добавляет только свои правила с пометкой proxy-control:firewall, а
выключенный UFW включает, первым правилом пропустив SSH.
В конце мастер показывает все ответы под понятными названиями (а не ключами файла) и предлагает исправить любое поле, сохранить
конфигурацию или продолжить. Готовые конфигурации для каждого профиля и режима 3x-ui —
в examples/installer/.
План — полный список того, что произойдёт: пакеты, файлы, маршруты Nginx, сертификаты, службы. Секретов в нём нет. План ничего не меняет, поэтому его можно запускать заранее, чтобы проверить домены и DNS:
sudo bash install.sh plan --config examples/installer/full-three-xui.toml --jsonУстановка начинается только после подтверждения контрольной суммы (digest) именно этого плана. Если сервер изменился между планом и установкой, сумма не совпадёт и установка не пойдёт:
sudo bash install.sh install --config examples/installer/full-three-xui.toml --accept-plan DIGESTМастер делает то же самое сам: показывает план и просит ввести первые 12 символов digest.
Установщик не считает работу сделанной по факту «контейнер запустился» — он проверяет каждый протокол настоящим клиентом:
- MTProxy — Fake-TLS, Obfuscated2,
req_pq_multiи проверенный ответresPQ; - NaiveProxy — сайт-прикрытие без пароля, затем аутентифицированный
CONNECT, известная нагрузка и запись в учёте; - Mieru — статус
RUNNINGи официальный клиент, который реально выходит в интернет; - панель — вход, роли, создание и отзыв временного доступа;
- соседние маршруты — каждый чужой SNI продолжает работать.
Если любая проверка не прошла, установщик откатывает сделанное и возвращает сервер в прежнее состояние.
Проверка и запуск архива вручную
Тот же путь без сценария. Скачайте четыре файла из раздела Assets
выпуска 4.0.1: архив,
SHA256SUMS, release-manifest.json и sbom.spdx.json. SHA256SUMS проверяет три файла:
архив, описание выпуска и перечень компонентов sbom.spdx.json; сам файл контрольных сумм
берётся со страницы выпуска и отдельного подтверждения происхождения не имеет.
sha256sum --check SHA256SUMS &&
tar -xOf proxy-control-v4.0.1.tar.gz proxy-control/install-bootstrap > install-bootstrap &&
chmod 700 install-bootstrap &&
./install-bootstrap --archive proxy-control-v4.0.1.tar.gz --checksum SHA256SUMS --manifest release-manifest.jsoninstall-bootstrap отказывается работать от root. Перед единственным вызовом sudo он
проверяет владельца и права файлов, контрольную сумму архива, соответствие описанию
выпуска, отсутствие признака предварительной версии и путей, выходящих за пределы архива.
Из рабочей копии Git установщик не запускается: ему нужен release/release.json, который
создаётся при сборке выпуска.
Если Nginx, сертификаты и окружение вы ведёте сами, базовый контур можно поднять
напрямую через Compose: DOCKER_DEPLOYMENT.ru.md; ручная
установка NaiveProxy и Mieru — в PANEL.ru.md и MIERU.ru.md; TrustTunnel на таком
сервере включает scripts/enable-trusttunnel.sh (TRUSTTUNNEL.ru.md).
Используйте проверенный архив выпуска: примеры examples/installer/ входят в него,
разработческие тесты и лаборатории — нет. pc_common и pc_host — рабочие библиотеки,
а probe/ и deploy/mieru-client/ — приёмочные клиенты установщика; не удаляйте их.
Этот раздел — инструкция для ИИ-агента (Claude Code, Codex и подобных), которому вы дали SSH-доступ к серверу. Агент ставит Proxy Control без мастера: пишет конфигурацию TOML, получает план и устанавливает ровно его после вашего подтверждения.
Полная инструкция для ИИ-агента
Скопируйте и заполните:
Установи Proxy Control на этот сервер по разделу «Установка ИИ-агентом»
из https://github.com/dubr1k/proxy-control (README.md). Соблюдай правила раздела.
Режим сервера: fresh. Профиль: full. 3x-ui: none.
Домены: панель panel.example.com, MTProxy relay.example.com,
NaiveProxy edge.example.com, Mieru mieru.example.com,
подписка клиентов sub.example.com.
Почта для Let's Encrypt: admin@example.com.
WARP: нет.
Пароли не придумывай и не показывай — пусть их создаст установщик.
Перед установкой покажи мне план и дождись моего подтверждения.
- Только названный сервер. Не трогать соседние сайты, контейнеры, маршруты Nginx и
другие серверы. Работать обычным пользователем с
sudo; отrootсценарий установки не запускается. - Ни одного секрета в выводе. Не выбирать, не печатать и не сохранять пароли, ключи
доступа, ссылки доступа и QR. Пароли создаёт установщик (пустые значения), либо
владелец сам кладёт их в
<конфигурация>.credentialsс правами0600. В отчёте — только пути к файлам с учётными данными, не их содержимое. - Отказ проверки — это стоп. Если
planзавершился с ненулевым кодом (DNS, CAA, занятый порт, NAT, CDN, чужой владелец 443, неоднозначный Nginx), не обходить проверку и не менять сервер «чтобы прошло»: остановиться и передать владельцу причину дословно. - Ставить только подтверждённый план. Digest берётся из JSON-вывода
plan, не переписывается вручную и подтверждается владельцем. - Не повторять установку вслепую. При обрыве —
status, затемresumeилиrepair. Не удалять файлы журнала и состояния в/var/lib/proxy-control/.
curl -fsSLO https://github.com/dubr1k/proxy-control/releases/latest/download/install-release.sh
curl -fsSLO https://github.com/dubr1k/proxy-control/releases/latest/download/install-release.sh.sha256
sha256sum --check install-release.sh.sha256 # ожидается: install-release.sh: OK
bash install-release.sh --requirements # что нужно серверу и что будет поставлено
bash install-release.sh --no-wizard # скачать, проверить и распаковать без мастера
cd proxy-control-v*/proxy-controlЛюбая ошибка проверки контрольной суммы или выпуска — стоп и отчёт владельцу.
Возьмите ближайший пример из examples/installer/ и замените значения на данные владельца:
| Пример | Режим сервера | 3x-ui |
|---|---|---|
core.toml, core-naive.toml, core-mieru.toml |
fresh |
none |
managed-three-xui.toml |
fresh |
managed-new |
existing-three-xui.toml, full-three-xui.toml |
coexist |
existing |
core-amneziawg.toml |
fresh |
none, с необязательным [amneziawg] |
core-trusttunnel.toml |
fresh |
none, с необязательным [trusttunnel] и domains.trusttunnel |
cp examples/installer/core.toml ~/proxy-control.toml
chmod 600 ~/proxy-control.toml
# отредактировать: host_mode, profile, acme_email, [domains], [mieru], [three_xui], [firewall]Необязательные части: domains.subscription (подписки клиентов), domains.mcp (MCP-сервер,
только на центральной панели), секция [egress] (WARP и Xray-router), секция [amneziawg]
(AmneziaWG: enabled, versions, host, ports, mtu, dns; новый домен не нужен), секция [trusttunnel]
(TrustTunnel: enabled, listen_port; нужен свой domains.trusttunnel). Каждое поле описано в
справочнике установщика. Пароли в TOML не пишутся.
В командах ниже awk читает digest из JSON-плана. Проверяйте его вместе с
читаемым планом перед передачей владельцу; Python на сервере не нужен.
sudo bash install.sh plan --config ~/proxy-control.toml --json > ~/plan.json
echo "exit=$?" # не 0 — стоп, причина владельцу
awk -F'"' '/^ "digest": / {print $4}' ~/plan.json
sudo bash install.sh plan --config ~/proxy-control.toml # читаемый план для владельцаПокажите владельцу читаемый план и digest и дождитесь явного подтверждения.
digest=$(awk -F'"' '/^ "digest": / {print $4}' ~/plan.json)
sudo bash install.sh install --config ~/proxy-control.toml --accept-plan "$digest" --json > ~/install.json
sudo bash install.sh status --json # ожидается "status": "active"Установка идёт несколько минут и сама проводит приёмку протоколов. При обрыве SSH код 255
говорит только о потере связи: сначала status, затем resume или repair.
cd /opt/mtproxy-shared443 && sudo docker compose ps
curl -fsS -H 'Host: panel.example.com' http://127.0.0.1:8787/healthz # {"status":"ok"}
sudo nginx -t
systemctl is-active nginx dockerВ отчёте владельцу: домены, профиль, digest плана, версия из файла VERSION, состояние
контейнеров и служб, пути к учётным данным (/opt/mtproxy-shared443/secrets/panel-bootstrap-password,
для managed-new — /var/lib/proxy-control/three-xui/panel-access) и что осталось проверить
человеку: вход в панель и подключение настоящим клиентом. Если владелец сохранял
<конфигурация>.credentials, напомните удалить этот файл.
После установки агент работает с панелью не через SSH, а через MCP-сервер: выдача доступов, маршрутизация, обновления и диагностика описаны в навыках для типовых задач.
Панель Proxy Control. Откройте https://<домен панели>/login и войдите как owner.
Если пароль оставляли пустым, установщик положил его в
/opt/mtproxy-shared443/secrets/panel-bootstrap-password (0600): прочитайте через
защищённую консоль, войдите и сразу смените.
Панель 3x-ui (managed-new). Слушает 127.0.0.1:8451 под приватным адресом и доступна
снаружи по своему домену через общий 443. Адрес, имя и пароль:
sudo cat /var/lib/proxy-control/three-xui/panel-accessMCP-сервер (если задан domains.mcp). Адрес https://<домен mcp>/mcp и ключ доступа
записаны в credentials/handoff.json рядом с отчётом установки (0600, только root).
Подключение к Claude Code — в docs/MCP.ru.md.
TrustTunnel (если включён). Убедитесь, что A-запись домена ведёт на сервер без проксирования CDN, и выдайте первый
доступ из карточки клиента (ссылка tt://, QR и конфиг TOML в окне доступа); подробности — в
TRUSTTUNNEL.ru.md.
Не копируйте эти файлы в Git, сообщения об ошибках, журналы и общие резервные копии.
Файл <имя-конфигурации>.credentials, если мастер его создавал, удалите.
Роли. Владелец (owner) — администраторы, API-ключи, клиенты, связанные панели;
администратор (admin) — пользователи протоколов и аудит; наблюдатель (viewer) — только
просмотр. Последнего владельца нельзя удалить или понизить; каждое изменение требует CSRF и
попадает в аудит без паролей, ключей, ссылок и QR.
Перед обновлением сделайте резервную копию. В парке связанных
панелей сначала обновите узлы, затем центральную панель. Сервер обновляется тем же
сценарием, что ставит новый, — режимом --update, обычным пользователем с sudo:
curl -fsSLO https://github.com/dubr1k/proxy-control/releases/latest/download/install-release.sh &&
curl -fsSLO https://github.com/dubr1k/proxy-control/releases/latest/download/install-release.sh.sha256 &&
sha256sum --check install-release.sh.sha256 &&
bash install-release.sh --update3.3.0 → 4.0 — только этой командой, не кнопкой обновления UI 3.3.0. До любых
изменений панели/менеджеров проверенный нативный установщик заменяет Python-агент,
сохраняет env, директивы unit и drop-in оператора и требует health status=ok,
implementation=rust, version=<цель>. При отказе прежний агент и журнал владения
восстанавливаются и проверяются. До обновления 4.0 переведите узлы Fleet v1 на v2.
Python и Cargo на хосте не нужны: Bash/awk проверяет оба готовых бинарника до запуска.
Что обновляется и как работают обновления компонентов
Сценарий проверяет выпуск так же, как при установке, и просит version-agent сервера
обновить панель ровно до проверенного архива — с резервной копией файлов, образа и базы и
откатом при неудаче; затем пересобирает изменившиеся службы управления. Telemt,
сертификаты, .env и secrets/ не трогаются. Если на сервере включён AmneziaWG и его
исходники изменились, awg-manager пересобирается: туннели на секунды рвутся и клиенты
переподключаются сами; /var/lib/awg-manager с ключами сервера не трогается. Так же пересобирается
trusttunnel-manager: перезапуск endpoint ненадолго рвёт сессии, /var/lib/trusttunnel-manager не трогается.
Отдельные компоненты — Telemt, NaiveProxy/Caddy, Mieru/mita, AmneziaWG (amneziawg-go), TrustTunnel (endpoint), Xray-router и саму панель — можно обновить с экрана «Версии». Кнопка «Проверить обновления» показывает новые выпуски этих проектов с их опубликованной контрольной суммой; выпуск без контрольной суммы виден, но не ставится. Контрольная сумма обнаруживает подмену относительно опубликованного значения, но сама по себе не подтверждает автора и не означает, что версия проверена в Proxy Control. Обновление доступно только владельцу, и при ошибке агент возвращает предыдущую версию. Уже установленный 3x-ui обновляется его собственными средствами.
Полный порядок и откат — в docs/UPGRADING.ru.md.
Проверки состояния, резервная копия, восстановление и удаление
cd /opt/mtproxy-shared443
docker compose ps
curl -fsS -H 'Host: panel.example.com' http://127.0.0.1:8787/healthz
sudo nginx -t
ss -lntup
systemctl is-active nginx docker
systemctl is-active caddy-naive mitaЗаголовок Host обязателен: панель принимает только своё публичное имя. Ожидается
{"status":"ok"}. Перед тем как показывать вывод, уберите пароли, URL доступа, QR, ключи и
сертификаты.
Главное — база панели и мастер-ключ secrets/panel-master-key, который хранится
отдельно от базы: без него зашифрованные учётные данные не восстановить. Для online
backup без остановки службы нужен sqlite3 CLI на хосте (не требуется самому
Proxy Control). Используйте фактический mount /data контейнера и закрытый каталог вне тома:
umask 077
backup=$(sudo mktemp -d /root/proxy-control-db.XXXXXX)
db_dir=$(sudo docker inspect --format '{{range .Mounts}}{{if eq .Destination "/data"}}{{.Source}}{{end}}{{end}}' proxy-control-panel)
test -n "$db_dir" && sudo test -f "$db_dir/panel.sqlite3" || exit 1
sudo sqlite3 "$db_dir/panel.sqlite3" ".backup '$backup/panel.sqlite3'"
sudo sqlite3 "$backup/panel.sqlite3" 'PRAGMA integrity_check;'Ожидается ровно ok. Что ещё резервировать для Telemt, NaiveProxy, Mieru, TrustTunnel (/var/lib/trusttunnel-manager), Nginx и Fleet и как
восстанавливать — в docs/BACKUP_RESTORE.ru.md.
sudo bash install.sh status --json
sudo bash install.sh resume --json
sudo bash install.sh repair --jsonresume продолжает прерванную установку с сохранённой фазы. repair проверяет, что всё
принадлежащее установщику на месте и не изменено, и перезапускает только свои службы. Не
удаляйте journal.json, journal.key, transaction.json, файлы WAL/SHM и резервные копии,
чтобы «починить» запуск.
sudo bash install.sh uninstall --jsonУдаление останавливает службы и убирает только принадлежащие установщику маршруты, файлы и
пакеты. Пакеты, которые установщик поставил сам (на чистом сервере это, например, docker.io и
certbot), снимаются apt-get remove: тома Docker с базой панели, секреты, сертификаты и
каталоги сайтов-прикрытий остаются. После удаления проверьте nginx -t, публичные слушатели и
соседние SNI.
[!WARNING]
uninstall --purge-dataудаляет и данные: тома, состояние служб и — черезapt-get purgeтех же пакетов —/var/lib/dockerцеликом и/etc/letsencryptс сертификатами. Перед ним сделайте резервную копию и унесите её с сервера.
Клиенты, протоколы, Fleet, маршрутизация, MCP и мониторинг
Карточки клиентов и узлов показывают краткое состояние; подробности открываются кнопкой «Открыть». Подписка доступна отдельной кнопкой, QR и инструкция раскрываются по запросу.
Экран «Клиенты» держит человека и все его доступы к MTProxy, NaiveProxy, Mieru, AmneziaWG и TrustTunnel вместе:
поиск и фильтры по всему списку, импорт существующих пользователей служб только чтением,
выдача доступа одной журналируемой операцией с честным исходом — succeeded,
compensated или manual_intervention_required. Каждому клиенту — одна ссылка
https://<домен подписки>/s/<token> на все его доступы в форматах raw, singbox
(Karing и sing-box), clash (mihomo), manifest и html. Ключ ссылки показывается один раз,
в базе хранится только его контрольная сумма, отзыв действует мгновенно, запросы подписки
не пишутся в журналы. Подробно — PANEL.ru.md.
Имена подключений в подписке начинаются с имени узла: AMS · Naive,
AMS · Mieru · TCP 8443. Имя берётся из экрана «Узлы», в том числе для локального
сервера. При совпадении имён добавляется стабильный короткий суффикс доступа. Клиента можно
переименовать кнопкой «Переименовать» на его карточке, а любому доступу задать своё название
в подписке: окно доступа → «Название в подписке». Протокол добавляется автоматически:
например, Ams-server · Naive или Ams-server · Mieru. Пустое название возвращает
«узел · протокол».
Переименование меняет только отображение: учётные записи, адреса и секреты остаются прежними.
После любого переименования обновите подписку в приложении — URL, логины и пароли
не меняются. Throne использует формат singbox (вариант Karing). В raw имя
передаётся в подписи Naive и поле profile Mieru; ссылка Telegram MTProxy не меняется.
- MTProxy / Telemt. Источник истины после первого запуска — том
telemt-config; квота и счётчик процесса — разные величины. DOCKER_DEPLOYMENT.ru.md - NaiveProxy. Без пароля домен показывает страницу-прикрытие, а не «407». Один URL
https://<user>:<pass>@<домен>работает и как HTTPS, и как HTTP/2. Через прокси идёт только TCP; HTTP/3 наружу не публикуется. Проверенные клиенты —naive, Karing и sing-box. PANEL.ru.md - Mieru. Свои TCP-порты, порт 443 не занимает. Проект проверяет и обещает только TCP: UDP-профили в реальных сетях у клиентов не работают. Квота — приблизительная проверка, не платёжный счётчик. MIERU.ru.md, выдача доступов
- AmneziaWG. Необязательный VPN поверх UDP. Три несовместимые версии — 1.5, 2.0 и 3.1 — работают одновременно, каждая на своём интерфейсе и UDP-порту; доступ всегда одной версии. Закрытый ключ клиента хранит панель, узел знает только открытый. Конфиг выдаётся файлом и QR, в подписки он не входит. Нужно DNS-имя, доходящее до сервера напрямую по UDP; новый домен не нужен. AMNEZIAWG.ru.md
- TrustTunnel. Необязательный VPN от AdGuard: HTTP/2 поверх TLS, только TCP (QUIC и UDP не используются), на
общем 443 через SNI; нужен свой домен без проксирования CDN. Доступ — ссылка
tt://с QR и конфиг TOML (в официальных приложениях AdGuard для iOS и Android и в клиенте командной строки), записьtrusttunnelв ленте Clash/mihomo; в ленте sing-box его нет. Каждое изменение доступа ненадолго перезапускает endpoint. Маршрутизация — только для всей службы, без полос для клиентов. TRUSTTUNNEL.ru.md - 3x-ui. Остаётся отдельной панелью со своим интерфейсом; Proxy Control следит, чтобы оба
жили на одном 443. В
managed-newвходящие подключения слушают127.0.0.1:8449(VLESS Reality TCP),127.0.0.1:8450(XHTTP) и0.0.0.0:443/UDP(Hysteria2); подписка 3x-ui публикуется только при заданномsubscription_domain.
Одна панель становится центральной и управляет другими по их собственным HTTPS-доменам:
на узле владелец создаёт API-ключ node-sync, на центре «Узлы → Добавить узел» принимает URL и
ключ, затем «Импортировать» забирает существующих пользователей. На серверах не появляется
ничего, кроме образа панели. Доверие — WebPKI или закреплённый отпечаток сертификата;
желаемое состояние узла — нумерованные поколения с контрольной суммой; узел без связи
догоняет при возвращении. Подробно — FLEET.ru.md.
Для каждого узла и службы задаётся политика исходящего трафика: весь трафик напрямую или через WARP, свой выход, другой узел парка (цепь до трёх узлов), блокировки по домену и CIDR. Необязательный Xray-router на узле добавляет geosite, geoip и порты; через него маршрутизируется и MTProxy. Предпросмотр показывает ровно то, что применит служба узла; применение транзакционно с откатом — локально и на связанных панелях.
WARP — одна локальная точка SOCKS5 на 127.0.0.1:40000. Установщик ставит закреплённый
официальный клиент Cloudflare, проверяет SHA-256 и принимает WARP только после реального
HTTPS-запроса через SOCKS5 с внешним IP, отличным от прямого выхода. Клиент WARP —
проприетарная внешняя зависимость, он не входит в MIT-лицензию проекта и в архив выпуска.
| Протокол | Что уходит через WARP |
|---|---|
| Xray / управляемый 3x-ui | Домены из warp_domains. Маршрутизация принятого 3x-ui (existing) не меняется. |
| NaiveProxy | Начальное значение [egress].naive; дальше решает политика маршрутизации панели. |
| Mieru | Начальное значение [egress].mieru; дальше решает политика маршрутизации, включая выборочные правила. |
Подробно — docs/ROUTING.ru.md и docs/XRAY_ROUTER.ru.md.
Контейнер proxy-control-mcp на центральной панели открывает API панели как инструменты
Model Context Protocol по https://<домен mcp>/mcp. Каждый вызов идёт через API-ключ mcp
и виден в аудите; необратимые действия требуют confirm: true. В skills/ лежат
готовые инструкции для ИИ по типовым задачам: утренний обзор, выдача доступа, диагностика,
маршрутизация, обновления. Подключение — docs/MCP.ru.md.
Экран «Мониторинг» (три вкладки: «Сейчас», «Трафик», «Узлы») показывает загрузку сервера и скорость каждого протокола вживую и хранит историю: минутные точки 3 суток, 15-минутные 35 суток, часовые 400 суток. Байты по протоколам считает собственная таблица nftables, которая только считает и ничего не блокирует; направление — с точки зрения клиента, байты сетевого уровня с заголовками. Центральная панель показывает и связанные узлы. Что измеряется, API, пороги оповещений и диагностика — MONITORING.ru.md.
Управление доступами 3x-ui из Proxy Control, постепенное применение правил к части узлов, UDP через Xray-router и обновление панели узла из центра. Для клиентов Mieru заявлен только TCP. Учёт трафика не предназначен для расчёта платежей.
- Панель не открывается. Проверьте
127.0.0.1:8787,PANEL_ALLOWED_HOSTS, виртуальный узел HTTPS на8443, базу SQLite и владельца тома. - MTProxy запущен, но клиент не подключается. Проверьте A/AAAA, отсутствие CDN, карту
SNI, имя Fake-TLS и настоящий ответ
resPQ— открытый порт ничего не доказывает. - Учёт NaiveProxy не растёт. Запись появляется только после закрытого
CONNECT. - Служба управления Mieru не отвечает. Проверьте версию
mita,/run/mita/mita.sockи GID сокета. Не применяйте рекурсивныйchownвслепую. - TrustTunnel не подключается. В профиле должен быть именно домен TrustTunnel (по IP-адресу endpoint отказывает), без
проксирования CDN; менеджер
degradedсcertificate_missing— нет сертификата домена. Подробнее — TRUSTTUNNEL.ru.md. - Нет QR старого пользователя Mieru. «Конфигурация» показывает сохранённый ключ; если ключ не сохранён, один раз нажмите «Новый ключ».
Больше случаев — устранение проблем и руководство по эксплуатации.
Пакеты, версии компонентов, образы и зависимости
Адаптер packages ставит ровно эти пакеты: ca-certificates, certbot, curl,
docker-compose-v2, docker.io, nginx-full, openssl.
Установщик скачивает их по закреплённым HTTPS-адресам и отказывается продолжать, если
контрольная сумма не совпала. Версию образа Telemt закрепляет compose; панель может обновить
Telemt и сверх образа — из бинарника релиза telemt/telemt с проверенной SHA-256
(локально собранный образ на закреплённом образе реестра).
| Компонент | Версия | Лицензия | Назначение |
|---|---|---|---|
mita (enfein/mieru) |
3.38.1 | GPL-3.0-or-later | Сервер Mieru; ставится только исполняемый файл и уведомление о лицензии. |
mieru (enfein/mieru) |
3.38.1 | GPL-3.0-or-later | Официальный клиент Mieru для приёмки трафика. |
three_xui (MHSanaei/3x-ui) |
3.10.2 | GPL-3.0-only | Панель 3x-ui и её Xray для VLESS Reality и Hysteria2 в режиме managed-new. |
xray (XTLS/Xray-core) |
26.10.21 | MPL-2.0 | Xray-router: из Xray-linux-64.zip берутся только xray, geoip.dat и geosite.dat, каждый по своей контрольной сумме. |
trusttunnel (TrustTunnel/TrustTunnel) |
1.1.0 | Apache-2.0 | Endpoint TrustTunnel: архив скачивается и сверяется при сборке образа trusttunnel-manager; запускается без изменений как подпроцесс. |
amneziawg-go (лицензия MIT, проект Amnezia VPN) собирается в образ awg-manager по
awg_manager/Dockerfile из закреплённого коммита, на сервере; готового бинарного файла в
выпуске нет. Caddy v2.11.7 с модулем http.handlers.forward_proxy собирается по
docker/Dockerfile.caddy-naive. Адреса, контрольные суммы и идентификаторы SPDX — в
release/external-artifacts.json, который сборка
выпуска встраивает в SBOM.
| Dockerfile | Образ | База |
|---|---|---|
panel/Dockerfile |
API и интерфейс панели (Rust) | rust:1.99-slim-bookworm (сборка), debian:bookworm-slim |
naive_manager/Dockerfile |
Управление доступами и учёт NaiveProxy (Rust) | rust:1.99-slim-bookworm (сборка), debian:bookworm-slim |
mieru_manager/Dockerfile |
Управление доступами и квотами Mieru (Rust) | rust:1.99-slim-bookworm (сборка), debian:bookworm-slim |
xray_router_manager/Dockerfile |
Xray-router: служба управления (Rust) и мост MTProxy (Go) | golang:1.25.12, rust:1.99-slim-bookworm (сборка), debian:bookworm-slim |
mcp_server/Dockerfile |
MCP-сервер (Rust, только центральная панель) | rust:1.99-slim-bookworm (сборка), debian:bookworm-slim |
awg_manager/Dockerfile |
AmneziaWG: служба управления (Rust) и amneziawg-go (необязательно) |
golang:1.25.12, rust:1.99-slim-bookworm (сборка), debian:bookworm-slim |
trusttunnel_manager/Dockerfile |
TrustTunnel: служба управления (Rust) и закреплённый trusttunnel_endpoint (необязательно) |
rust:1.99-slim-bookworm (сборка), debian:bookworm-slim |
deploy/mieru-client/Dockerfile |
Нативный клиент Mieru для приёмки | rust:1.99-alpine (сборка), debian:bookworm-slim |
probe/Dockerfile |
Проба MTProto на TDLib | node |
docker/Dockerfile.caddy-naive |
Caddy с forward_proxy |
caddy:2.11.7-builder → scratch |
release/Dockerfile.host-binaries |
Сборщик выпуска: готовые бинари для хоста (статический musl, воспроизводимо), не образ для запуска | rust:1.99-alpine → scratch |
scripts/lab/Dockerfile.acceptance |
Одноразовый systemd-контейнер стенда | ubuntu |
Каждая база закреплена по контрольной сумме.
Зависимости панели и служб управления закреплены в их Cargo.lock; образ панели не содержит
интерпретатора Python. Административные команды выполняет бинарник panel cli.
Python используется инструментами сборки, разработки и лабораторного стенда, а не процессом
панели. Зависимости стенда закреплены в panel/requirements-dev.txt.
| Тема | Документ |
|---|---|
| Карта всей документации | docs/README.md |
| Установка на Ubuntu 24.04 | INSTALL.ru.md |
| Все команды и поля установщика | docs/INSTALLER_REFERENCE.ru.md |
| Панель, роли, API-ключи, NaiveProxy | PANEL.ru.md |
| MTProto за Nginx | DOCKER_DEPLOYMENT.ru.md |
| Mieru | MIERU.ru.md, выдача доступов |
| AmneziaWG | AMNEZIAWG.ru.md |
| TrustTunnel | TRUSTTUNNEL.ru.md |
| Мониторинг | MONITORING.ru.md |
| Связанные панели | FLEET.ru.md |
| Маршрутизация и Xray-router | docs/ROUTING.ru.md, docs/XRAY_ROUTER.ru.md |
| MCP-сервер | docs/MCP.ru.md |
| Эксплуатация | docs/OPERATIONS.ru.md |
| Резервное копирование | docs/BACKUP_RESTORE.ru.md |
| Обновление и откат | docs/UPGRADING.ru.md |
| Устранение проблем | docs/TROUBLESHOOTING.ru.md |
| Протокол разработки для ИИ-агентов | AGENTS.md |
| Журнал изменений | CHANGELOG.ru.md |
- Не публикуйте
.env,secrets/, URL доступа, QR, ключи доступа, базы, журналы и ключи PKI. - Не открывайте наружу Telemt API, управляющие Unix-сокеты и Caddy Admin API.
- Не подключайте сокет Docker к службам проекта.
- Не меняйте закреплённые Telemt, Caddy или
mitaбез проверки происхождения, контрольных сумм и плана отката. - Перед боевым развёртыванием прочитайте SECURITY.md и политику совместимости.
Сборка и проверки выполняются нативно на Ubuntu 24.04 с закреплённым Rust 1.99. Внешние HTTP- и браузерные проверки используют Python, но запускают панель отдельным Rust-процессом. Подготовка бинарников, образов и тестового окружения, команды проверок — в CONTRIBUTING.md.
Приёмка установщика на архиве выпуска описана в tests/lab/README.md. Рабочий протокол для ИИ-агентов — AGENTS.md.
Код распространяется по лицензии MIT. Сторонние компоненты сохраняют собственные лицензии — их перечень, сведения о происхождении и уведомления об авторских правах в THIRD_PARTY_NOTICES.md.
Proxy Control опирается на работу авторов и сопровождающих этих проектов:
Проекты и библиотеки
| Компонент | За что благодарим | Ссылка |
|---|---|---|
| Telemt | Служба MTProto/MTProxy на Rust | telemt/telemt |
| TrustTunnel | VPN поверх HTTP/2 и TLS (AdGuard) | TrustTunnel/TrustTunnel |
| Mieru и mita | Прокси и средства управления | enfein/mieru |
| 3x-ui | Панель управления Xray | MHSanaei/3x-ui |
| Xray-core | Маршрутизатор исходящего трафика | XTLS/Xray-core |
| Caddy | Обратный прокси HTTPS и управление TLS | caddyserver/caddy |
| forwardproxy | Модуль HTTP CONNECT для Caddy | klzgrad/forwardproxy |
| Nginx | Маршрутизация по SNI на общем порту 443 | nginx.org |
| Certbot и Let's Encrypt | Выпуск и продление сертификатов | Certbot · Let's Encrypt |
| Docker и Compose | Изолированное выполнение служб | Docker · Compose |
| Библиотеки Rust | Tokio, Hyper, Axum, rusqlite, rustls, Argon2, AES-GCM, qrcode | зависимости панели |
Спасибо всем разработчикам, сопровождающим и участникам этих проектов.


