Как отключить расширение Packet Tunnel при прекращении работы хост-приложения - PullRequest
0 голосов
/ 11 декабря 2018

Прямо сейчас я реализовал простое расширение Packet Tunnel, используя API-интерфейсы Network Extension для iOS 11+.Я хочу, чтобы приложение было только VPN, чтобы трафик из Моего приложения можно было направлять через наш VPN и прокси.Итак, мои вопросы:

  1. Как остановить туннелирование, когда пользователь переключается на другие приложения. Один из вариантов - использовать методы делегирования приложения -(void)applicationWillResignActive:(UIApplication *)application или -(void)applicationDidEnterBackground:(UIApplication *)application.
  2. Если пользователь непосредственно завершает приложение принудительным завершением работы, то также должен быть отключен VPN - мы можем использовать -(void)applicationWillTerminate:(UIApplication *)application, но когда я пытался это иногда, оно не работало должным образом.
  3. Что реализоватьобрабатывать тот же случай, когда приложение падает.- В качестве обходного пути я думал о реализации чего-то вроде механизма пинг-понга, в котором, если приложение активно, оно должно продолжать пинговать или обновлять любые общие данные, к которым будет обращаться расширение Packet Tunnel.Таким образом, в случае, если приложение останавливается или закрывается, Tunnel узнает о неактивности приложения и самостоятельно прекращает туннелирование.
  4. Чтобы поддерживать VPN-туннелирование активным, нам необходимо периодически обновлять токен, поэтому есть лиспособ обновить настройки VPN и немедленно отразить изменения, не перезапуская (остановите и снова запустите) туннель.

Пожалуйста, предложите правильные решения или обходной путь для вышеупомянутых сценариев.Это было бы мне очень полезно.

1 Ответ

0 голосов
/ 02 января 2019

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

Вы можете настроить VPN как VPN для каждого приложения и связать только свойприложение с VPN.Это должно соответствовать большинству ваших требований.Ограничением является то, что он может быть развернут только через решение управления мобильными устройствами (MDM).

Другой вариант может состоять в том, чтобы запустить VPN как стандартную VPN и обеспечить туннелирование всех приложений через нее, но вРасширение сети VPN использует NEPacketTunnelFlow :: readPacketObjects () , извлекает NEFlowMetaData из ответа NEPacket и использует параметр sourceAppUniqueIdentifier для идентификацииваше приложение.Затем вы можете закодировать обработку пакетов в расширении сети, чтобы данные из вашего приложения могли затем отправляться через VPN и прокси-сервер, а все остальные полученные пакеты могли быть затем перенаправлены их предполагаемым получателям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...