Gemini заговорил, когда DNS забрал сервер
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. Шесть процессов, у каждого свой сетевой стек.
Красным — процессы, которые ходили с русским IP при проксировании по списку. Регион Google определяет по любому из них.
Проксирование по списку завернуло в туннель два процесса из шести. Остальные ходили с мобильной сети с русским IP, и Google честно отвечал, что я в России. Claude голосом работает, потому что это одно приложение без системного стека.
Частный DNS добавил второй слой. DoT в Android — системный трафик, он не попадает в VPN приложения и идёт с мобильной сети в обход туннеля, медленно. Каждый голосовой запрос начинался с ожидания этого DNS, а выданные им «зарубежные» адреса телефон потом пытался достать напрямую через оператора. Список процессов можно собрать полностью, но он хрупкий: после любого обновления Android что-то выпадет, и всё повторится.
03Сервер сам отправлял Google в Россию
Второе место было на входной ВМ, и до захвата трафика я о нём не думал. Google держит кеш-узлы внутри российских провайдеров, и их адреса попадают в geoip:ru. Правило «Россия напрямую» видело адрес Google, считало его российским и выпускало с русского IP входа. Gemini получал запрос из России даже тогда, когда телефон честно отправил его в туннель.
Лечится порядком правил: всё, что принадлежит Google по домену или по IP, теперь уходит через Германию раньше правил «напрямую». Это то же самое место, где живёт блок QUIC, и по той же причине важно, что за чем стоит.
Два правила добавлены 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 дал бы телефону адрес, до которого он не дойдёт.
Красный путь работал вечером 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, улетавший в пустоту. Что починил.