Если вы работаете с мобильными прокси, вы знаете эту боль: что-то ломается, и никто не может объяснить почему. Устройство находится в другой стране. Пользователь говорит «не работает». Никаких логов, никаких сообщений об ошибках, никаких трассировок стека. Просто тишина.
Именно это и произошло у нас — только мы успели это поймать до того, как большинство пользователей вообще заметило. Вот почему.
Нужны мобильные прокси?Создайте прокси прямо сейчас!
Наше Android-приложение не просто пересылает трафик. Оно выполняет полный набор проверок состояния сети — контролирует соединение, задержки, разрешение DNS, доступность по HTTP и HTTPS и многое другое. Эти проверки непрерывно выполняются против контролируемых серверов, поэтому мы в любой момент знаем состояние сети каждого устройства.
Именно так мы и обнаружили проблему: небольшой процент устройств начал не проходить проверки HTTPS, тогда как HTTP работал без сбоев. Ошибка возникала на этапе TLS-рукопожатия. Никакой ошибки, никакого сообщения о таймауте — просто соединение, которое молча уходило в никуда.
Без встроенной диагностики это было бы невидимо. Пользователи наблюдали бы периодические сбои прокси без какой-либо закономерности и объяснений. Мы бы только гадали.
Сбои были связаны именно с TLS 1.3. Соединения по TLS 1.2 через то же устройство, к тому же серверу, в то же время — работали нормально. TLS 1.3 — нет.
В итоге причиной оказалось сочетание двух факторов:
Современные TLS-клиенты отправляют значительно большие сообщения при рукопожатии, чем раньше. Go 1.23+ и Chrome 124+ теперь по умолчанию включают обмен ключами на основе постквантовой криптографии (ML-KEM). Из-за этого первое сообщение TLS-соединения — ClientHello — становится достаточно большим, чтобы превысить размер одного TCP-пакета. Ответ сервера в TLS 1.3 также отправляется одним большим блоком (вместе со всей цепочкой сертификатов), который может занимать 4–6 КБ для таких сайтов, как Google или Cloudflare.
Android-устройства под нагрузкой на память с трудом буферизуют эти увеличившиеся сообщения. Наше приложение работает как TCP-прокси — оно читает байты из одного сокета и записывает в другой. Когда на устройстве не хватает RAM, такая буферизация может молча давать сбои. Данные рукопожатия либо не пересылаются дальше, либо ответ не возвращается обратно. Без ошибки. Без сбоя. Просто ничего.
TLS 1.2 полностью избегает этой проблемы: его рукопожатие разбито на несколько небольших итераций обмена, и ни одно отдельное сообщение не достигает такого размера, чтобы вызвать проблемы.
Именно такие проблемы отличают надёжный прокси-сервис от раздражающего.
Без активной диагностики провайдер видел бы жалобы пользователей на случайные сбои HTTPS. Служба поддержки говорила бы «перезапустите приложение» или «проверьте подключение к интернету». Проблема то появлялась бы, то исчезала. Никто не связал бы её с версиями TLS или памятью устройства.
В iProxy мы автоматически обнаружили эту закономерность. Наша система диагностики определила, что TLS 1.3 даёт сбои, тогда как TLS 1.2 работает — на конкретных устройствах, в конкретное время. Это дало нам точное направление для поиска.
Разобравшись в проблеме, мы выпустили два исправления:
Умный откат TLS. Когда наша диагностика обнаруживает паттерн сбоя TLS 1.3 на устройстве, мы автоматически вносим корректировки. Трафик продолжает передаваться без каких-либо действий со стороны пользователя.
Автоматическое восстановление. Если устройство переходит в деградированное состояние, мы можем инициировать удалённый перезапуск приложения, чтобы снять нагрузку на память и восстановить полную работоспособность. Диагностика определяет необходимость этого и выполняет всё без участия пользователя.
Кроме того, мы нашли и устранили утечки памяти в нашем приложении, которые способствовали возникновению проблемы. Улучшение сразу стало видно на наших дашбордах мониторинга — частота сбоев TLS 1.3 по всему парку устройств значительно снизилась.
Написать приложение, которое пересылает TCP-пакеты, может каждый. Сложность — в том, чтобы знать, когда оно перестаёт работать, понимать причину и устранять проблему до того, как пользователь откроет тикет в поддержку.
iProxy мониторит состояние сети на каждом устройстве в режиме реального времени. Мы не ждём, пока пользователи сообщат о проблемах — мы обнаруживаем их, диагностируем и во многих случаях устраняем автоматически. Вот в чём разница между прокси-приложением и прокси-инфраструктурой.
Наша команда разработчиков опубликовала подробный технический разбор этого расследования. Если вам интересны детали — захваты пакетов, различия между Go и curl, аспект постквантовой криптографии — читайте здесь: Когда TLS 1.3 «тихо» умирает внутри вашего Android-прокси.
iProxy.online предоставляет инфраструктуру мобильных прокси в 100+ странах и через 600+ операторов связи. Наше Android-приложение превращает телефоны в надёжные прокси-серверы со встроенной диагностикой сети, автоматическим мониторингом состояния и удалённым управлением.