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