NEVPNErrorDomain Ошибка 1 при попытке запустить сетевое расширение TunnelProvider

Я пытаюсь создать пользовательское сетевое расширение TunnelProvider, начав с шаблона XCode для TunnelProvider, а затем добавив код в хост-приложение, чтобы настроить его и запустить.

Я использую экземпляр NETunnelProviderManager для его настройки, и когда я вызываю saveToPreferencesWithCompletionHandler: я получаю успех (ошибка = 0). Однако, когда я вызываю startVPNTunnelAndReturnError: на (ненулевом) соединении, я всегда получаю следующую ошибку:

Домен ошибки = код NEVPNErrorDomain = 1 "(null)"

Я прочитал всю соответствующую документацию Apple, а также попытался сделать свою программу как можно более похожей на тестовую программу SimpleTunnel, однако я не могу определить, почему я получаю эту «1» (что, кажется, указывает на проблему с конфигурацией) .

Я видел несколько других людей с такой же проблемой в сообщениях по сети, но никаких решений.

У меня есть необходимые специальные права, и я знаю, что это не проблема, поскольку после использования надлежащего профиля подготовки я смог увидеть всплывающее окно, подтверждающее, что я хочу добавить VPN, когда я запускаю приложение, а затем оно добавляется в «Настройки» в разделе «VPN». .

Вот мой код, если это актуально:

NETunnelProviderManager * man = [[NETunnelProviderManager alloc] init];       
NETunnelProviderProtocol *protocol = [[NETunnelProviderProtocol alloc] init];

[protocol setServerAddress:@"aaa.bbb.ccc.ddd"]; // not actual value
[protocol setUsername:@"testuser"];

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];

NSData *data = [[NSData alloc] init];
[dictionary setObject:@"UUID" forKey:(id)kSecAttrService];
[dictionary setObject:data forKey:(id)kSecValueData];
[dictionary setObject:(__bridge id)kSecAttrAccessibleAlways forKey:(id)kSecAttrAccessible];
[dictionary setObject:(__bridge id)kSecClassGenericPassword forKey:(id)kSecClass];
[dictionary setObject:(__bridge id)kCFBooleanTrue forKey:(id)kSecReturnPersistentRef];

CFTypeRef passwordRef = nil;

OSStatus delStatus = SecItemDelete((__bridge CFDictionaryRef)dictionary);
OSStatus status = SecItemAdd((__bridge CFDictionaryRef)dictionary, &passwordRef);

[protocol setPasswordReference:(__bridge NSData * _Nullable)(passwordRef)];

man.protocolConfiguration = protocol;
man.localizedDescription = @"My VPN";
man.onDemandEnabled = false;  
man.enabled = true;

[man saveToPreferencesWithCompletionHandler:^(NSError *err) {
    NSLog(@"saved preferences: error = %@", err);
    [man.connection startVPNTunnelAndReturnError:&err];        
    NSLog(@"after start tunnel: error = %@", err);
}];

person Locksleyu    schedule 10.02.2016    source источник


Ответы (1)


Я обнаружил, что если я вызову loadFromPreferencesWithCompletionHandler: перед попыткой запустить туннель (но после saveToPreferencesWithCompletionHandler), эта ошибка исчезнет, ​​и я смогу немного продвинуться дальше.

Однако после этого я сталкиваюсь с большим количеством проблем. Так что пока я собираюсь немного больше проанализировать программу SimpleTunnel.

person Locksleyu    schedule 12.02.2016
comment
Как вы сказали, вы должны вызвать loadFromPreferencesWithCompletionHandler перед saveToPreferencesWithCompletionHandler (это написано в документации saveToPreferencesWithCompletionHandler). Какие ошибки вы получаете после этого? - person Roee84; 19.02.2016
comment
Хотя я получил несколько ошибок (хотя я не помню точных), теперь, когда я думаю об этом, самая большая проблема заключается в том, что мне пришлось бы реализовать много вещей, чтобы заставить туннель работать. Так что, начав с примера программы, я сэкономил много времени, так как в нем уже было все это, хотя мне пришлось (частично) учиться быстро. - person Locksleyu; 19.02.2016
comment
@Locksleyu Я впервые столкнулся с такой же проблемой, вы решили? Как вы сказали, я вызываю первый loadFromPreferencesWithCompletionHandler в случае успеха этого сохранения pref =› после запуска туннеля. что-то, что я делаю неправильно код 1 null при подключении к vpn-серверу"> stackoverflow.com/questions/47550706/ вот мой вопрос, не могли бы вы мне помочь? - person Shrikant K; 29.11.2017
comment
Можете ли вы опубликовать свой рабочий код, пожалуйста? Я столкнулся с той же проблемой при первом подключении, но он подключается по второму запросу. - person Mukesh; 29.11.2017