# Браузерное расширение: тур

Расширение — это URnetwork внутри браузера, а веб-приложение ur.io — его
панель управления: один продукт, две половины. Эта страница — глубокое
погружение: прокси-механика в каждом браузере, органы управления с
заводскими умолчаниями, что kill switch (аварийный стоп) обещает и чего
не обещает, и что проверять, когда что-то ломается. О сети за всем этим —
кто такие провайдеры и что видит каждая сторона — читайте
[обзор](/docs/overview). Ссылки магазинов, вход и первое подключение — в
[начале работы в браузере](/docs/getting-started-browser).

Рамка, которую надо держать всегда: **это браузерный прокси, а не VPN.**
Прокси — посредник, который ходит на сайты за браузер, поэтому сайты
видят его адрес вместо вашего. Расширение настраивает собственные
прокси-параметры браузера, поэтому управляет ровно тем, что отправляет
этот браузер, — не больше. Покрыто: каждая вкладка и каждое окно этого
браузера, инкогнито тоже — на Chromium всегда, на Firefox после того, как
вы разрешите работу в приватных окнах. Не покрыто: другие браузеры, ваша
почтовая программа, системные обновления, всё остальное — как
незащищённое, так и неполоманное. Ставьте его в каждый браузер отдельно;
покрытие всего устройства — работа приложений URnetwork (Android, iOS,
macOS, Windows, Linux): тот же аккаунт, тот же kill switch, слоем ниже.

![Попап расширения](/docs-assets/connect-extension.png)

## Настройки одним взглядом

Расширение намеренно держит поверхность маленькой. Два контрола, оба в
попапе:

| Настройка | По умолчанию | Эффект | Главная цена |
|---|---|---|---|
| Kill switch | Вкл | блокирует трафик браузера при обрыве прокси, вместо отката на ваше прямое подключение | вкладки падают с ошибкой во время сбоя |
| Переопределение геолокации (Geolocation override) | Выкл | геолокационный API браузера сообщает город вашего выхода вместо вашей реальной позиции | сайтам, которым нужна ваша настоящая локация, требуется его выключить; для актуальности нужна открытая вкладка ur.io |

Оговорки к таблице:

- Двух переключателей из приложений здесь нет по замыслу.
  **Постквантового шифрования** (Post Quantum Encryption) нет, потому что
  у расширения нет сеанса клиент↔провайдер, который можно запечатать;
  полное исключение — в разделе «Сбор данных» ниже. И нет переключателя
  **Строгая анонимизация** (Strong Anonymization), потому что прямой
  режим принудительно выключен на размещённом прокси-устройстве, на
  котором работает расширение: ни одному провайдеру никогда не может
  достаться ваш реальный адрес.
- Kill switch переживает перезапуски браузера, поэтому сбой держит вас
  заблокированным, а не раскрытым, пока вы не отключитесь или путь не
  восстановится.

## Как это работает

Расширение — Manifest V3 в каждом браузере, но прокси-сантехника
различается, потому что различаются API браузеров:

- **Chrome и Edge** (и семейство Chromium вообще) используют API
  прокси-настроек. Расширение устанавливает сгенерированный PAC-скрипт —
  крошечный файл правил, с которым браузер сверяется, решая, куда идёт
  каждый запрос, — отправляющий трафик браузера на выделенные вам
  прокси-эндпоинты URnetwork. Установка его забирает конфигурацию прокси
  браузера — поэтому же два прокси-расширения не могут сосуществовать
  (см. устранение неполадок). Настройки ОС он не трогает никогда и
  отменяется чисто: отключение возвращает прямое соединение, удаление
  снимает захват.
- У **Firefox** нет эквивалентной передачи настроек, поэтому он
  использует `proxy.onRequest`: с расширением сверяются на каждый запрос,
  и оно отвечает целым списком выделенных прокси, поэтому один
  недостижимый прокси не бросает запрос на мели. `direct` добавляется в
  конец списка, только если вы выключили kill switch; со взведённым
  список кончается последним прокси, и полный сбой отказывает.

Версии для Safari нет, потому что в Safari нет этих API. На устройствах
Apple всё, включая Safari, покрывает приложение.

Браузинг выходит через небольшое окно провайдеров сразу: устройств
участников, чьи владельцы согласились и участвуют в
[протоколе UR](https://ur.xyz). «Ваш IP выхода» — множественное число, а
закрепление по сайтам держит каждый сайт на одном выходе, поэтому ваш
банк видит один устойчивый адрес.

URnetwork SDK едет внутри пакета расширения как WebAssembly. Выделение
прокси, список локаций и вызовы API — всё выполняется локально. Ничего
исполняемого не подтягивается на лету; что отревьюил магазин, то и
работает.

**Веб-приложение — панель управления расширением; они один продукт.**
Войдите один раз на [ur.io](https://ur.io) — и страница с расширением
говорят по документированному мосту: короткий протокол глаголов
(`SETUP`, `CONNECT`, `DISCONNECT`, `SET_LOCATION`, kill switch,
синхронизация геолокации) поверх `window.postMessage` — единственного
канала, который работает одинаково в Chrome, Edge, Brave и Firefox.
`SETUP` передаёт вошедшую сессию прямо в руки — поэтому настройка из
приложения никогда не спрашивает у вас код авторизации. Разделение труда
настоящее: расширение чеканит прокси-сессию и устанавливает браузерный
прокси, а приложение держит живое устройство. Смена локации в приложении
перенаправляет его без переподключения браузера, и каждая поверхность
показывает, что вы сделали в другой.

**Мост намеренно узкий.** Он работает только на страницах `ur.io` и
`app.ur.network`; никакой другой сайт не может говорить с расширением.
Один другой скрипт загружается на каждой странице — переопределение
геолокации, — и он остаётся инертным, с нетронутыми нативными функциями,
пока вы его не включите (ниже).

Для входа нужен аккаунт, поскольку использование учитывается по
аккаунтам: код на почту или телефон, один из SSO-вариантов ur.io, подпись
кошелька или код авторизации, сгенерированный на устройстве, где вы уже
вошли. Пути без почты здесь — кошелёк и код авторизации; Мгновенный
аккаунт (Instant Account) без почты в одно касание создаётся в
приложениях для телефона и десктопа, и расширение подхватывает этот
аккаунт, как любой другой. Бесплатный тариф — дневной лимит данных; Pro —
большой месячный ($5/месяц или $40/год; текущие цифры на ur.io/products).

## Семантика kill switch

Что он делает: если прокси-соединение обрывается при включённом kill
switch, расширение блокирует трафик браузера, а не даёт браузеру тихо
откатиться на ваше прямое подключение и раскрыть ваш реальный адрес
посреди сеанса.

- Он **включён по умолчанию** — единственная поверхность URnetwork,
  которая поставляется взведённой.
- Принуждение — собственное прокси-правило браузера: взведённое, оно не
  имеет лазейки «иначе иди напрямую», поэтому запросы отказывают, а не
  откатываются. Оно переживает перезапуски браузера. Вы возвращаетесь
  заблокированным, а не раскрытым.
- Если он сработал, останавливается только этот браузер (вкладки падают с
  ошибкой; попап показывает почему). Остальной компьютер через него и не
  ходил.
- Выключить его — значит отказывать в открытую: оборванное соединение
  возвращает вас к прямому браузингу, видимо в попапе, но беззвучно во
  вкладках. Приемлемо только там, где утечка — неудобство, а не вред.
- Предел охвата: он блокирует трафик *браузера* — всё, чем расширение
  может управлять; это не системный файрвол. Локальные адреса (localhost,
  принтеры) намеренно идут мимо, а WebRTC (голос/видео в браузере) может
  открывать соединения, игнорирующие прокси-настройки, — дыра каждого
  прокси-расширения; браузеры умеют его ограничивать.

## Переопределение геолокации

Два сигнала: ваш IP-адрес теперь говорит «Амстердам», но геолокационный
API браузера, отвечающий по сигналам ОС вроде ближайших Wi-Fi, всё ещё
сообщает, где ваше тело. Сайты, сравнивающие эти два сигнала, видят
противоречие. Переопределение чинит второй сигнал, чтобы обе истории
сходились:

- **Выключено по умолчанию.** Ничего не меняется, пока вы не включите его
  в попапе.
- Включённое, оно отвечает на `document_start` **во всех фреймах**,
  поэтому геолокационный API выдаёт локацию вашего выхода раньше, чем
  любой скрипт страницы успевает спросить, включая iframes, пытающиеся
  его обогнать. Координаты — город вашего самого старого подключённого
  провайдера, и до расширения они доходят по мосту приложения: расширение
  не держит собственного устройства, поэтому актуальность позиции
  поддерживает открытая вкладка ur.io.
- Выключенное, оно не говорит вообще ничего: страница сохраняет родную
  геолокацию, и ни одному сайту не вручается свежий сигнал, что у вас
  стоит расширение. Выключайте его, когда *хотите*, чтобы сайты видели
  вашу реальную локацию (карты, доставка).

## Проверки здоровья и деградированное состояние

Пока вы подключены, расширение раз в пять минут забирает лёгкий эндпоинт
(`my-ip-info` в API URnetwork) через прокси — пренебрежимо мало даже на
фоне бесплатного лимита. Это доказывает, что путь работает из конца в
конец, а не просто что настройки применились:

- **Два подряд сбоя**: статус становится **деградировано**. Вы всё ещё
  сконфигурированы, но течение трафика не подтверждено. Попап показывает
  индикатор нестабильности.
- **Три подряд сбоя**: автоматическое переподключение, с нарастающей
  паузой (2 с с удвоением до 30 с, пять попыток) и перевыделением прокси
  по необходимости.
- Успех в любой момент возвращает статус в «подключено». Льготный период
  после подключения не даёт статусу дребезжать, пока первое соединение
  устаканивается.

Деградировано — не утечка. Вы всё ещё нацелены на прокси, а со взведённым
kill switch мёртвый путь блокирует, а не раскрывает. Это не ошибка,
которую надо чинить; это расширение предупреждает вас рано — обычно о
капризной сети между вами и прокси.

## Сбор данных: никакого

- Листинг для Firefox объявляет это в манифесте, машиночитаемо:
  `data_collection_permissions` — **none**. Это заявление, принуждаемое
  магазином, а не обещание на странице о приватности.
- Расширение говорит только с API URnetwork ради выделения ваших прокси —
  те же вызовы, что делает любой клиент. Ни аналитики, ни телеметрии, ни
  сбора истории посещений нигде.
- **Разрешения на хосты различаются по браузерам, и не случайно.** В
  Chrome расширение запрашивает доступ только к API-хостам URnetwork
  (`api.bringyour.com`, `api-v4.bringyour.com`); прокси-API на PAC не
  нуждается в том, чтобы видеть ваши запросы. В Firefox расширению нужен
  `<all_urls>`: `proxy.onRequest` сверяется с расширением по каждому
  запросу, который может маршрутизировать, и Firefox требует для этого
  доступа к хостам. Более широкое разрешение там — цена прокси-API
  Firefox, а не захват данных.
- **Никакая третья сторона расширение не оценивала.** Android-приложение
  URnetwork прошло оценку Leviathan Security Group MASA AL2 в мае 2025
  года — фиксированный чек-лист безопасности Google для мобильных
  приложений, — а независимая фирма в апреле того же года провела тест на
  проникновение веб-приложения и API; ни то ни другое не покрывает
  расширение, и ни один независимый аудит не покрывает протокол и
  серверный код оператора. Что эта страница предлагает взамен —
  фальсифицируемо: эти разрешения читаются в вашей собственной
  установленной копии, ничего не подтягивается на лету, и исходники
  публичны. Заявления, которые можно проверить, а не сертификат.

Что держит сервис: ваш аккаунт и поштучный реестр счётчиков байтов по
устройствам (это лимиты и учёт провайдеров), никогда — назначения или
URL; адрес клиента, хранимый как односторонний хеш с ключом от вашего
блока IP, а не сам адрес; и приблизительный город из географического
запроса. Провайдеры выводят трафик, не узнавая ваш реальный адрес, и
видят только метаданные уровня интернет-провайдера (имена сайтов, никогда
не страницы и не пароли — те остаются запечатанными HTTPS); сайты видят
только выход.

Но будьте точны насчёт середины. У сети три режима, и браузер всегда
занимает только один из них:

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

Первая строка — позиция браузера, и контраст с приложениями резкий, а не
мягкий: они по умолчанию запечатывают сеанс клиент↔провайдер, а у
браузера там нечего запечатывать. И не может быть: браузер говорит на
собственном прокси-протоколе и не может выполнять движок сети, поэтому
ваше клиентское устройство работает удалённо внутри оператора, который
переводит между двумя протоколами, — запечатывание, начатое с такого
устройства, началось бы у оператора, той самой стороны, которую
запечатывание существует ослеплять. Реализация обменяла запечатывание на
саму возможность добраться до браузера. Гарантия здесь — про хранение, а
не про шифрование. Любой браузерный прокси вручает каждое назначение
эндпоинту, который набирает, поэтому оператор обрабатывает ваши в пути;
за этим стоит прокси-путь данных, который не пишет ни одного лога, — что
закреплено регрессионным тестом в открытом коде, — и реестр, в котором
некуда положить назначение. Переключатель **Строгая анонимизация** из
приложений так же отсутствует и так же не нужен: с принудительно
выключенным прямым режимом ни одному провайдеру никогда не может
достаться ваш реальный адрес.

Что сама сеть может и не может видеть, когда ваш трафик уже течёт, —
читайте [обзор](/docs/overview). [Модель угроз](/docs/threat-model) идёт
дальше и называет отсутствующее запечатывание браузерного пути одним из
собственных отказов.

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

### «Не удалось выделить ни одного прокси-подключения. Проверьте аккаунт» (Failed to provision any proxy connections)

Расширение запросило у API прокси-учётные данные, и ни одни не были
выданы. Почти всегда — состояние аккаунта:

1. Убедитесь, что можете войти на [ur.io](https://ur.io), и проверьте
   тариф. Обычная причина — исчерпанный дневной бесплатный лимит (он
   обновляется ежедневно).
2. Проверьте, не выбран ли лимит одновременных клиентов вашего тарифа
   другими устройствами; отключите одно.
3. Выйдите из расширения и войдите снова, чтобы обновить учётные данные.

### «Соединение потеряно. Переподключитесь» (Connection lost. Please reconnect.)

Проверки здоровья сбоили раз за разом, и автоматическое переподключение
исчерпало попытки. Вероятно, изменилась ваша нижележащая сеть (сменили
сеть, ноутбук уснул, враждебный Wi-Fi). Переподключитесь из попапа; если
повторяется в одной сети, эта сеть может блокировать прокси-порты.

### Другое расширение дерётся за прокси

Управлять прокси-настройками браузера может только одно расширение за раз
(в Chrome выигрывает установленное последним). Запустите другое VPN- или
прокси-расширение — и они перекидывают настройку туда-сюда, и оба
выглядят сломанными. Попап говорит об этом, когда теряет контроль, а
`chrome://settings` называет текущего держателя; отключите другое. В
Firefox проверьте другие установленные дополнения с разрешением на
прокси.

### Порталы авторизации (captive portals)

Wi-Fi отеля и аэропорта требует входа через страницу-портал *до* того,
как заработает интернет, а с поднятым прокси (особенно взведённым) портал
не может загрузиться. Застрять намертво нельзя: отключение локально и не
требует сети. Отключите расширение, завершите вход на портале, затем
подключитесь снова. Присуще каждому прокси и VPN, а не баг расширения.

### Чтение статуса

Индикатор состояния в попапе — самая быстрая диагностика:

- **Простой (Idle)**: вы вошли, но не подключены. Браузинг прямой.
- **Подключение (Connecting)** (спиннер): выделение прокси и применение
  настроек.
- **Подключено (Connected)**: сконфигурировано и недавно проверено.
- **Деградировано (Degraded)** (значок нестабильности):
  сконфигурировано, но проверки здоровья сбоят; ждите переподключения,
  если продолжится.
- **Переподключение (Reconnecting)**: идёт автоматическое
  восстановление; не мешайте.
- **Ошибка (Error)**: одно из сообщений выше, с починкой, описанной
  здесь.

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

- [Начало работы в браузере](/docs/getting-started-browser): ссылки
  магазинов, вход и первое подключение, включая заметку о приватных
  окнах.
- [Как работает URnetwork](/docs/overview): сеть за попапом и откуда
  берутся провайдеры.
- [FAQ](/docs/faq): тарифы, лимиты и вопросы аккаунта.
