Использовать Android VPN в качестве VPN-сервера

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?

Или мне просто проверить?

Приветствуются любые идеи/предложения.

Заранее спасибо.

1
0
274
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, это НЕТ.

Вот что я сделал.

Создал VPN на Android с C, используя NDK и немного Java, используя VPNService.

VPN-клиент работает нормально.

Когда я получил пакеты от удаленного CLient и ввел эти пакеты в туннель (с правильной маршрутизацией), эти пакеты не достигли цели.

Целью был мой Linux-бокс, и я ждал прибытия этих пакетов с помощью tcpdump.

Таким образом, внедрение пакетов, захваченных в другом месте, в туннель Android не работает. (Конечно, это тривиально в Linux с root-доступом)

Вот меры предосторожности, которые я предпринял перед вводом этих пакетов в туннель.

  1. Гарантировано, что существует правильный маршрут обратно к интерфейсу (для исходного IP-адреса пакетов)
  2. Все пакеты правильно отформатированы (тот же код работает в Linux)
  3. Убедился, что мое приложение исключено из политики VPN.

и, наконец, пакеты также не возвращаются в туннель.

Я могу подтвердить, что они удалены ядром.

Другие вопросы по теме