Оформить доступ
Лист 8 · Маршруты

Подключено, а часть трафика идёт мимо

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

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

Короткий ответ: почему трафик расходится

Потому что решение принимается не в момент подключения, а на каждом адресе отдельно — по профилю маршрутизации.

  • Исходов ровно три: через прокси, напрямую, блокировать. Правила расставляются по доменам и по IP-адресам.
  • Два из трёх исходов выглядят как «не работает». «Напрямую» — сайт ведёт себя как без доступа вовсе. «Блокировать» — не открывается совсем.
  • DNS живёт своей жизнью. Внешний и внутренний серверы имён настраиваются отдельно от корзин, и путаница здесь даёт тот же симптом.
  • Профиль может приехать вместе с доступом. Он передаётся заголовками подписки — разбор на листе про подписку.
  • Раздельный туннель по приложениям есть не везде. На Android и на компьютере он есть, на iPhone и iPad его нет — подробности ниже.

Как профиль делит трафик

Слева — открытый адрес, справа — три возможные судьбы запроса. Ни одна из них не сопровождается сообщением на экране.

Значок подключения показывает состояние туннеля, а не судьбу конкретного запроса: он останется зелёным и тогда, когда адрес ушёл мимо.

Раздельный туннель по приложениям: где он есть, а где его нет

Есть на Android и в настольной сборке. На iPhone и iPad его нет — это не спрятанная настройка, а отсутствующая возможность.

  • Что это вообще такое. Выбор, какие программы идут через туннель, а какие в обход, — независимо от того, какие домены прописаны в профиле.
  • Признак первый. В таблице возможностей у разработчика напротив раздельного туннеля в мобильной колонке стоит не «есть», а слово «Android».
  • Признак второй. В отзывах App Store эту функцию просят добавить и ссылаются на другой клиент, где она уже работает.
  • Почему это важно знать заранее. Человек с iPhone ищет переключатель, которого не существует, и уходит искать причину в маршрутах, сети и подписке. Разделять трафик на этой системе можно только правилами профиля — по доменам и адресам, а не по названиям программ.

Может ли профиль обновляться сам

Да. Профиль привязывается к адресу и перечитывается по расписанию — этот режим называется autorouting. Одноразовый импорт устроен иначе: он кладёт правила один раз и адрес источника не запоминает.

  • Разница задаётся командой. ://autorouting/ включает обновляемый профиль, ://routing/ — разовый импорт без запоминания источника.
  • Интервалы обновления: 12 часов, 24 часа (значение по умолчанию), 3 дня, 7 дней.
  • Проверка идёт чаще интервала — каждые 30 минут. Программа смотрит, не пора ли обновиться; сама загрузка происходит по расписанию.
  • Ссылка на GitHub чинится сама. Адрес вида github.com/…/blob/… при импорте и при каждом обновлении превращается в «сырой» raw.githubusercontent.com/… — вручную переделывать не нужно.
  • Данные можно передать параметром запроса://routing/add?data={base64}. Это запасной путь для совместимости, когда длинную строку неудобно передать в самом адресе.

Откуда берётся профиль, если источников несколько

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

  1. Заголовок autorouting в ответе подписки.
  2. Строка с адресом профиля в теле подписки.
  3. Заголовок routing.
  4. Строка с профилем в base64 в теле подписки.

Как выключить маршрутизацию целиком

Командой ://routing/off — она отключает встроенную маршрутизацию полностью. Выбранный профиль при этом не стирается: он сохраняется и возвращается обратно, когда маршрутизацию включают снова.

Что происходит, если туннель упал

Трафик обрубается. Это kill switch: при падении туннеля программа не пускает данные в обход, вместо того чтобы молча вернуть вас в открытую сеть.

  • Побочный эффект знакомый. Интернет перестаёт работать целиком, и это выглядит страшнее, чем «часть сайтов не открывается». Зато не бывает незаметной утечки в обычный канал.
  • Это не то же самое, что три корзины. Корзины решают, куда отправить запрос при живом туннеле. Kill switch срабатывает, когда туннеля уже нет.

Фрагментация TLS-приветствия: зачем резать первый пакет

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

  • Настройка живёт не только в приложении. Те же три величины передаются прямо в ссылке отдельного сервера — параметрами fragmentPackets, fragmentLength и fragmentInterval. То есть у разных серверов из одной подписки настройки резки могут отличаться.
  • Продавец доступа тоже вмешивается. Он может задать фрагментацию, подмену адреса подключения (resolveAddress, hostHeader) и предварительное разрешение имени сервера через DoH.
  • И может её потерять. При превышении тарифного лимита провайдера туннель продолжает работать, а часть надстроек отключается — тема оформления, фрагментация и подмена адреса. Разбор этого механизма — на листе про отпечаток устройства.

Что ещё управляет подключением, кроме правил

Три вещи, о которых чаще всего спрашивают отдельно.

  • Always-On на Android. Режим, в котором туннель поднимается сам и держится постоянно, без ручного включения после перезагрузки.
  • Раздача через хотспот на Android. Через один подключённый телефон могут выходить и другие устройства рядом.
  • Виджеты и быстрые команды. Подключение и отключение без открытия приложения. В настольной сборке вместо виджета — значок в трее.

Частые вопросы про маршруты

Значок подключения горит, а сайт не открывается — это поломка?

Не обязательно. Значок отвечает за состояние туннеля, а судьба каждого адреса решается профилем: он мог отправить этот адрес напрямую или в блок. Такой же жалобой — «горит значок, что впн работает, а по факту нет» — полны отзывы в магазинах, но отзыв фиксирует симптом, а не причину.

Почему на iPhone не получается пустить через туннель только одно приложение?

Потому что раздельного туннеля по приложениям там нет. Он работает на Android и на компьютере. На системах Apple разделять можно только правилами профиля — по доменам и адресам.

Правила обновляются сами?

Если профиль привязан к адресу — да. По умолчанию раз в сутки, доступны также 12 часов, 3 дня и 7 дней, а сама проверка выполняется каждые полчаса. Профиль, добавленный разовым импортом, не обновляется: у него нет запомненного источника.

Правила приезжают вместе с подпиской или их нужно задавать самому?

Может быть и так и так. У подписки есть заголовки, которыми продавец присылает профиль или адрес профиля. Если пришло сразу несколько источников, побеждает старший по порядку: заголовок с обновляемым профилем сильнее строки в теле подписки.

Соединение рвётся при запуске одного конкретного приложения — это маршруты?

Проверяемого ответа тут нет. Такая жалоба в отзывах App Store есть — с указанием конкретной программы и оговоркой «на всех серверах», — но официального разбора этого случая у разработчика не опубликовано.

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

Можно ли выключить маршрутизацию совсем?

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