# Миграция конфигурации OSTP v0.3.1 В версии OSTP 0.3.1 мы полностью переработали архитектуру конфигурации `config.json` для клиента. Старая монолитная структура (где все настройки были в корневом объекте) заменена на модульную систему на базе массивов `inbounds` (входящие соединения) и `outbounds` (исходящие соединения), аналогично Xray/V2Ray/Sing-box. Это позволяет OSTP масштабироваться, поддерживать несколько прокси-серверов, несколько точек входа (SOCKS5, TUN) и сложную маршрутизацию (`routing`). ## Автоматическая миграция В ядро `ostp` встроен автоматический мигратор. При запуске любой программы (cli, gui, flutter) ядро проверит ваш `config.json`. Если в конфигурации отсутствует поле `"version": "0.3.1"`, OSTP **автоматически** конвертирует ваш старый конфиг в новый модульный формат и сохранит его на диск без потери данных. ### Что происходит при миграции: 1. **TUN и SOCKS5** -> преобразуются в массив `inbounds`. - Настройка `socks5_bind` становится входящим `local_proxy` (SOCKS). - Настройка `tun` становится входящим `tun`. 2. **Сервер OSTP** -> переносится в массив `outbounds`. - Параметры `server`, `access_key`, `transport`, `mux` объединяются в `outbound` с типом `"ostp"`. 3. **Split Tunneling (Exclude)** -> преобразуется в `routing` правила. - Старые `domains` и `ips` конвертируются в правила, направляющие трафик в `"direct"` outbound. - Все остальные запросы по умолчанию направляются в `"proxy"` outbound. 4. **Поля `version`** - Добавляется поле `"version": "0.3.1"`, чтобы предотвратить повторную миграцию в будущем. Поле `_comment` было удалено. ## Пример изменения ### До 0.3.1 (Старый формат) ```json { "mode": "client", "log_level": "info", "server": "1.2.3.4:50000", "access_key": "secret", "socks5_bind": "127.0.0.1:1088", "tun": { "enable": true }, "exclude": { "domains": ["localhost"] } } ``` ### После 0.3.1 (Новый формат) ```json { "mode": "client", "version": "0.3.1", "log": { "level": "info" }, "inbounds": [ { "type": "tun", "tag": "tun-in", "auto_route": true, "mtu": 1140 }, { "type": "local_proxy", "tag": "socks-in", "protocol": "socks", "listen": "127.0.0.1", "port": 1088 } ], "outbounds": [ { "type": "ostp", "tag": "proxy", "server": "1.2.3.4", "port": 50000, "access_key": "secret", "transport": { "type": "udp" } }, { "type": "direct", "tag": "direct" }, { "type": "block", "tag": "block" } ], "routing": { "rules": [ { "domain_suffix": ["localhost"], "outbound": "direct" } ], "default_outbound": "proxy" } } ``` ## Информация для разработчиков GUI (ostp-gui, ostp-flutter) Если вы разрабатываете интеграции или сторонние клиенты, **вам больше не нужно парсить старые поля**. Вы должны использовать массивы `inbounds` и `outbounds`. Если GUI передает `serde_json::Value` в ядро, ядро само проведет миграцию перед запуском. Однако для сохранения изменений из UI вы должны изменять именно новую структуру массивов.