# iOS-приложение в подробностях

Это глубокое погружение: каждый экран URnetwork на iPhone и iPad,
настройки с заводскими значениями по умолчанию и знание об устранении
неполадок, которое обычно живёт в голове инженера поддержки. Короткий путь
от установки до подключения — в
[начале работы на iOS](/docs/getting-started-ios); сетевая конструкция за
всем этим — в [обзоре](/docs/overview).

## Как устроено приложение

Один проект Xcode производит и iOS-, и macOS-приложение. На вашем
устройстве оно работает как два процесса:

- **Приложение** (бандл `network.ur`) — интерфейс, который вы видите.
- **Туннельное расширение** (`network.ur.extension`) — Network Extension
  (`NEPacketTunnelProvider`), которое запускает и опекает сам iOS. Ваш
  трафик движется через этот процесс, а не через приложение: он
  оборачивает то, что отправляет телефон, в шифрование («туннель») до
  того, как оно покинет устройство. Четыре вещи по конфигурации остаются
  снаружи, как у любой воспитанной iOS-VPN: ваша локальная сеть
  (принтеры, AirPlay, домашние устройства), пуш-уведомления Apple,
  операторские сервисы вроде звонков по Wi-Fi и трафик к вашим
  собственным Apple-устройствам рядом.

Двое общаются по локальному RPC устройства, поэтому после перезапуска
приложение усыновляет живой туннель, а не сносит его и начинает заново.
Из-за этого разделения VPN продолжает работать, когда вы смахиваете
приложение, — и поэтому же iOS при первом запуске просит одобрить
конфигурацию VPN: расширение — компонент под управлением системы. Это
одобрение — стандартный шаг согласия Apple для любого VPN-приложения.
Никакого другого контроля над телефоном оно не даёт и остаётся видимым —
и отзываемым — в Настройки → Основные → VPN и управление устройством
(Settings → General → VPN & Device Management).

Приложению нужна iOS 16.6 или новее, и всё открыто на
[github.com/urnetwork](https://github.com/urnetwork). Ни один независимый
аудит не покрывает протокол и серверный код оператора — слой, где живут
заявления о приватности. Две сторонние оценки 2025 года покрывают другие
поверхности: тест на проникновение веб-приложения и API и оценка
Leviathan Security Group MASA AL2 Android-приложения, которая пройдена.
Ни одна не покрывает iOS-приложение. [Модель угроз](/docs/threat-model)
фиксирует обе и их рамки.

## Четыре вкладки

Приложение — четыре вкладки: **Подключение** (Connect), **Аккаунт**
(Account), **Таблица лидеров** (Leaderboard) и **Поддержка** (Support).

### Подключение

Главный экран, сверху вниз:

- **Глобус.** Живая картина вашего сеанса. При подключении он показывает
  локации, из которых выходит ваш трафик: где вас видит интернет. Ваш
  клиент держит несколько провайдеров сразу, обычно от трёх до восьми, в
  двух окнах бок о бок (окно качества, которое предпочитает HTTPS, и
  окно скорости для остального), и закрепляет каждый сайт за одним.
  Картина множественная намеренно, при этом любой отдельный сайт
  по-прежнему видит один устойчивый адрес. [Обзор](/docs/overview)
  объясняет окно провайдеров целиком.
- **Кнопка подключения.** Одно касание — подключиться или отключиться.
- **Шторка.** Складной лист под кнопкой с выбранной локацией, **Опциями
  подключения** (Connect options), живыми графиками трафика и
  переключателем **Блокировать рекламу и трекеры** (Block ads and
  trackers). Потяните вверх за полным содержимым; касание вкладки
  Подключение, когда вы уже на ней, складывает шторку обратно. Режима
  раздачи здесь нет. Он живёт в Аккаунт → Настройки.

Нажмите карточку локации, чтобы открыть лист **Доступные провайдеры**
(Available providers). Он открывается на ваших собственных устройствах,
«Лучшем доступном провайдере» (Best available provider) и странах с живым
счётчиком провайдеров онлайн. Наберите название места в «Поиске
провайдеров» (Search providers) — и в результатах вырастет раздел
**Города** (Cities): до прицела на город добираются поиском, а не
прокруткой. Локация числится в списке, только пока в ней онлайн
устройство участника, и платформа выводит город из наблюдаемого
подключения, а не доверяет собственному заявлению провайдера; адрес,
похожий на дата-центр или VPN, понижается, а не принимается на веру.
«Лучший доступный» выбирает провайдеров с наивысшей оценкой рядом с вами;
конкретная локация делает так, что вы появляетесь там (ближние выходы
обычно быстрее всего, потому что расстояние стоит задержки). Провайдеры —
другие участники, раздающие свободную полосу. Ваш трафик доходит до них
уже зашифрованным, потому что веб — это HTTPS ещё до входа в туннель,
поэтому провайдер видит, куда идёт трафик, который он несёт, как видит
интернет-провайдер, но не его содержимое и не ваш реальный адрес.

Ниже в шторке сидят четыре **Опции подключения**:

| Настройка | По умолчанию | Эффект | Главная цена |
|---|---|---|---|
| Режим соединения (Connection Mode) | Авто | Авто ведёт оба окна провайдеров и направляет каждый пакет в подходящее | Веб (Web) или Стриминг (Streaming) привязывают к одному окну |
| Фиксированный IP (Fixed IP) | Выкл | Сужает окно до одного провайдера, поэтому каждый сайт видит один устойчивый адрес | Отдаёт множественный выход |
| Строгая анонимизация (Strong Anonymization) | Вкл | Запрещает прямой путь клиент↔провайдер, поэтому провайдер никогда не видит ваш реальный IP | Медленнее прямого пути |
| Постквантовое шифрование (Post Quantum Encryption) | Вкл | Запечатывает сеанс сквозным шифрованием до провайдера, поэтому оператор несёт шифртекст | Пропускает провайдеров, с которыми нет запечатывания |

- Фиксированный IP выбирается вне режима Авто.
- Выключение Строгой анонимизации — это ваш явный выбор прямого режима:
  анонимизирующее звено выпадает, клиент говорит с провайдером напрямую,
  пропускная способность растёт, и этот провайдер теперь видит ваш
  реальный адрес. Умолчание защищает вашу личность; тратьте её на
  скорость только сознательно.
- **Блокировать рекламу и трекеры**, в той же шторке, выключен, пока вы
  его не включите, и фильтрует всё, что несёт туннель.
- Между двумя включёнными умолчаниями провайдер никогда не узнаёт, кто
  вы, а оператор никогда не читает, что вы отправляете. И то и другое
  верно без единой тронутой настройки, поэтому ни одна сторона не держит
  одновременно вашу личность и вашу активность.

Эти два переключателя и заводское умолчание — вся картина:

| Режим | Видит оператор | Видит провайдер | По умолчанию и доступность |
|---|---|---|---|
| **Ретранслируемый запечатанный** | ваш аккаунт и исходное подключение, на каких провайдерах вы сидите, и шифртекст с его таймингом и объёмом | назначения, которые он выводит, и идентификатор устройства/контракта, **не** ваш реальный IP | заводское умолчание: Постквантовое шифрование, включено в шторке подключения |
| **Ретранслируемый стандартный** | ваш аккаунт и исходное подключение, на каких провайдерах вы сидите, и назначения и байты пакетов внутри | назначения, которые он выводит, и идентификатор устройства/контракта, **не** ваш реальный IP | по явному выбору: выключите **Постквантовое шифрование** |
| **Прямой** | меньше участия в ретрансляции | **ваш реальный IP** и назначения, которые он выводит | по явному выбору: выключите **Строгую анонимизацию** |

Читайте первую строку как то, где вы находитесь по умолчанию. Пока
Постквантовое шифрование включено, клиент работает в режиме «закрыто при
сбое»: провайдера, с которым не удаётся запечатать сеанс, он пропускает, а
не использует в открытую, так что несовпадение стоит вам этого провайдера,
а не вашей конфиденциальности. На вторую строку вас переводит только
выключение настройки. Ни одно приложение пока не показывает по подключению
вердикта «запечатано или нет», так что о том, где вы, говорит настройка, а
не сеанс. Ограничение: ничто не проверяет, что предложенные вам провайдеры
независимы друг от друга и от оператора, а оператор может сам запускать
провайдеров.
[Модель угроз](/docs/threat-model) прорабатывает эти строки против
именованных противников, включая враждебного оператора, и прямо говорит,
где каждая из них отказывает.

### Собственный DNS

Под деталями вкладки Подключение живёт полная панель управления DNS.
DNS — телефонная книга интернета, справка, которая превращает имя вроде
ur.io в сетевой адрес, и тот, кто отвечает на эти запросы (резолвер),
видит имя каждого сайта, который вы посещаете. Умолчание — самое
безопасное устройство: зашифрованный DNS over HTTPS, резолвящийся через
туннель. Всё остальное — размен, который можно сделать:

- **DNS over HTTPS (удалённый).** DoH, резолвящийся на дальней стороне
  туннеля. Умолчание и самый приватный вариант: резолвер видит адрес
  провайдера, а не ваш.
- **DNS over HTTPS (локальный).** DoH, резолвящийся прямо с вашего
  устройства.
- **Незашифрованный DNS (удалённый / локальный).** Классический UDP DNS,
  через туннель или прямо с устройства, для сетей и резолверов, которым
  это нужно.
- **Локальный резервный DNS (Local DNS fallback).** Пускает локальный
  резолвер наперегонки, пока туннель стартует, чтобы разрешение имён не
  замирало во время рукопожатия. Когда он выключен, DNS резолвится
  только через туннель.

Списки резолверов можно править самостоятельно (URL удалённого и
локального DoH, удалённые и локальные DNS-серверы, IPv4 и IPv6). Сверху
два удобства:

- **Рекомендации по странам.** Известно, что самые сильные настройки в
  некоторых странах не работают. Когда вы подключаетесь туда, где есть
  известная рекомендация, экран говорит об этом и предлагает
  «Использовать рекомендуемые настройки» (Use recommended settings) в
  одно касание — и возврат к самым безопасным умолчаниям тоже в одно.
- **Предлагаемые серверы.** Курируемый список удалённых DNS-серверов, где
  предложенные для вашей подключённой страны отмечены её цветом.
  Включение одного добавляет его в ваш список удалённых резолверов.

### Правила разделения

Правила разделения позволяют вести конкретный трафик мимо туннеля или
закреплять его на месте, на уровне доменов и IP:

- Пока вы подключены, экран показывает живую маршрутную активность.
  Нажмите домен, чтобы вести его локально (мимо туннеля — тогда этот
  сайт видит ваш реальный адрес), или удержите его на одном провайдере,
  чтобы сайт дольше видел один стабильный адрес вместо вашего обычного
  множественного выхода. Полезно для банков и логинов, которые
  оспаривают любую смену адреса.
- Правила применяются ко всему связанному сетевому кластеру вокруг
  домена, поэтому родственные хосты и CDN-трафик ловятся вместе, а не
  протекают по одному поддомену за раз.
- Правила сохраняются и в любой момент убираются с того же экрана.

Ограничение: **раздельного туннелирования по приложениям на iOS нет**
(оно есть на Android и Windows). iOS не даёт VPN-приложениям
поддерживаемого способа включать или исключать трафик по приложениям,
поэтому на iPhone и iPad правила разделения работают с доменами и IP, а
не с приложениями.

### Режим раздачи

Раздача свободной полосы — селектор **Режим раздачи** (Provide mode) на
четыре положения в Аккаунт → Настройки → Подключения, установленный в
**Никогда** (Never), пока вы его не смените:

| Режим | Что несёт |
|---|---|
| **Никогда** | Ничего. Умолчание. |
| **Авто** | Публичный трафик, пока вы сами подключены; только ваши собственные устройства, когда нет |
| **Всегда** | Публичный трафик, подключены вы или нет |
| **Сеть** | Только устройства вашей собственной сети, без оплаты. Самая узкая раздача, какую реализует приложение |

Несколько базовых правил. Раздача работает только по Wi-Fi, пока вы не
переключите **Разрешить раздачу по сотовой сети** (Allow providing on
cellular network) в том же разделе, поэтому она никогда не трогает ваш
тарифный план исподтишка. Она работает внутри туннельного процесса,
поэтому продолжается, пока телефон лежит без дела. Трафик, который вы
несёте, — чужие зашифрованные сеансы: вы не можете его прочитать, а он не
может тронуть ваше устройство. Контроль злоупотреблений работает на вашем
устройстве на выходе, там, где трафик уходит в интернет: BitTorrent и
известные атакующие шаблоны отбрасываются там. Отбрасывание не
записывает ничего — ни назначения, ни домена, ни содержимого, — хотя
совпадение открытого BitTorrent ещё и шлёт оператору флаг с
идентификатором устройства и логическим признаком, не больше. Публичный
трафик, который вы несёте, учитывается по подписанным контрактам, а
провайдеры участвуют в протоколе UR. [ur.xyz](https://ur.xyz)
документирует, как работают вознаграждения.

### Аккаунт

Здесь живут ваша идентичность и тариф:

- **Тариф.** Бесплатный или Pro, остаток баланса, путь к апгрейду и
  накопительный счётчик того, что ваше подключение перенесло для сети.
- **Активировать код баланса (Redeem Balance Code).** Одноразовая выдача
  данных, подписка не нужна.
- **Профиль** (Profile), **Настройки** (Settings), **Кошелёк** (Wallet).
  Настройки — самый глубокий раздел: сид-фраза, способы входа, имя
  устройства, Подключения (режим раздачи, разрешение сотовой сети, kill
  switch (аварийный стоп), **Заблокированные локации** (Blocked
  locations) — страны, через которые вы никогда не хотите выходить),
  уведомления, удаление аккаунта и ссылка «Использует протокол UR» на
  [ur.xyz](https://ur.xyz) о том, как вознаграждаются провайдеры.
- **Проверить мой IP (Check my IP).** Открывает
  [ur.io/ip](https://ur.io/ip) — способ подтвердить извне приложения, что
  ваш трафик действительно выходит где-то ещё.
- **Постквантовая идентичность (Post Quantum Identity).** Панель ниже — и
  дорога к идентичностям провайдеров, с которыми вы соединены.

### Панель постквантовой идентичности

Панель внизу Аккаунта показывает идентичность вашего устройства как
идентикон (картинку, выведенную из ключа, — её легче окинуть глазом, чем
шестнадцатеричные цифры) с хешем ключа и идентификатором клиента под ней
(каждый копируется касанием), лист «Поделиться» и колоду пиров, с
которыми вы соединены, открывающую полный список. Панель сама называет
своё назначение: если ключ пира когда-нибудь выглядит иначе, чем
сохранённый локально, оператору посередине нельзя доверять. Это делает
слепоту оператора проверяемой.

Шифрование, которое она называет, — переключатель **Постквантовое
шифрование** в шторке подключения, включён по умолчанию, поэтому ваш
клиент запечатывает трафик напрямую до провайдера с первого же
подключения. Сеанс — взаимно аутентифицированный TLS 1.3 с ключами
**X25519MLKEM768** (классическая кривая, гибридизированная с ML-KEM от
NIST), поэтому оператор ретранслирует байты, которые не может прочитать.
Отвечающая сторона оппортунистична: каждая текущая сборка провайдера её
включает, поэтому один провайдер одинаково обслуживает и запечатанных, и
незапечатанных клиентов. Ваша сторона — нет. Пока переключатель включён,
клиент работает в режиме «закрыто при сбое», и провайдера, с которым не
удаётся запечатать сеанс, он пропускает, а не использует в открытую. Ни
одно приложение пока не показывает по подключению вердикта «запечатано или
нет». Ключи идентичности остаются Ed25519.

### Таблица лидеров

Рейтинги лучших провайдеров по перенесённым данным. Если вы раздаёте,
можете появиться здесь — публично или приватно, по вашему выбору.

### Поддержка

Называется «Свяжитесь с нами» (Get in touch): поле отзыва, звёздная
оценка, необязательный переключатель **Приложить логи к отзыву** (Attach
logs to feedback) и приглашение в Discord для живой помощи. Тарифов здесь
нет; апгрейд живёт на вкладке Аккаунт.

## Siri и Быстрые команды

Приложение регистрирует два App Intents: **Подключить URnetwork VPN**
(Connect URnetwork VPN) и **Отключить URnetwork VPN** (Disconnect
URnetwork VPN). Они появляются в приложении «Быстрые команды»
(Shortcuts), работают голосом («Привет, Siri, подключи URnetwork») и
встраиваются в автоматизации — например, подключаться, когда вы покидаете
домашний Wi-Fi.

## Старт без почты и фраза, которая его хранит

**Создать мгновенный аккаунт** (Create Instant Account) на экране входа
даёт настоящую, постоянную сеть в одно касание. Без почты, без телефона,
без пароля — как говорит сам экран. Охраняет её вместо этого
**сид-фраза**: список слов, который платформа генерирует и показывает вам
ровно один раз, на экране сразу после создания, а дальше держит только
хешированные формы. Сохраните её там и тогда. Это единственная дорога
назад с устройства, которое ещё не в системе. Пока такое устройство у
вас есть, Настройки → Сид-фраза чеканит свежую фразу и отправляет старую
в отставку. С сохранённой фразой аккаунт переживает переустановку или
новый iPhone с нетронутыми тарифом и историей — чего идентичность,
запертая в устройстве, не умеет никогда. Ничего второсортного в этом
нет: Настройки → Способы входа (Sign-In Methods) привязывают почту,
телефон, вход через Apple или Google или кошелёк к той же самой сети,
сохраняя ваш баланс данных и историю. Анонимность — в аккаунте, а не в
платеже: подписка, купленная в приложении, привязана к вашему аккаунту
Apple, код баланса — ни к кому.

## Устранение неполадок

### Одобрение конфигурации VPN

Первое подключение просит добавить конфигурацию VPN. Если вы отказались,
туннель не сможет стартовать никогда. Одобрите при следующей попытке
подключения или проверьте Настройки → Основные → VPN и управление
устройством, где конфигурация URnetwork должна быть в списке.

### Несколько профилей VPN и как приложение ими управляет

За переустановки и обновления iOS может накопить больше одного профиля
VPN URnetwork. Приложение этого ждёт: при подключении оно перечисляет все
профили, сбрасывает и повторяет любой, который не стартует, затем
переходит к следующему. Если туннель уже работает, оно усыновляет его по
RPC устройства, а не перезапускает. Сломанные профили сбрасываются или
удаляются, с потолком на удаления, чтобы уборка не могла разогнаться, и
каждая операция с профилем ограничена дедлайном, чтобы заклинивший
системный демон не подвесил приложение. Всё это автоматически. Описано
здесь только затем, чтобы список профилей в Настройках имел смысл, когда
вы на него посмотрите.

### «Не удалось загрузить профили VPN» (ошибка 12)

Если подключение падает с ошибкой **«Не удалось загрузить профили VPN»**
(Failed to load VPN profiles, код ошибки 12), системное хранилище
настроек VPN отказывается перечислять профили — состояние, которое
приложение не может починить изнутри. Чините руками:

1. Откройте Настройки → Основные → VPN и управление устройством.
2. Удалите конфигурацию (или конфигурации) VPN URnetwork.
3. Вернитесь в приложение и подключитесь. Вас попросят одобрить свежую
   конфигурацию, и туннель стартует начисто.

### Как здесь работает kill switch

Приложение поставляет переключатель **Kill switch** в Аккаунт →
Настройки → Подключения — тот же SDK-контрол, что у каждого приложения
URnetwork, выключенный, пока вы его не включите. Со включённым клиент
отказывается откатываться на ваш локальный маршрут, поэтому трафик
останавливается, а не утекает вне туннеля. Чего iOS ему не даёт — так это
принуждения на уровне ОС. Приложение не выставляет `includeAllNetworks`,
поэтому если туннельный процесс неожиданно умирает, iOS восстанавливает
обычную сеть, а не блокирует трафик. Опека, повторы и восстановление
профилей держат туннель здоровым, но приложение не просит ОС жёстко
падать в закрытое состояние. Если ваша модель угроз требует
гарантированно закрытой при сбое сети, планируйте с учётом этого.

### Чтение логов туннеля

Туннельное расширение пишет в единый системный журнал, а не в файлы.
Чтобы смотреть:

1. Подключите устройство к Mac и откройте **Console.app**.
2. Выберите устройство и в меню «Действие» включите **Включить
   информационные сообщения** (Include Info Messages) и **Включить
   отладочные сообщения** (Include Debug Messages). Интересные строки —
   на этих уровнях.
3. Отфильтруйте по подсистеме `network.ur.extension` или ищите
   «URnetwork».

### Сон и поведение в фоне

Туннель сконфигурирован с выключенным `disconnectOnSleep`: VPN остаётся
поднятой через сон устройства, а не пережимает рукопожатие при каждой
блокировке экрана. С двухпроцессной конструкцией она переживает и
смахивание приложения. Отключение — то, что вы делаете кнопкой, Siri или
удалением профиля.

## Куда дальше

- [Начало работы на iOS](/docs/getting-started-ios) — короткий путь.
- [Тур по macOS](/docs/tour-macos) — тот же движок в форме Mac.
- [FAQ](/docs/faq) и [обзор](/docs/overview) — о самой сети.
