К содержанию
Тимур Шакирбеков.
← все тексты

Gemini заговорил, когда DNS забрал сервер

Тимур Шакирбеков 7 мин Заметки

Gemini на Pixel 11 Pro отвечает голосом с заблокированного экрана через мой домашний VPN. Неделю до этого он определял, что я в России, а после смены DNS висел на «Подождите». Помогли три переключателя на телефоне и два правила на сервере, и ни одно из них не про тот DNS-сервер, который советует интернет.

Сначала я сделал то, что сделал бы любой: добавил Gemini и сервисы Google в проксирование по приложениям, потом поставил в Android частный DNS из статьи в сети. Стало хуже. Параллельно другой чат с Claude предлагал добавить на сервер блок QUIC первым правилом. Правило уже стояло с 29 августа, а на первом месте оно сломало бы звонки Telegram.

Дальше разбор по слоям: почему голосовой ассистент не заворачивается в VPN как приложение, почему сервер сам отправлял Google в Россию, как первый тест положил весь интернет на телефоне и что в итоге стоит на входной ВМ.

6системных процессов в голосовом стеке Gemini, в VPN по списку попали два

668DNS-запросов за три минуты теста улетели в туннель на адрес, которого нет, по журналу xray

16DNS-запросов дошли до сервера в контрольном захвате, все получили ответ

25 464QUIC-соединений за день ушли в blackhole правилом от 29 августа, по журналу xray

01Три очевидных хода, и все три мимо

Схема у меня та же, что пережила субботний инцидент: клиент HAPP на телефоне, вход в Yandex Cloud с русским адресом, выход в Германии. Сервер сам делит трафик: российские домены и адреса идут напрямую, остальное через Германию. С этой схемой у Gemini было три очевидных хода.

Проксирование по приложениям. В HAPP выбрать Gemini и сервисы Google, остальной телефон оставить без VPN. Gemini всё равно видел Россию.

Частный DNS. Интернет советует поставить в Android частный DNS вроде dns.comss.one. Gemini начал активироваться голосом, но голосовое не отправлял; с заблокированного экрана хуже, чем из открытого приложения. В режиме «автоматически» активировался и висел на «Подождите». При этом Claude голосом работал без единой задержки.

Блок QUIC первым правилом. Совет из другого чата: на входной ВМ первым правилом маршрутизации поставить блок UDP-порта 443. Проверил живой конфиг: правило стоит с 29 августа пятым, за этот день оно отправило в blackhole 25 464 QUIC-соединения, и приложения давно ходят по TCP. Первым его ставить нельзя: звонки Telegram идут по UDP, часть релеев сидит на 443, и правила про Telegram стоят выше блока ровно для этого. Совет верный по сути, исполненный месяц назад и вредный по позиции.

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

02Голосовой Gemini — это шесть процессов, а не приложение

Голосом с Pixel разговаривает не приложение Gemini. «Окей, Google» ловит приложение Google, речь распознаёт Google Speech Services, аккаунт и регион отдают Play Services и Google Services Framework, контекст добавляет Android System Intelligence, и только потом запрос доходит до Gemini. Шесть процессов, у каждого свой сетевой стек.

Голосовой Gemini — шесть процессов, в VPN по списку шли два Красным — процессы, которые ходили с русским IP при проксировании по списку. Регион Google определяет по любому из них.

Проксирование по списку завернуло в туннель два процесса из шести. Остальные ходили с мобильной сети с русским IP, и Google честно отвечал, что я в России. Claude голосом работает, потому что это одно приложение без системного стека.

Частный DNS добавил второй слой. DoT в Android — системный трафик, он не попадает в VPN приложения и идёт с мобильной сети в обход туннеля, медленно. Каждый голосовой запрос начинался с ожидания этого DNS, а выданные им «зарубежные» адреса телефон потом пытался достать напрямую через оператора. Список процессов можно собрать полностью, но он хрупкий: после любого обновления Android что-то выпадет, и всё повторится.

03Сервер сам отправлял Google в Россию

Второе место было на входной ВМ, и до захвата трафика я о нём не думал. Google держит кеш-узлы внутри российских провайдеров, и их адреса попадают в geoip:ru. Правило «Россия напрямую» видело адрес Google, считало его российским и выпускало с русского IP входа. Gemini получал запрос из России даже тогда, когда телефон честно отправил его в туннель.

Лечится порядком правил: всё, что принадлежит Google по домену или по IP, теперь уходит через Германию раньше правил «напрямую». Это то же самое место, где живёт блок QUIC, и по той же причине важно, что за чем стоит.

Порядок правил на входной ВМ: DNS и Google стоят выше «Россия напрямую» Два правила добавлены 7 сентября, блок QUIC стоит с 29 августа. Поменять местами четвёртую и шестую строки — и звонки Telegram уйдут в blackhole.

04На телефоне три переключателя вместо списка приложений

Вместо списка процессов работает обратный подход: весь телефон в туннель, а исключать только то, что ругается на сам факт VPN. Российские сайты не страдают, сервер и так выпускает их напрямую с русского адреса: ya.ru через туннель отвечает за 0,18 секунды.

  • HAPP в режим Global, список приложений убрать.
  • Частный DNS в Android выключить. Именно выключить, не «автоматически», чтобы DNS пошёл внутрь туннеля.
  • В HAPP включить локальную DNS, а фоновой активности дать «без ограничений» и включить постоянный VPN. Без этого туннель спит, когда с заблокированного экрана звучит «Окей, Google», и ассистент активируется раньше, чем проснётся сеть. Это и было «активируется, но не отправляет».

Госуслуги после этого пишут «возможно, включён VPN» и пускают, Сбер не замечает ничего. Исключать не пришлось никого.

05Первый тест сломал всё: DNS улетел в пустоту

После трёх переключателей на заблокированном экране и в приложении появилось «проверьте подключение к интернету». X не грузился, Instagram грузился из кеша, Gemini висел. Захват на входной ВМ показал причину за минуту: 668 DNS-запросов за три минуты шли на внутренний адрес клиента HAPP, тот их не перехватывал, и они улетали в туннель, потом в Германию, потом в никуда. Телефон ждал ответа от адреса, которого не существует ни в одной сети.

Чинить это на телефоне негде. Починил сервер: xray теперь сам отвечает на любой DNS-запрос из туннеля, на какой бы адрес он ни был отправлен. Российские домены и всё в .ru, .su и .рф резолвятся через Яндекс с проверкой, что ответ действительно из geoip:ru, остальное через Google и Cloudflare с выходом в Германии. Только IPv4: у выхода нет IPv6, и ответ AAAA дал бы телефону адрес, до которого он не дойдёт.

DNS телефона теперь отвечает сервер, а не пустота в Германии Красный путь работал вечером 7 сентября ровно три минуты. Проверено с Mac тем же способом, что с телефона: google и instagram получают зарубежные адреса, ya.ru и vk — российские.

Контрольный захват на 150 секунд: 16 DNS-запросов дошли до сервера и получили ответ, бэкенд Gemini ушёл через Германию, попытки QUIC отбиты, приложения сразу пошли по TCP, X и Instagram тоже через Германию. На телефоне в этот момент: «а во, заработал».

06Что осталось и чего не делать

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

Первые день-два Gemini может отвечать чуть медленнее на самый первый запрос после долгого сна: Google пробует QUIC, получает отказ и переходит на TCP. Потом запоминает.

Батарея заметно не пострадает: туннель поднят в обоих режимах, шифруется только тот трафик, который реально идёт, и типичная доля VPN-клиента в статистике 2–5% в сутки. Есть даже маленький плюс: QUIC отбивается сразу, и приложения Google перестают долбить UDP повторами.

как ссылаться

Тимур Шакирбеков, «Gemini заговорил, когда DNS забрал сервер», shkrbkv.ru, 07.09.2026 — https://shkrbkv.ru/notes/gemini-pixel-vpn/
Gemini на Pixel видел Россию и висел на «Подождите». Виноват не DNS из интернета, а два процесса из шести мимо VPN и DNS, улетавший в пустоту. Что починил.