Перейти к содержимому

Блог

Трафик идёт мимо прокси, хотя он настроен: где граница

Прокси в профиле стоит, его проверка прошла зелёным, а сайт здоровается с вашим домашним городом. Зелёный цвет отвечает на один вопрос: узел жив и запрос через себя пропустил, а пойдёт ли через него весь трафик профиля, он не решает. Граница между «через прокси» и «мимо прокси» проходит в четырёх местах, и все четыре лежат на вашей машине.

Команда ARMANOS7 мин

Что доказывает зелёная отметка у прокси

Вы нажимаете «Проверить», и через прокси уходит запрос к стороннему источнику, который называет страну выхода. Источников в очереди четыре, и опрос кончается на первом ответившем. Ответ пришёл, значит узел жив, пароль подошёл и страна названа.

Дальше отметка не обещает ничего. Какие соединения вести через прокси, а какие в обход, решает сам браузер, и решает он по записи правила, а не по цвету кружка.

  1. 1

    Узел отвечает

    Запрос дошёл до прокси и вернулся с ответом.

  2. 2

    Страна названа

    Адрес выхода приходит от независимых источников по защищённому соединению.

  3. 3

    Охват не обещан

    По каким схемам пойдёт браузер, зелёный цвет не говорит.

Как одна запись уводит весь https

Адрес прокси доезжает до браузера одной строкой правила. Браузер понимает две разные записи этого правила, и разница между ними стоит вам всего настоящего трафика.

Запись вида http=узел:порт означает «через этот прокси ходить только по http». Каждый https-адрес браузер при ней открывает напрямую, с вашего домашнего адреса, и никакой ошибки вы не увидите.

Замер живым запускомЧто вышло
Правило, отданное браузеруhttp=127.0.0.1:64827
Запросов прошло через проксиодин: GET http://example.com
Куда ушёл httpsнапрямую, прокси его не видел
Та же дорога после правки записиhttp://127.0.0.1:64879
Что прокси увидел теперьGET http://example.com и CONNECT example.com:443

Опечатка в адресе равна выходу напрямую

Пробел по краям, схема внутри поля, логин прямо в адресе, кириллица в имени узла: такую строку браузер разобрать не умеет. Он не ругается, а просто идёт напрямую, и профиль выходит в сеть с вашего настоящего адреса, а точка у прокси остаётся зелёной.

Поэтому негодный адрес честнее встретить отказом ещё на кнопке запуска, до первого открытого окна. Профиль, который не открылся, обойдётся вам дешевле профиля, который открылся не с тем адресом.

  1. 1

    Пробел или путь в адресе

    Такую строку браузер не разбирает и прокси к ней не применяет.

  2. 2

    Вид связи не выбран

    Набранный адрес без вида связи пропал бы целиком, вместе с паролем.

  3. 3

    Профиль не стартует

    Отказ на старте честнее выхода в сеть с вашего домашнего адреса.

Выход через свой сервер идёт той же дорогой

Прокси у профиля может быть вашим сервером по SSH, и браузер об этом не знает. Рядом с профилем поднимается туннель, а в браузер уходит обычный socks5 на местном адресе.

Замок на негодный прокси про SSH знает отдельно и проверяет его своей веткой: если дорога запуска забудет поднять туннель, она упрётся в него и откажет. Тихо выйти напрямую с таким прокси нельзя ни одной дорогой.

Поэтому у выхода через свой сервер два условия вместо одного: имя узла и порт обязаны быть разобраны, и туннель обязан подняться до открытия окна. Не выполнено хоть одно, и профиль не стартует.

Видеозвонок уходит мимо прокси своим путём

Голос и видео в браузере идут не обычными запросами, а прямым соединением между двумя машинами. Такое соединение ищет кратчайший путь само и про прокси по умолчанию не спрашивает, потому что прокси для него это лишняя задержка.

Поэтому страница со звонком читает ваш домашний адрес, пока весь остальной трафик честно идёт через прокси. Закрывается это настройкой самого браузера, которая запрещает прямому соединению выходить мимо прокси.

Как звонок закрывается на нашей стороне

В режиме WebRTC по умолчанию профилю с прокси программа задаёт правило для прямых соединений: без прокси по UDP не выходить. ARMANOS Browser получает его в строке запуска, встроенный движок на окне профиля, и странице со звонком оно не видно, ей видно только отсутствие домашнего адреса среди кандидатов.

Правило следует режиму WebRTC профиля. «Настоящий» нарочно его не ставит, а расширение с правом privacy может его перебить; окно профиля называет такое расширение, а «Проверить отпечаток» мерит с расширениями профиля.

Диагностика сети («Сеть > Запустить диагностику», строка «Защита от утечки WebRTC») поднимает тот движок, которым открываются ваши профили, с пробным профилем за прокси-заглушкой и просит кандидатов у STUN-сервера на адресе этого компьютера в местной сети: запрос, дошедший до этого сервера, ушёл мимо прокси. Кандидаты разбираются по строке, и адрес вида «что-то.local» утечкой не считается: им браузер сам подменяет домашний адрес.

Если измерить не вышло, строка так и говорит: «Замерить не удалось». Этот ответ и ответ «Утечки нет: проверочный запрос не ушёл мимо прокси» это два разных ответа, и второй за первый она не выдаёт. При утечке строка говорит, что запрос ушёл прямо с этого компьютера, или называет адреса, которые ушли мимо прокси.

Домашний город приходит не от адреса

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

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

Что площадка читает у васОткуда это к ней приходит
Адрес в заголовке запросаот прокси
Имя часового поясаот профиля, по стране адреса
Список языковот профиля, по стране адреса
Прямое соединение звонкаот вашей машины, пока не запрещено
Поля связи у телефонаот движка профиля

Вердикт без вашего настоящего адреса не выносится

Профиль открывает стартовую страницу ARMANOS, и на ней стоит адрес выхода: тот самый, который увидит сайт. Рядом стоит вердикт, и он сравнивает этот адрес с вашим настоящим.

Адреса совпали, значит прокси отвалился и работать нельзя. А если свой настоящий адрес узнать не вышло, вердикта не будет вовсе: выдуманное «всё хорошо» опаснее пустого места.

  1. 1

    Адреса разошлись

    Прокси работает, и сайт видит не вашу машину.

  2. 2

    Адреса совпали

    Прокси отвалился, и сайт видит вас настоящего.

  3. 3

    Свой адрес неизвестен

    Вердикта нет: сравнивать не с чем, а догадка опаснее тишины.

Три поля связи выдают телефонный профиль

Телефон на Android отдаёт странице три поля связи, которых на рабочем столе нет вовсе. Площадка читает их одной строкой, и профиль без этих полей отвечает ей как настольный.

Появляться они обязаны втроём и со своими значениями. Хозяйские «wifi» и бесконечность в этих полях выдают телефонный профиль не слабее, чем их полное отсутствие.

Откуда берутся три поля связи

Вид связи телефонный профиль не тянет жребием, а выводит из задержки по порогам самого браузера: от 2010 мс это slow-2g, от 1420 это 2g, от 272 это 3g, ниже 4g. Пара «4g при задержке 300 мс» у настоящего браузера не встречается, и у нас её тоже не будет.

Потолок скорости берётся из той же таблицы, что у самого браузера: у LTE это 100, у Wi-Fi 11, 54 или 600. Два правила держат три поля вместе: потолок не ниже отдаваемой скорости, а подвид связи отвечает её виду.

Настольному профилю этих полей не дают вовсе, и это не упущение: у настоящего браузера на рабочем столе их тоже нет. Пустое поле здесь честнее правдоподобного.

Как проверить это у себя за пять минут

Откройте профиль и прочитайте адрес выхода на его стартовой странице. Потом откройте любую стороннюю страницу про ваш адрес и сверьте: страна обязана совпасть.

Дальше проверьте то, что идёт мимо обычных запросов: звонок и часы профиля. Разошлось хоть одно значение, значит площадка видит ровно ту же разницу, что и вы.

  1. 1

    Сверьте два адреса

    Адрес на стартовой странице профиля и адрес на любой сторонней странице.

  2. 2

    Проверьте прямое соединение

    Страница со звонком покажет, уходит ли оно мимо прокси.

  3. 3

    Сведите часы и язык

    Страна по часам и по языку обязана совпасть со страной адреса.

Чего это не утверждает

  • Это не утверждает, что прокси закрывает всё. Он меняет адрес, с которого приходит запрос, и не трогает ни ваше поведение, ни платёжные данные, ни историю аккаунта.
  • Замер выше сделан на поддельном прокси на своей же машине, а не на купленном адресе. Числа портов в нём случайные, а важно одно: куда ушёл https.
  • Поля связи телефона приходят только на свежем движке. На ядре браузера постарше профиль отвечает без них, и это лучше хозяйских значений, но площадке всё равно заметно.
  • Точка у прокси в списке профилей показывает, что прокси задан и настроен, а не что он сейчас отвечает. Она пересчитывается при каждой отрисовке строки из полей профиля и о прошлых запросах не помнит ничего.

Где это можно увидеть самому

Каждое число выше выходит из кода, который можно открыть и запустить.

Правило прокси строится одной строкой и накрывает все схемы
apps/desktop/src/main/main.js · apps/desktop/test/proxy-covers-https.js
Негодный адрес и невыбранный вид связи не проходят в запуск
apps/desktop/src/manager/renderer.js · apps/desktop/test/proxy-covers-https.js
Трафик профиля с паролем идёт через прокси в живом браузере
apps/desktop/test/прокси-с-паролем-живьём.js
Вердикт не выносится, пока свой настоящий адрес неизвестен
apps/desktop/src/start/start.html · apps/desktop/test/leak-verdict.js
Страну выхода профиль спрашивает у четырёх источников по защищённому соединению
apps/desktop/src/lib/exitGeo.js · apps/desktop/test/exit-geo.js
Три поля связи открываются только движку, который умеет подставить свои значения
packages/shared/src/index.js · apps/desktop/test/поля-связи-телефона.js
В режиме WebRTC по умолчанию профиль с прокси не шлёт мимо него ни одного запроса WebRTC ни на одном движке, замер со STUN-сервером на этом компьютере
apps/desktop/src/lib/forkEngine.js · apps/desktop/test/webrtc-строка-запуска-живьём.js · apps/desktop/test/webrtc-диагностика-живьём.js

Вопросы

Прокси зелёный, а сайт видит мой город. Продавец обманул?
Не обязательно: адрес продавца может работать честно, а мимо него уходить то соединение, которое браузер ведёт своим путём.
Почему https тут важнее обычного http?
Почти весь настоящий трафик сегодня идёт по https, поэтому правило, которое накрывает только http, не накрывает почти ничего.
Я вписал адрес с пробелом в начале. Что будет?
Ничего не будет: окно срезает пробелы по краям ещё до сохранения. Опасны не они, а опечатка внутри адреса: такую строку разобрать нельзя, и отказ тут лучше тихого выхода напрямую.
Нужно ли выключать звонки в профиле?
Нет, прямое соединение остаётся рабочим, ему просто запрещено выходить мимо прокси.
Стартовая страница не показала вердикт. Это поломка?
Нет, вердикт появляется только когда известны оба адреса, а без вашего настоящего сравнивать не с чем.
Можно ли посадить профиль на SOCKS5 с логином и паролем?
Да, пароль подставляется по дороге, а в строку запуска браузера он не попадает вовсе.

Посмотрите, что отвечает ваш браузер

Проверка читает 12 значений и никуда их не отправляет.