Tours

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

11 мин чтенияView as markdown ↗

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

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

Попап расширения

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

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

НастройкаПо умолчаниюЭффектГлавная цена
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. «Ваш IP выхода» — множественное число, а закрепление по сайтам держит каждый сайт на одном выходе, поэтому ваш банк видит один устойчивый адрес.

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

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

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

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

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

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

Что сама сеть может и не может видеть, когда ваш трафик уже течёт, — читайте обзор. Модель угроз идёт дальше и называет отсутствующее запечатывание браузерного пути одним из собственных отказов.

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

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

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

  1. Убедитесь, что можете войти на 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): одно из сообщений выше, с починкой, описанной здесь.

Куда дальше