如果你的手机是 iPhone,如果你经常有看外网的需求,那么你对 Surge 一定不陌生。诚然,iOS Surge 作为 iOS SS 代理的鼻祖(需要指出,Surge 定位为网络调试工具,此处只表述了它的其中一个重要功能——代理),有其不可替代的地位。相比之下,Surge 的稳定性、丰富的可定义功能和有力的调试功能仍然成为同类应用中的佼佼者。文章不是为了打广告,有兴趣想了解的可以自行在 App Store 搜索关键字。假设你日常十分依赖 Surge ,那么每次配置或节点的更新一定带来不少的麻烦,本文将要教你,如果用技术解决这一难题。

分析

我们想象一下以下几个情景:

  1. 我购买服务商的 SS 服务,服务商时不时地增删或修改线路节点信息,我每次都要对所有节点检查一遍,把需要修改的内容手动更改;
  2. 我「订阅」了某大大的配置规则,每次规则变动都要把自己的个人信息(如 [Proxy]、[Proxy Group]、[SSID Setting] 等)手动复制然后粘贴到相应的位置;
  3. 我有新的的线路,但只能手动输入,一旦线路多起来,输入额外费劲。

那么解决的办法其实很简单,就是把上面原本需要手工修改的过程,用技术来实现。当然,用到的就是 Workflow。虽然也有很多第三方做这类文本替换的服务,但是线路信息是敏感的,无法探究该服务会否收集你的信息,显然让人心有余悸。而 Workflow 的内容公开,且在本地操作,安全性可由自己把握。

概述

本文不打算详述 Workflow 的制作过程,一、希望培养大家的动手能力,自己做的 Workflow 永远是最适合自己的,哪怕做不出来,也要懂得修改;二、对于 Workflow 而言,文本信息的替换实在小菜一碟,主要涉及的问题无非是如何匹配信息(正则表达式)和替换什么信息。所以,本文重点在于讲解该流程怎么解读,以便自己作一些小修改,以及作为「说明书」功能使用。当然,更重要的是,希望大家能学会看流程的逻辑,自己检查流程安全性问题。如前所述,线路信息是敏感的,你务必检查流程是否安全。

实现

流程实现以下几个功能:

  • 扫描线路二维码,把线路信息整合为 Surge 线路规范;
  • 摘取已有配置的线路信息;
  • 对已有配置自动替换个人信息。

下面将分步进行:

  1. 在 Workflow 中填入个人固定信息。一般有很多信息是需要按自己实际情况修改的,而这些内容往往都不会经常变动,例如 [General]、[SSID Setting]、[Host]、[MITM] 或一些自定义 [Rule] 规则。所以原则上,除了 [Proxy] 和 [Proxy Group] 外,其他段内容都可以按实际需要修改。哪些段内容需要自行修改因人而异,所以此处适应所有要求:

    • 更改特定段内容:当原配置没有该段内容时,会在最末尾贴上;当原配置有该段内容时,会完全覆盖该段原有内容。

      [Host]
      1.2.3.4 = 5.6.7.8
      ...
      [MITM]
      ...
    • 增加自定义规则:不会替换原 [Rule] 内所有规则,只会把自定义规则贴在 [Rule] 最前方。

      [Rule]
      DOMAIN, abc.com, Proxy
      ...
    • 删除特定段:当你不需要某段时,通过#去除原配置文件可能有的该段内容。

      #[MITM]
      #[SSID Setting]
    • 缺省:保留原配置文件该段内容,该段的有或无完全视原配置而定。

      如缺省 [General] ,则 [General] 内容跟随原配置
    • 完整自定义规则 Demo。

      [General]
      loglevel = notify
      bypass-system = 1
      ipv6 = 1
      skip-proxy = 127.0.0.0/24, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, localhost, *.local, e.crashlytics.com
      bypass-tun = 192.168.0.0/16, 10.0.0.0/8, 172.0.0.0/8, 127.0.0.0/24
      #[SSID Setting]
      #[Host]
      [Rule]
      DOMAIN,beta.itunes.apple.com,Proxy
      DOMAIN-SUFFIX,ryanis.top,DIRECT
      DOMAIN-SUFFIX,ryannn.com,DIRECT
      DOMAIN-KEYWORD,imager,Proxy
      [URL Rewrite]
      ^http://www.google.cn http://www.google.com.hk header
      (缺省[MITM])
  2. 扫描线路二维码。二维码内含 BASE64 编码的线路信息,解码后按 Surge 线路规范重新排列即可完成。此处需要手动输入扫描线路的次数。
  3. 摘取线路信息。在生成新配置的时候,如果你不需要修改旧配置的线路信息,便可直接批量提取旧配置的线路信息覆盖到新配置中。
  4. 输出配置文件。应用情景是从网上下载了一份新的配置文件,自动替换个人信息和线路信息。可结合 1. 的功能使用(也可以完全缺省,表示不替换任何段信息),同时需要把原配置文件保存在 iCloud 中。此处考虑到有些规则发布的地方是有校验的,简单从 URL 获取配置文件不一定适用,所以需要预先将其保存到 iCloud。如果你有需要,可以作对应修改。
  5. 仅把线路信息复制到剪切板。这适用于仅需要扫描线路信息,不需要生成整份配置文件的情景。

说明

  • Workflow 对 SSR 的二维码存在兼容性问题,暂不考虑支持 SSR 二维码解析,如果发现二维码解析失败,检查是否扫描了 SSR 二维码,并改用 SS 二维码再次扫描。
  • 需要指出,生成配置文件后仍然需要你进行必要的修改和配置,比如 [Proxy] 里的线路名称和 [Proxy Group] 配置。因为不大可能做到满足所有人的命名要求,所以这部分内容请自行增改。
  • 检查本流程是否安全主要在于检查是否含有上传到其他服务器的代码,通过自行验证你可以发现本流程绝无任何收集线路信息的可能,所有处理仅在本机和 iCloud 进行。如果你仍有疑惑,请联系或停用。
  • 本人对个人使用问题一概不负责,如发现有人恶意修改其中代码以盗取线路信息,请及时向我举报,并时刻警惕谨慎使用其他来源的 Surge 线路扫描工具或流程

附件

Workflow: Surge Configuration

V1.3 [2016-12-28 11:00]

  • New function "Copy Option" to help you "Copy Nodes Merely", "Copy Section [Proxy]" or "Copy Both [Proxy] and [Proxy Group]" when you choose to copy nodes.
  • Minor Optimization.

V1.2 [2016-11-27 13:00]

  • New function "Pick from Existed Config" to transfer existed nodes' informations.

V1.1 [2016-10-12 19:00]

  • New option to name your nodes manually while scanning.
  • Improve the general operation hints.

如有问题,欢迎留言或邮件咨询