Android VPNService позволяет вам создать tun-устройство, и мы можем получить доступ к пакетам, направляемым на tun, в нашу программу.
Я использую C/NDK для доступа к этим пакетам.
Предполагая, что я пишу проприетарный протокол для получения пакетов от удаленного клиента vpn и передачи их в tun, могу ли я ожидать, что эти пакеты будут маршрутизироваться в Android и, возможно, передаваться через интерфейс и получать доступ к Интернету?
Например, я создаю маршрут в Android (через службу vpn) для 10.0.0.0/24 для настройки. Я выпускаю пакеты с IP-адресом источника 10.0.0.5, чтобы настроить, будут ли они проходить через ядро и достигать пункта назначения через Интернет. (Или эти пакеты просто возвращаются интерфейсу, поскольку tun является шлюзом по умолчанию!) Если они достигают Интернета после правильного подключения, могу ли я ожидать, что ответы (dst ip 10.0.0.5) попадут на интерфейс tun?
Или мне просто проверить?
Приветствуются любые идеи/предложения.
Заранее спасибо.
Похоже, это НЕТ.
Вот что я сделал.
Создал VPN на Android с C, используя NDK и немного Java, используя VPNService.
VPN-клиент работает нормально.
Когда я получил пакеты от удаленного CLient и ввел эти пакеты в туннель (с правильной маршрутизацией), эти пакеты не достигли цели.
Целью был мой Linux-бокс, и я ждал прибытия этих пакетов с помощью tcpdump.
Таким образом, внедрение пакетов, захваченных в другом месте, в туннель Android не работает. (Конечно, это тривиально в Linux с root-доступом)
Вот меры предосторожности, которые я предпринял перед вводом этих пакетов в туннель.
и, наконец, пакеты также не возвращаются в туннель.
Я могу подтвердить, что они удалены ядром.