Нужно создать VPN соединение L2TP на OSX

Нужно создать VPN-соединение L2TP на OSX без Shared Secret

NSString *server = @"serverIP";
        NSString *username = @"user";
        NSString *password = @"pass";  
        const void* passwordData = [[password dataUsingEncoding:NSUTF8StringEncoding] bytes];
    [vpnManager loadFromPreferencesWithCompletionHandler:^(NSError *error) {
        if (error) {
              NSLog(@"Load config failed [%@]", error.localizedDescription);
                return;
            }

    NEVPNProtocol *p = (NEVPNProtocol *)vpnManager.protocolConfiguration;

    if (!p) {
        p = [[NEVPNProtocol alloc] init];
    }
    p.username = username;
    p.serverAddress = server;
    p.passwordReference = (__bridge NSData * _Nullable)(passwordData);
    p.disconnectOnSleep = NO;

    vpnManager.protocolConfiguration = p;
    vpnManager.localizedDescription = @"L2TPOverIPSec";
    vpnManager.enabled = YES;

    [vpnManager saveToPreferencesWithCompletionHandler:^(NSError *error) {
        if (error) {
            NSLog(@"Save config failed [%@]", error.localizedDescription);
        }
    }];

}];

NEVPNConnection *connect = [vpnManager connection];
NSError *error1;
if ([connect startVPNTunnelAndReturnError:  &error1]) {
    NSLog(@"connect");
} else {
    NSLog(@"not connect");
}

после сборки я получаю эту ошибку Missing protocol or protocol has invalid type, и другие 2 протокола используют туннель IKE, что вы можете посоветовать мне? Другой вариант - запустить терминал из кода и добавить эту строку networksetup -connectpppoeservice VPNConnect но я не знаю, возможно ли это

2 ответа

Я знаю, что это старый вопрос, но я здесь, чтобы отметить, что структура Network Extension (откуда NEVPNProtocol) не может работать с протоколами уровня 2 OSI, то есть L2TP. (https://forums.developer.apple.com/thread/29909)

Кажется, что сейчас (начиная с iOS 8 и OS x 10.10) на устройствах Apple рекомендуется использовать встроенные протоколы или реализовать свои собственные, но на L3 / L4: https://developer.apple.com/documentation/networkextension

(И поэтому нет общедоступного API для использования L2TP)

Нет, вам нужно использовать SCNetwork и Helper Tool (чтобы получить root-доступ). С помощью этой ссылки вы сможете создать протокол L2TP и подключиться к нему.

Это работает даже на последней версии MacOS 11 «Big Sure».

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