Описание Проекта
Ищем опытного разработчика для решения конкретной сетевой проблемы в Android VPN-приложении. Приложение написано на Kotlin, а в качестве ядра для VPN-туннелирования используется нативная библиотека на Go, собранная из исходников sing-box с помощью gomobile.
Протокол подключения — VLESS через WebSocket с TLS.
Проект находится на финальной стадии, но мы столкнулись с проблемой, которую не можем решить самостоятельно: трафик корректно перехватывается системным VpnService, но не отправляется на удаленный сервер через sing-box.
Подробное описание проблемы
После запуска VPN-сервиса происходит следующее:
VpnService запускается успешно: Приложение получает разрешение, создает tun интерфейс с IP-адресом 10.80.0.1.
Трафик перехватывается: С помощью Wireshark (через tcpdump на эмуляторе) мы видим, что трафик от других приложений (например, браузера) корректно попадает в tun интерфейс. В логах Wireshark видны пакеты, где Source IP равен 10.80.0.1.
Конфигурация sing-box принимается: Нативная библиотека успешно инициализируется, принимает сгенерированный JSON-конфиг и получает файловый дескриптор tun интерфейса. В логах есть сообщение SingboxBridge (Go): Config parsed, service created.
Связь с сервером отсутствует: Несмотря на все вышеперечисленное, ни один пакет не отправляется на удаленный VPN-сервер (158.220.89.99). Фильтр ip.addr == 158.220.89.99 в Wireshark абсолютно пуст.
Ключевая ошибка в логах: В логах sing-box периодически появляется предупреждение: inbound/tun[tun-in]: open interface take too much time to finish! Это происходит примерно через 10 секунд после запуска движка.
Мы предполагаем, что основная проблема заключается в том, что движок sing-box по какой-то причине не может корректно "подцепиться" к tun интерфейсу, созданному VpnService, и начать обрабатывать перехваченный трафик.
Что уже было сделано:
Исправлены ошибки конфигурации: Изначально были проблемы с JSON-конфигом (неверные поля detour, address и т.д.). Текущая структура конфигурации была исправлена согласно документации.
Скорректирован MTU: Мы пробовали устанавливать mtu для tun инбаунда в 1400 и 1280, но это не привело к окончательному успеху.
Пересобрана библиотека: Нативная библиотека была пересобрана с необходимыми тегами (with_clash_api, with_wireguard_android и т.д.), чтобы исключить ошибки сборки.
Задачи для фрилансера:
Проанализировать предоставленные логи Android (Logcat) и файлы .pcap из Wireshark.
Изучить текущий код на Kotlin, отвечающий за генерацию конфигурации для sing-box (XrayConnectionImpl.kt) и запуск VpnService (MyVpnService.kt).
Выявить точную причину, по которой sing-box не обрабатывает трафик из tun интерфейса.
Внести необходимые изменения в JSON-конфигурацию или в код на Kotlin, чтобы трафик начал корректно направляться на удаленный сервер.
Продемонстрировать работоспособность решения (например, предоставив скриншот Wireshark с установленным TLS-соединением к серверу).
Требуемые навыки:
Обязательно: Глубокое понимание работы VpnService в Android.
Обязательно: Опыт работы с sing-box и/или его форками (Xray, Clash). Понимание его JSON-конфигурации, особенно секций inbounds, outbounds и route.
Обязательно: Опыт работы с сетевыми утилитами для отладки (tcpdump, Wireshark).
Уверенное владение Kotlin для Android.
Опыт работы с нативными библиотеками на Android (JNI, gomobile) будет большим плюсом.
Знание Go — желательно, но не обязательно, если вы сможете решить проблему на уровне конфигурации.
Ожидаемый результат:
Рабочее VPN-соединение. В Wireshark должны появиться пакеты, идущие от устройства на IP-адрес сервера 158.220.89.99 по порту 443, с установленным TCP и TLS соединением. Проблема с DNS-утечками должна быть решена как следствие правильной работы туннеля.
Готов предоставить полный доступ к логам, коду соответствующих файлов и .pcap файлам успешному кандидату. Пожалуйста, в вашем отклике кратко опишите ваш релевантный опыт и возможные гипотезы по поводу нашей проблемы.
Разделы:
Опубликован:
01.07.2025 | 08:53 [поднят: 01.07.2025 | 08:53]