iOS 7上进行Per App VPN设置(未能实验成功)

iOS7的新特性:支持Per-App-VPN,但是几个测试版下来都没发现有相关的设置。不过最后在开发文档里找到了相关的说明,但是这个其实是作为配置文件的API,并不能直接在设备上进行设置。而且操作极其繁琐,如果各位不愿意花时间去折腾的话可以等正式版iOS7放出后相关工具更新了再去设置。

再次说明一下本方法及其繁琐而且目前处于测试阶段没办法保证100%成功。另外本文仅作为技术研究,不提供任何代理服务。如需翻墙,请出门左转购买VPS不用谢。

目前是不明原因iOS7无法安装配置文件,应该是文件内容有错误。还需慢慢进行实验调整,不过思路应该是对的。

Per-App-VPN的官方说法:
屏幕快照 2013-09-12 23.22.15

Per-App-VPN有两种模式:
1.任何App包括Safari访问特定网址触发就打开VPN(也可以设置成手动提前打开)。
2.针对单个App进行代理,即App运行后自动开启VPN。
两个模式基本都差不多,就是设置的内容有些区别。其实你也可以把它理解为是一种路由表。

建议系统为Mac,需要工具:
1.Xcode任意版本(或者单独去找plist编辑器也可以)。
2.iPhone配置实用工具(Mac版本下载地址,目前版本3.5(289))。
3.iOS7设备一台。
4.可用VPN一个。
5.终端命令行。

制作方法:
打开iPhone配置实用工具,在配置描述文件下新建一个描述文件,填写好相关信息(配置文件名称和标识符等),在VPN下添加一个VPN负载,将你的VPN信息填上。
屏幕快照 2013-09-13 21.02.18
接着將该描述文件导出,然后在Finder里找到它,将其后缀名修改成.plist,然后使用Xcode打开(如果会编写XML的也可以用别的编辑器,但是咱觉得用Xcode较为直观一些)。
屏幕快照 2013-09-13 21.06.39
打开之后展开PayloadContent,发现会有Item 0(咱刚才填写了两个VPN所有有Item 0和Item 1,即图中黄框1和2内即咱创建的两个不同的VPN设置),这个就是刚才创建的VPN了,先不动,模仿着在下面继续创建一个Item,紧接着上面的进行命名(比如咱写的Item 2)。
接着就是仿照进行编辑了,对所有项目有兴趣的话可以直接去读该页面(可能会需要iOS开发者账号才能正常访问)。

首先根据文档中的说明,单个Item里必须有的项目有:
PayloadType
PayloadVersion
PayloadIdentifier
PayloadUUID
PayloadDisplayName
PayloadDescription
PayloadOrganization
以上几个项目,而这些都是能从前面创建好的VPN里复制出来的,其中要注意:
PayloadOrganization键值可为空。
PayloadUUID作为识别码是由一定随机算法得出的,简单的制作方法就是Mac下打开终端执行uuidgen之后得出的结果,这个必须得由机器创建,乱修改会导致无法使用的。
PayloadType,如果是上面说的第一种Per-App-VPN模式的话,应该填写的是com.apple.vpn.managed.applayer。而如果是第二种则应该是com.apple.vpn.managed.appmapping。
其他项目根据前面的Item来进行编辑就好了。

于是如果目前要做第一种模式的话,除了上面说的一堆必须的东西之外,接下来添加的也是非常关键的:
屏幕快照 2013-09-13 21.13.32
VPNUUID(String):这个就不是随机创建的了,这个对应的是你前面创建好的VPN里面的PayloadUUID,这个直接从前面的复制过来就行了。
SafariDomains(Array):这个就是触发的域名了,规则是比如咱填写的twitter.com对应的除了对应twitter.com之外,还对应api.twitter.com。但是不对应xxx.devtwitter.com。
OnDemandMatchAppEnabled(Boolean):如果设置为YES,那么触发时自动开启VPN进行连接。如果为NO,那么你得预先开启VPN,然后这些网站才能走代理。

第二种模式,同样需要刚才那堆必须的,但是之后的配置会有所不同:
屏幕快照 2013-09-13 21.46.50
AppLayerVPNMapping(Array of dictionaries):这个是父级….反正创建一个array下面全是Item的Dictionary就是了。
接着每个Dictionary里有两个项目:
Identifier(String):这个就是需要自动挂代理app的bundle ID,如图中我写的一样,官方Twitter.app的bundle ID就是com.atebits.Tweetie2,而Facebook.app的则是com.facebook.Facebook,这些可以在app的ipa文件解包之后从[app名称].app文件夹里的info.plist里的CFBundleIdentifier拿到。

最后就是将这个文件保存,并且修改后缀名为.mobileconfig,然后安装到iOS设备上。由于不能使用iPhone配置实用工具来安装(导入时会不识别刚才添加的这些项目,会提示要去除这些新增的键),Xcode是最好的选择,当然也可以使用Apple Configurator,不过最好的方法还是丢在一个网页空间上,用iOS设备去网页访问下载安装。

不过目前咱安装提示是这样:
20130913-215829.jpg
不知道哪一步出现了问题。

iOS 7上进行Per App VPN设置(未能实验成功)” へのコメントが 11 点あります

  1. 根据配置文档,appmapping 不能用在iOS上,10.9可以支持。估计这个被apple从ios7里拿掉了?

    App-to-Per-App VPN Mapping
    The App-to-Per-App mapping payload is designated by specifying com.apple.vpn.managed.appmapping as the PayloadType value.

    This payload is supported only in OS X v10.9 and later. It is not supported in iOS.

  2. 最近我也在研究这个,外国的文档看了好多,有个叫xenmobile的软件说是能制作ios 的per app vpn。下载后安装不上-_-
    官方文档有点矛盾呀,per app vpn那里写的支持ios7.0,但是app mapping那里写的只支持os x。没有app mapping,per app vpn怎么用呀-_-

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

:b1 :b2 :b3 :b4 :b5 :b6 more »

Note: Commenter is allowed to use '@User+blank' to automatically notify your reply to other commenter. e.g, if ABC is one of commenter of this post, then write '@ABC '(exclude ') will automatically send your comment to ABC. Using '@all ' to notify all previous commenters. Be sure that the value of User should exactly match with commenter's name (case sensitive).