Блог Маяка

VPN отключается сам по себе: виноват чаще телефон, а не сеть

Соединение стояло час, а потом само пропало. Или отвалилось через двадцать секунд после нажатия кнопки. Или ночью телефон лежал на зарядке, а утром значка защиты нет. Мы держим журнал таких случаев и можем сказать, что происходит на самом деле: в подавляющем большинстве наших замеров туннель обрывала не сеть и не сервер, а сам телефон — ради экономии батареи. Ниже — числа, четыре причины по убыванию частоты и то, что снимается двумя касаниями.

Мы делаем Маяк. Сторож живости с тактом в три секунды, честная пометка пути на экране и проверка связи с вердиктом словами. 7 дней бесплатно после подтверждения почты, карта не нужна.

«Отключился» — это три разных события

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

Что записаноЗа пять сутокЧто это значит
Человек нажал «Отключиться» 40 Рука человека. Ни причин, ни лечения тут нет.
Туннель пропал сам 9 Связь оборвалась без участия человека — это и есть предмет статьи.
Приложение полечило само 11 Туннель перезаложен своими силами; человек чаще всего ничего не заметил.
Удачных подключений всего 97 Фон, на котором эти числа надо читать.

Окно замера — 27–31 августа 2026 года. Девять обрывов на 97 подключений — это мало, и мы не собираемся делать вид, что построили статистику. Но у этих девяти есть форма, и она говорит больше, чем их количество. Вот сколько прожил каждый туннель до обрыва:

23 · 23 · 23 · 27 · 31 · 66 секунд, затем 27 минут, 3,5 часа и 11,6 часа.

Кучки две, и это две разные беды. Шесть обрывов из девяти случились в первые 66 секунд: туннель поднялся, но настоящего выхода за ним не оказалось — так бывает, когда соединение сложилось формально, а трафик через него не идёт (про это у нас есть отдельный разбор «Подключился, а интернета нет»). Три оставшихся — наоборот: связь работала часами и потерялась. Именно они и есть «VPN отключился сам по себе», и дальше речь про них.

Причина первая: телефон экономит батарею

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

Насколько это частая история, мы можем сказать по своим числам. В приложении есть проверка связи: человек нажимает кнопку, программа снимает несколько десятков фактов о телефоне и сети и выносит вердикт. Вместе с фактами она записывает и то, снято ли с неё ограничение фоновой работы. За 7–31 августа 2026 года таких проверок с настоящих телефонов — 158, с шести моделей.

МодельПроверокИз них с ограниченным фоном
Samsung SM-S948B10696
vivo V2454DA2824
Samsung SM-G955F1110
Samsung SM-S936B1010
OnePlus 8 Pro22
Google Pixel 611
Всего158143

143 проверки из 158. Три модели из шести не были свободны ни разу. И это не «включён режим энергосбережения» — его мы записываем отдельно, и во всех 225 отчётах диагностики (эти 158 плюс наши испытательные) он был включён ровно в одном, а «глубокий сон» застигнут в двух. Ограничение стоит просто по умолчанию, тихо, на обычном телефоне с полной батареей.

Второе число говорит уже не о состоянии, а о последствии. У проверки связи есть вердикт одним словом, и вот как они распределились на тех же настоящих телефонах:

ВердиктСколько раз
Всё работает11
Фоновая работа ограничена8
Туннель поднят, но данные не идут5
Сети нет вовсе3
Сервер выхода недоступен1

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

Как снять, за два касания. Настройки телефона → Приложения → нужное приложение → Батарея → «Без ограничений» (на разных прошивках пункт называется «Работа в фоне», «Не ограничивать», Unrestricted). В нашем приложении до этого экрана ведёт кнопка прямо из проверки связи — искать в настройках не нужно.

Отдельная история — фирменные оболочки. У Huawei и Honor есть список «защищённых приложений», у Xiaomi — «Автозапуск» и «Экономия энергии» с отдельным выбором для каждой программы, у vivo и OPPO — то и другое под своими именами. Системного переключателя «Без ограничений» там мало: пока приложение не внесено в фирменный список, оболочка усыпит его по своим правилам. Наш собственный замер это подтверждает: у vivo ограничение стояло в 24 проверках из 28.

Причина вторая: тишина в туннеле

Вторая причина устроена совсем иначе, и её не видно вообще никак: туннель молчит.

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

Лечение известно давно и стоит одну строку в настройках: PersistentKeepalive — крошечный служебный пакет по таймеру. Он ничего не передаёт, его задача — чтобы запись о маршруте оставалась свежей.

У нас в конфигах стоит 10 секунд, а не привычные 25, и причина не в осторожности. На наших выходах работает модуль AmneziaWG, который отличает свой служебный пакет от обычных данных единственным способом — по длине. Но он же дописывает в начало каждого пакета заполнитель, поэтому длина не совпадает никогда: сервер принимает собственный служебный пакет за данные и ждёт на него ответа, которого по протоколу быть не может. Через 15 секунд ожидания он начинает договариваться о ключах заново — и так по кругу. Простаивающий телефон переустанавливал ключи примерно раз в 15,6 секунды: лишняя работа радио, лишний расход батареи, лишний трафик. Любой пакет от клиента этот отсчёт снимает, поэтому мы поставили 10 секунд — меньше 15 с запасом на одну потерю по дороге.

Практический вывод для тех, кто настраивает клиент руками: проверьте, что строка PersistentKeepalive в конфиге вообще есть. Без неё соединение живёт ровно до первой долгой паузы. Что означает каждая строка конфига, мы разобрали отдельно — «Как настроить AmneziaWG».

Причина третья: сеть сменилась

Человек вышел из дома, телефон ушёл с Wi-Fi на мобильную сеть. Адрес телефона стал другим, и сервер об этом пока не знает: он продолжает отвечать по старому. Протоколы семейства WireGuard такое переживают — сервер запоминает новый адрес из первого же пакета, который пришёл с правильной подписью. Но для этого пакет должен уйти. Если телефон в этот момент спит (см. причину первую) или в туннеле тишина (причина вторая), связь восстановится не сразу, а с задержкой, которую человек прочитает как «отвалилось».

Это единственная причина, где ждать смысла нет: сменилась сеть — туннель надо перекладывать сразу. Наше приложение так и делает; в журнале это отдельный вид самолечения — перепривязка к новой сети, за окно замера он встретился один раз.

Сюда же — две мелочи, которые часто списывают на VPN. Первая: на некоторых прошивках Wi-Fi засыпает вместе с экраном, и любое соединение, а не только туннель, умирает при блокировке. Вторая: сети в гостиницах и аэропортах со страницей входа периодически сбрасывают клиента обратно на эту страницу — туннель при этом рвётся всегда.

«Постоянный VPN» и блокировка соединений без него

В самом Android есть два системных переключателя, о которых знают немногие. Настройки → Сеть и интернет → VPN → шестерёнка рядом с приложением:

  • «Постоянный VPN» — система сама поднимает туннель при загрузке телефона и восстанавливает его, если он упал;
  • «Блокировать соединения без VPN» — то, что в англоязычных статьях называют kill switch: пока туннеля нет, интернета у телефона нет вовсе.

Первый включать стоит почти всем. У второго есть цена, и её надо знать заранее: с ним телефон не сможет открыть страницу входа в гостиничный Wi-Fi (а без неё не будет и интернета, чтобы поднять туннель), и любая поломка на нашей стороне превращается для вас в полное отсутствие связи, а не в «сайты открываются напрямую».

Важная тонкость для нашего приложения. Системный «Постоянный VPN» запускает нашу службу, а поднимает ли она туннель — решает переключатель автоподключения внутри приложения. Включать нужно оба: только системный переключатель без автоподключения даст запущенную службу и не даст соединения.

Что делает приложение само

Всё перечисленное — беды, с которыми приложение обязано справляться без человека. Как это устроено у нас:

  • Такт раз в 3 секунды. Сторож живости живёт столько же, сколько туннель, и переживает закрытие экрана: свернули приложение — он продолжает работать. До конца июля 2026 сторож жил внутри экрана, и в шторке замирало последнее слово; мы намерили 42 секунды подряд, в течение которых человеку писали «Защищено» при выключенной сети.
  • Судит по фактам, а не по значку. По порядку надёжности: есть ли вообще физическая сеть; вырос ли счётчик принятых байтов с прошлого такта; свежо ли рукопожатие с сервером. Всё это — локально и бесплатно, без запросов наружу.
  • Лечит, но только по внешнему поводу. Правило одно: рабочий туннель перекладывают, когда случилось что-то новое снаружи (сменилась сеть, пропал трафик), а не когда просто прошло время. Автоматический перезапуск «на всякий случай» мы выкатывали дважды и дважды делали хуже.
  • Перебирает пути. Если связь не вернулась, приложение проходит ступени подключения по очереди — об этом отдельный разбор «Три пути до сети».

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

Чего эти числа не говорят

Самая важная часть, и мы предпочитаем сказать её сами.

  • Это не «статистика пользователей». 158 проверок связи с шести моделей и пяти учётных записей, девять обрывов за пять суток. Телефоны здесь — наши собственные и близких к проекту людей. Такой выборкой можно объяснять устройство, но нельзя обещать «у вас будет так же».
  • «Фон ограничен» ≠ «из-за этого и оборвалось». 143 из 158 — это состояние телефона в момент проверки, а не доказанная причина обрыва. Причиной фон назван в восьми случаях — это утверждение строже, и именно оно тут главное.
  • Три обрыва по 23 секунды пришли с трёх разных отладочных сборок — почти наверняка это один и тот же испытательный телефон, а не три разных случая.
  • Мы не знаем причину каждого обрыва по отдельности. Поле «повод» в нашем журнале сейчас во всех девяти строках говорит одно и то же — «заметило самолечение», то есть отвечает на вопрос «кто увидел», а не «что случилось». Это наша недоделка, а не свойство мира, и мы называем её здесь прямо.
  • Окно короткое. Журнал событий приложения заведён в конце августа 2026 года, проверки связи копятся с 7 августа. Через месяц у этих же строк будет другой вес.

Если после всего перечисленного связь всё равно рвётся — имеет смысл пройти четыре проверки за минуту и посмотреть, на каком именно шаге всё ломается.

Попробовать Маяк

Сторож живости с тактом в три секунды, честная пометка пути на экране, проверка связи с вердиктом словами и кнопкой лечения. 7 дней бесплатно после подтверждения почты, карта не нужна.

Аккаунт заводится прямо в приложении. Доступ открывает подтверждённая почта — 7 дней бесплатно.