1

需要在没有共享密钥的 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,但我不知道是否可能

4

2 回答 2

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)

于 2019-12-06T16:02:36.177 回答
0

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

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

于 2021-02-05T12:04:56.817 回答