IOS VPN 开发 (一)
废话不多说了直接上干货 这个是基础 写给新手的 如果想进阶了解 socks的 还有更深层的详细见 第二篇文章吧(还没有写 ......)
1.现在个人VPN不需要证书了 以前是要像苹果请求的 反正很麻烦

2.导入框架 #import<NetworkExtesion/NetworkExtesion.h>
这个是iOS9 之后新出的 在之前是不允许我们使用的 iOS9之后提供给我们的最新框架 详见官方API
3. NEVPNManager 这个类很重要 官方文档是这样说的
NEVPNManager is used to create and manage VPN configurations and to control the resulting VPN tunnel connections.
大概意思就是用于创建和管理VPN配置和控制的VPN隧道连接的类.

4.官方给出了他的一个方法
loadFromPreferencesWithCompletionHandler: 就是这个玩意..... 加载方法
NEVPNManager初始化后,系统设置可以使用loadFromPreferencesWithCompletionHandler:加载方法:
[manager loadFromPreferencesWithCompletionHandler:^(NSError *error) {
// Put your codes here...
}];
5. 是时候配置一波vpn了 !!!! 累死了
IOS9 以后 有好几种配置方式 IPSEC IKEV1 IKEV2 ....等等等
下面我就用ikev2来举例了 其他的都差不多
NEVPNProtocolIKEv2 *p = [[NEVPNProtocolIKEv2 alloc] init];
p.username = @"[Your username]";
p.passwordReference = [VPN user password from keychain];
p.serverAddress = @"[Your server address]";
p.authenticationMethod = NEVPNIKEAuthenticationMethodSharedSecret;
p.sharedSecretReference = [VPN server shared secret from keychain];
p.localIdentifier = @"[VPN local identifier]";
p.remoteIdentifier = @"[VPN remote identifier]";
p.useExtendedAuthentication = YES;
p.disconnectOnSleep = NO;
第二行和第三行分别是 用户名和密码 密码是一个引用从钥匙链; 因此,您需要将你的密码存储在钥匙链,然后检索它。
第四行就是服务器地址了 .. 不多说 开发的应该都知道
第五行是身份验证
NEVPNIKEAuthenticationMethodNone:不要使用IPSec服务器进行身份验证。NEVPNIKEAuthenticationMethodCertificate:使用证书和私钥作为身份验证凭据。NEVPNIKEAuthenticationMethodSharedSecret:使用共享密钥的身份验证凭据。
本文就用共享密钥的方法验证的! 你也可以用证书验证 随便的.
剩下的几个属性 百度吧 也没什么可说的 ,,,, 时间比较紧

剩下的将我们写好的协议赋给我们的nevpnmanager 就大功告成了
最后废话不都说 上代码地址 : https://github.com/HZYDZT/HZYVPN
下一遍我会更仔细的说明一下 VPN 并且 写一下socks 感谢支持