需要在osx上创建VPN连接L2TP

时间:2018-02-01 13:56:28

标签: objective-c macos vpn l2tp

需要在没有共享密钥的情况下在osx上创建VPN连接L2TP

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 个答案:

答案 0 :(得分:0)

我知道这是一个老问题,但是我要在这里指出,网络扩展框架(NEVPNProtocol的来源)不能与OSI 2级协议L2TP一起使用。 (https://forums.developer.apple.com/thread/29909

现在(从iOS 8和os x 10.10开始)在Apple设备上的推荐方法是使用内置协议,或者在L3 / L4上实现自己的协议:https://developer.apple.com/documentation/networkextension

(因此,没有使用L2TP的公共API)

答案 1 :(得分:0)

不,您需要使用 SCNetwork 和 Helper Tool(以获得 root 访问权限)通过此链接,您将能够创建 L2TP 协议并与之连接。

这甚至适用于最新版本的 MacOS 11“Big Sure”