Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,9 @@ Unsupported explicit transports are rejected. [Schema and examples](config-schem
Trusted [configuration subscriptions](docs/en/subscriptions.md) refresh owned profiles without
replacing local profiles or interrupting current tunnels; changed live settings offer reconnect.
Exported credentials and URL tokens are sensitive.
JSON transfers profiles and portable settings, not a full app backup. MTU, DNS security approvals,
language, traffic units and update preferences stay local. ProxyList exports only standalone
HTTPS/MASQUE/SOCKS5 endpoints; use JSON for SSH, Jump and other settings.

## Limitations

Expand Down
4 changes: 2 additions & 2 deletions app/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,10 @@
<string name="continue_action">Продолжить</string>
<string name="export_configuration_title">Экспорт конфигурации</string>
<string name="format">Формат</string>
<string name="export_json_description">JSON · все настройки MegaProxy</string>
<string name="export_json_description">JSON · профили и переносимые настройки</string>
<string name="export_proxy_list_description">ProxyList.txt · только совместимые поля прокси</string>
<string name="include_passwords">Включить пароли</string>
<string name="passwords_omitted_message">Пароли останутся пустыми — их потребуется ввести после импорта.</string>
<string name="passwords_omitted_message">Пароли не включены. При импорте сохранённые пароли останутся; для новых профилей введите их вручную. Токены URL остаются в JSON.</string>
<string name="include_private_keys">Включить закрытые ключи SSH</string>
<string name="private_keys_plaintext_warning">Закрытые ключи будут экспортированы в открытом виде.</string>
<string name="export_secrets_title">Экспортировать секреты в открытом виде?</string>
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,10 @@
<string name="continue_action">Continue</string>
<string name="export_configuration_title">Export configuration</string>
<string name="format">Format</string>
<string name="export_json_description">JSON · all MegaProxy settings</string>
<string name="export_json_description">JSON · profiles and portable settings</string>
<string name="export_proxy_list_description">ProxyList.txt · compatible proxy fields only</string>
<string name="include_passwords">Include passwords</string>
<string name="passwords_omitted_message">Passwords will be left empty and must be entered after import.</string>
<string name="passwords_omitted_message">Passwords are omitted. Import preserves existing passwords; enter them for new profiles. URL tokens remain in JSON.</string>
<string name="include_private_keys">Include SSH private keys</string>
<string name="private_keys_plaintext_warning">Private keys will be exported in plain text.</string>
<string name="export_secrets_title">Export secrets in plain text?</string>
Expand Down
2 changes: 1 addition & 1 deletion config-schema/schema-lock.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"repository": "https://github.com/andre487/MegaProxyConfig",
"commit": "48208464c959e319c940562a7de312d68002c0fa",
"commit": "0f81d3c86d474a6920f718f1ac0234181d10e373",
"files": {
"android-v8.schema.json": "7bd831f92352a74554c6d29befaeea0c6c35a3ba73db86ffe30f3cffa49da2a0",
"megaproxy-v8.schema.json": "7591c7f910452a99dda6a5eaf9622bca41298ed290f80dd90790eae35d545b60",
Expand Down
14 changes: 11 additions & 3 deletions docs/en/dns.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,23 @@ never falls back to direct UDP. Plain modes have no public DoH fallback. IPv6 po
apply to every mode. App UDP/TCP port 53 is intercepted; app-specific encrypted DNS follows normal routing.

Portable profiles retain the endpoint in the legacy `dns.customDohUrl` string with an explicit
`https://`, `tcp://` or `udp://` scheme. Existing schemas remain unchanged. Old clients reject plain
endpoints. Security consent stays on this device: exports/imports and subscriptions cannot grant
`https://`, `tcp://` or `udp://` scheme and `dns.provider: "CUSTOM"`. Examples:
`https://dns.example/dns-query`, `tcp://192.0.2.53:53`, `udp://[2001:db8::53]:53`.
The legacy field name and version 8 schema are unchanged. Clients without plain DNS support
cannot use TCP/UDP endpoints; they must not reinterpret them as DoH.
Security consent stays on this device: exports/imports and subscriptions cannot grant
permission for insecure DNS or invalid DoH certificates. On a new device, confirm locally before connecting. Refreshing/importing an unchanged resolver preserves its local
approvals; a changed resolver requires new approval.
Query tokens in custom DoH URLs remain in exported JSON even when passwords are omitted.
Treat the file as sensitive.
Proxy bootstrap DNS precedes the VPN; see the README endpoint inventory.

DNS admission is limited to 64 flows per proxy, shared by intercepted TCP and UDP. When full,
the oldest completed UDP flow is evicted together with its TUN mapping. Pending responses
and TCP DNS streams are retained.
Excess flows fail immediately; stopping the VPN closes admitted flows and cancels their queries.

DoH alternatives start 200 ms apart; the first valid response wins and outstanding requests are cancelled. Slow requests may therefore reach multiple configured providers. Proxy bootstrap uses the same strategy with the existing provider list. Plain DNS has only the selected resolver.
DoH alternatives start 200 ms apart; the first valid response wins and outstanding requests are
cancelled. Slow requests may therefore reach multiple configured providers. CUSTOM and filtering
presets have no fallback providers. Proxy bootstrap uses the same strategy with its existing
provider list, independently of profile DNS. Plain DNS has only the selected resolver.
11 changes: 8 additions & 3 deletions docs/en/subscriptions.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ Surviving selections remain; removed selections use the downloaded
Supported bodies match manual import: MegaProxy JSON, FoxyProxy JSON, ProxyList
and SuperProxy text. JSON uses stable IDs; other formats reuse uniquely matching
owned names, then unique type/host/port. Ambiguous matches get new IDs. Canonical
snapshots reset omitted supported app preferences to defaults; other formats
preserve settings they do not represent. Omitted profile secrets retain local
snapshots change only explicitly supplied global settings; omitted fields retain
their local values. Other formats preserve settings they do not represent. Omitted profile secrets retain local
credentials and explicit empty fields clear them. An invalid, empty or oversized
snapshot keeps the last working configuration. See the
[delivery protocol](https://github.com/andre487/MegaProxyConfig/blob/main/docs/subscription-protocol.md).
Expand All @@ -71,7 +71,12 @@ its settings; explicit null removes it. An omitted password retains the saved on
only for the same normalized URL and username; empty clears it. Downloaded
subscription settings never replace your configured source list or credentials.
JSON exports include the definition; its password follows **Include passwords**,
but query tokens in URLs remain present. Ownership and status are never exported.
but query tokens in URLs remain present, even with both secret-export options off.
Ownership and status are never exported. Export includes all profiles; reimporting
that file with its subscription makes every imported profile subscription-owned.
A later refresh can remove formerly local profiles absent from the feed. To transfer
profiles without adopting them into the subscription, omit the root `subscription`
property from the file; this preserves any subscription already configured on the receiver.

The complete local profile store is limited to 1,000 profiles, 4,194,304 characters before encoding,
and 8 MiB of encoded JSON. Imports, edits and subscription refreshes exceeding these limits
Expand Down
19 changes: 14 additions & 5 deletions docs/ru/dns.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,25 @@ UDP никогда не переключает DNS на прямой UDP. У о
собственный шифрованный DNS приложений следует обычной маршрутизации.

Переносимый профиль сохраняет адрес в прежнем строковом поле `dns.customDohUrl` с явной схемой
`https://`, `tcp://` или `udp://`. Схемы конфигурации не меняются. Старые клиенты отклоняют
обычные DNS-адреса. Разрешения небезопасных режимов и сертификатов остаются только на устройстве:
экспорт, импорт и подписки не дают такого согласия. На новом устройстве подтвердите его локально перед подключением.
`https://`, `tcp://` или `udp://`. Для своего сервера используется `dns.provider: "CUSTOM"`, например
`https://dns.example/dns-query`, `tcp://192.0.2.53:53` или `udp://[2001:db8::53]:53`.
Имя поля и схема версии 8 не меняются. Клиенты без поддержки обычного DNS не могут использовать
TCP/UDP-адреса и не должны трактовать их как DoH. Разрешения небезопасных режимов и сертификатов
остаются только на устройстве: экспорт, импорт и подписки не дают такого согласия.
На новом устройстве подтвердите его локально перед подключением.
Обновление или импорт неизменившегося резолвера сохраняет локальные разрешения;
смена резолвера требует нового подтверждения.
Начальное разрешение имени прокси до создания VPN не меняется; сервисы перечислены в README.
Токены в параметрах своего DoH URL остаются в JSON даже при экспорте без паролей.
Такой файл содержит секретные данные.
Начальное разрешение имени прокси происходит до создания VPN; сервисы перечислены в README.

На прокси допускается до 64 DNS-потоков суммарно для перехваченного TCP и UDP. При заполнении
лимита удаляется самый старый завершённый UDP-поток вместе с его TUN-соединением. Потоки
с ожидающими ответами и TCP DNS сохраняются.
Если завершённый UDP-поток нельзя вытеснить, новые потоки сразу отклоняются; остановка VPN закрывает потоки и отменяет их запросы.

Альтернативные DoH-запросы запускаются с интервалом 200 мс: используется первый корректный ответ, остальные запросы отменяются. Поэтому при задержке запрос может попасть нескольким настроенным провайдерам. Начальное разрешение адреса прокси использует тот же подход с существующим списком провайдеров. У обычного DNS остаётся только выбранный сервер.
Альтернативные DoH-запросы запускаются с интервалом 200 мс: используется первый корректный
ответ, остальные запросы отменяются. При задержке запрос может попасть нескольким настроенным
провайдерам. У CUSTOM и фильтрующих провайдеров фолбеков нет. Начальное разрешение адреса
прокси использует тот же подход со своим списком провайдеров независимо от DNS профиля.
У обычного DNS остаётся только выбранный сервер.
8 changes: 7 additions & 1 deletion docs/ru/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,19 @@
Документация клиента:

- [Подписка на конфигурацию](subscriptions.md)
- [DNS: режимы, маршрутизация и перенос настроек](dns.md)
- [Установка](installation.md)
- [Обновления приложения](updates.md)
- [Метрики соединения, Тест, Скорость и Видимость VPN](connection-metrics.md)
- [SOCKS5](#socks5)
- [MASQUE α (HTTP/3), экспериментальная поддержка](masque.md)
- [HTTPS через Jump](#https-через-jump)

JSON переносит профили и переносимые настройки, а не полный бэкап приложения. MTU, разрешения
небезопасного DNS, язык, единицы трафика и настройки обновлений остаются локальными.
ProxyList экспортирует только одиночные HTTPS/MASQUE/SOCKS5-прокси; для SSH, Jump и остальных
настроек используйте JSON. Пароли и ключи включаются отдельно; токены URL подписки остаются в JSON.

Документация для разработчиков:

- [Работа с Fastlane](fastlane.md)
Expand All @@ -35,7 +41,7 @@

Цепочки сохраняются в JSON версии 8 (`proxy.type: "HTTPS_JUMP"`, первое звено — `proxy.jump`).
Старые версии приложения отклоняют этот формат, чтобы не превратить цепочку в одиночный прокси.
Экспорт ProxyList пропускает цепочки, поскольку поддерживает одиночные HTTPS- и MASQUE-прокси.
Экспорт ProxyList пропускает цепочки, поскольку поддерживает одиночные HTTPS/MASQUE/SOCKS5-прокси.


[English version](../en/index.md)
Expand Down
11 changes: 8 additions & 3 deletions docs/ru/subscriptions.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ Basic Auth. Интервал — 1–10080 минут, по умолчанию 6
Поддерживаются те же форматы, что при ручном импорте: MegaProxy JSON, FoxyProxy JSON,
ProxyList и текст SuperProxy. JSON использует стабильные ID; остальные форматы сопоставляют
только профили подписки по уникальному имени, затем по уникальным типу/хосту/порту.
Неоднозначные совпадения получают новые ID. Канонический снимок возвращает пропущенные
поддерживаемые настройки приложения к значениям по умолчанию; другие форматы сохраняют
Неоднозначные совпадения получают новые ID. Канонический снимок меняет только явно
переданные глобальные настройки; пропущенные поля сохраняют локальные значения. Другие форматы сохраняют
настройки, которые не описывают. Пропущенные секреты сохраняются, явно пустые очищаются.
Ошибочный, пустой или слишком большой снимок не меняет последнюю рабочую конфигурацию.
Подробности — в [протоколе](https://github.com/andre487/MegaProxyConfig/blob/main/docs/subscription-protocol.md).
Expand All @@ -69,7 +69,12 @@ URL с токенами и отдельные учётные данные под
удаляет их. Пропущенный пароль сохраняется только при совпадении нормализованного URL и
имени пользователя; пустой очищается. Загруженный конфиг не меняет ваши источники и
учётные данные. JSON-экспорт включает определение подписки; пароль зависит от выбора
**Включить пароли**, но токены в URL остаются. Владение профилями и статус не экспортируются.
**Включить пароли**, но токены в URL остаются даже при выключенных опциях экспорта секретов.
Владение профилями и статус не экспортируются. В файл входят все профили; повторный импорт
с подпиской делает каждый импортированный профиль принадлежащим ей. Следующее обновление
может удалить ранее локальные профили, которых нет в источнике. Для переноса профилей без
такого присоединения удалите корневое поле `subscription` из файла; подписка, уже настроенная
на принимающем устройстве, при этом сохранится.

Общее локальное хранилище ограничено 1 000 профилей, 4 194 304 символами до кодирования
и 8 MiB JSON после кодирования. Превышение лимита при импорте, редактировании или
Expand Down
Loading