VPN останавливается, когда сеть переключается с Wi-Fi на мобильные данные. VPN подключается программно в iOS
Я использую Network Extension Framework для настройки и подключения VPN-сервера программно. Я могу запустить и остановить VPN. Я написал следующий код для настройки VPN в viewDidLoad.
NEVPNManager *manager = [NEVPNManager sharedManager];
[manager loadFromPreferencesWithCompletionHandler:^(NSError *error) {
if(manager.protocol == nil)
{
NSString *filePath = [[NSBundle bundleForClass:[self class]] pathForResource:@"VPNCert" ofType:@"p12"];
NSData *certData = [NSData dataWithContentsOfFile:filePath];
NSString *certPassword = @"password";
NSString *vpnUsername = @"username";
NSString *vpnPassword = @"password";
NSString *vpnUrl = @"VPN Server IP";
// This saves my credentials to the keychain and returns a persistent keychain reference
NSData *passRef = [self addVPNCredentialsToKeychain:vpnUsername withPassword:vpnPassword];
NEVPNProtocolIPSec *p = [[NEVPNProtocolIPSec alloc] init];
p.authenticationMethod = NEVPNIKEAuthenticationMethodCertificate;
p.serverAddress = vpnUrl;
p.username = vpnUsername;
p.passwordReference = passRef;
p.identityData = certData;
p.identityDataPassword = certPassword;
p.disconnectOnSleep = NO;
p.useExtendedAuthentication = YES;
manager.protocol = p;
manager.enabled = YES;
[manager setOnDemandEnabled:NO];
[manager setLocalizedDescription:@"VPN Network"];
[manager saveToPreferencesWithCompletionHandler:^(NSError *error) {
if(error)
{
NSLog(@"Load error: %@", error);
}
}];
}
}];
Я также написал код для запуска VPN при нажатии кнопки.
- (IBAction)buttonPressed:(id)sender {
NEVPNManager *manager = [NEVPNManager sharedManager];
[manager loadFromPreferencesWithCompletionHandler:^(NSError *error) {
if (!error)
{
NSError *startError = [[NSError alloc] init];
[[NEVPNManager sharedManager].connection startVPNTunnelAndReturnError:&startError];
}
}];
}
Чехлы работают на меня.
- Если я подключаю VPN к мобильным данным и переключаюсь на Wi-Fi, VPN не отключается.
- Также работает, если я подключаю VPN в мобильных данных и переключаюсь на Wi-Fi, а затем обратно на мобильные данные, VPN не отключается.
Проблема в
Если я подключаю VPN по Wi-Fi, а затем переключаюсь на мобильные данные, в этом случае VPN останавливается. Я хочу, чтобы VPN должен останавливаться только тогда, когда пользователь остановит VPN.
Отсутствуют ли какие-либо шаги при настройке VPN из-за остановки VPN?
Заранее спасибо.
1 ответ
Вам нужно будет добавить правила, чтобы сохранить соединение. Также включите onDemand [manager setOnDemandEnabled:YES];
стриж
let connectRule = NEOnDemandRuleConnect()
connectRule.interfaceTypeMatch = .any
let disconnectRule = NEOnDemandRuleDisconnect()
disconnectRule.probeURL = URL(string:VPNCredentialsModel.instance.vpnProbeURL()!)