移动端爱国上网的最佳实践

如果说 Mac 上有各种需求,难以找到通用解决方案的话,手机端就很简单了,我想绝大多数人都只有这几个需求:

  1. 对于移动端开发者,需要代理到 Mac 上,抓取应用的网络数据
  2. 某些应用会对客户端证书做校验, 比如 iTunes、微信支付等安全性较高的场景,无法通过代理打开
  3. 如果想科学上网,需要连接 VPN,这与 HTTP 代理冲突
  4. 系统默认只支持 VPN 连接,无法配置规则

以 iOS 系统为例,这些问题可以交给一个应用:Shadowrocket(又叫小火箭)来解决,这类应用已经在国内的 App Store 下架,需要使用美国账号购买。

打开 shadowrocket 以后,在首页点击右上角的加号,可以新建一个节点,也就是我们的代理服务器:

这里强烈建议给节点添加备注,原因稍后会讲。

自动选择代理

图片

接下来,我们需要选择路由模式,一共有四种。直连的意思很好理解,就是不走任何代理,相当于没用上 shadowrocket,可以理解为一种回滚方案。全局则表示 app 所有网络流量都走代理服务器,相当于使用了系统的 VPN。这两者功能都太单一,基本上不会使用。

配置模式和上文说过的 auto switch 差不多,都是实现了黑名单 + 广告屏蔽的功能:

  1. 广告屏蔽:对于某些专门用于投放广告的域名,直接屏蔽掉网络请求,从而起到去除广告的效果。
  2. 黑名单:列出需要科学上网的网址,走代理服务器。
  3. 其它:默认是直接连接。

我使用的是这份配置:https://raw.githubusercontent.com/lhie1/Surge/master/Shadowrocket.conf

它的主体结构可以分为三部分:

// 屏蔽广告
// 爱奇艺
DOMAIN-SUFFIX,ad.m.iqiyi.com,REJECT
DOMAIN-SUFFIX,afp.iqiyi.com,REJECT
DOMAIN-SUFFIX,api.cupid.iqiyi.com,REJECT
.......
// 优酷
......

// 科学上网
// 以 gmail.com 结尾的网址要求走代理,并且要求代理服务器做 DNS 解析
DOMAIN-SUFFIX,gmail.com,PROXY,force-remote-dns

// 直连
// BAT 等首页直连
DOMAIN-SUFFIX,baidu.com,DIRECT
DOMAIN-SUFFIX,qq.com,DIRECT
DOMAIN-SUFFIX,alipay.com,DIRECT

这套配置绝大多数情况下足够使用了,奈何客户端开发者经常需要对 APP 抓包,以前是通过修改系统代理实现的,现在直接修改配置文件就行了。

自定义配置

现在我们的需求变成了:

  1. 检查是否是广告,如果是广告则拒绝连接
  2. 检查是否需要科学上网,如果需要的话,走代理服务器
  3. 检查是否需要抓包,如果需要的话,走 Mac 的 Charles 代理代理代理
  4. 剩下的请求默认直连

其中第三四步的逻辑可以颠倒,也就是说可以默认走抓包模式,只有那些不能抓包的连接才直连。然而这种模式问题比较多,因为很多对安全性比较高的 app 或者网页,比如支付模块等等,都会检查客户端证书, 这种情况下通过 Charles 代理就无法访问了。

这种需求是无法使用默认的配置模式实现的, 因为它只能选择代理 or 直连,而我们的需求实际上是有两种代理,即 Shadowsocks 代理和 Charles 代理,这需要我们对配置文件做一些手动编辑。

注意到之前的每一条配置都是三段式:

规则类型,规则特征,连接方式

其中连接方式可以是 DIRECT(直连)、PROXY(代理)和 REJECT(拒绝),实际上这里还可以填写前文所说的节点标签。比如我把 VPS 的标签设置为 DigitalOcean,这里就可以改成 DigitalOcean,效果和 PROXY 一致。

有了这个大前提,我们可以新建一个 HTTP 代理,标记为 Mac Pro,然后把需要抓包的连接的代理方式设置为 Mac Pro 即可:

图片

配置文件更新为:

// 需要抓包的地址走 Charles 代理
DOMAIN-SUFFIX,api.example.com,MAC PRO// 屏蔽广告DOMAIN-SUFFIX,ad.m.iqiyi.com,REJECT// 以 gmail.com 结尾的网址要求走代理,并且要求代理服务器做 DNS 解析DOMAIN-SUFFIX,gmail.com,DigitalOcean,force-remote-dns// BAT 等首页直连DOMAIN-SUFFIX,baidu.com,DIRECT

场景模式 与 Widget

真正让我下定决心使用 shadowrocket 而不是其它应用的原因是它的场景模式。有时候,在 WiFi 模式和 4G 模式,甚至是不同的 WiFi 下,我们使用的配置文件并不相同。比如我在家的 WiFi 和外出 4G 模式下,并不需要抓包。一个场景就是一种数据接入方式和配置文件的集合,最神奇的是,场景可以自动切换。

比如我创建了三个场景,分别表示 4G、家庭 WiFi 和公司 WiFi,每个场景有自己的配置文件,通过 WiFi 名称来区分:

图片

这样当我回家以后,shadowrocket 切换场景,自然也就会切换配置文件,从而避免了手动切换。

iOS 配置总结

在 iOS 平台上,我们也遵循了不用系统代理,利用全局代理软件来控制代理的原则,通过 shadowrocket 提供的配置文件和规则实现了需求。同时 Widget、场景模式、iCloud 备份与二维码导出提高了软件的使用效率。另一个好用的工具就是 Widget,除了全局开关以外,可以快速在场景、代理、直连、配置四种路由方式中快速选择,这个相当于之前我们编写的切换系统代理的脚本。虽然用到的场景不多,但作为一种备用方案,还是不可或缺的。

图片

除此以外,shadowrocket 导入导出配置也很容易,默认使用 iCloud 同步数据,自己的节点和配置还可以用二维码的方式分享给别人,别人在使用时只要扫码即可导入。

总结

在 iOS 平台上,我们也遵循了不用系统代理,利用全局代理软件来控制代理的原则,通过 shadowrocket 提供的配置文件和规则实现了需求。同时 Widget、场景模式、iCloud 备份与二维码导出提高了软件的使用效率。

有了这些配置以后,各个软件的存在感反而不强了,因为几乎都会保持打开状态,交给配置文件去决定代理方式,大大提升了工作效率。

由于我没有使用安卓手机,所以暂时没有安卓平台的教程,读者可以自行搜索类似的代理软件并进行配置。

results matching ""

    No results matching ""