最近使用Surge时遇到几个坑,相关设定在Surge中归类为杂项,因此这里总结下。

之前已经使用Surge+Whistle来解决工作中代理规则的切换问题,但是最近遇到192.168.x.x rule不生效,查看network发现也没有相关记录。一开始以为是Whistle问题,但是对比外网IP却OK,因此断定是surge代理没有将该请求分发到whistle代理的问题。最终定位skip-proxy配置规则影响。

解决办法对应去掉192.168.1.1/16配置即可。

该参数设定的域名/IP段Surge接收该请求并不会进行代理,而是直接跳过,比如127.0.0.1本地IP,没有代理必要,如果强行设定走代理,只会浪费性能。因此按需配置。

  1. 与上述skip-proxy根本区别见下图
  1. 隐藏VPN图标
  2. 增加bypass-tun = 0.0.0.0/8, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12
  • Surge Proxy server: Surge 功能开启后将自动代理 iOS 设备上所有的 HTTP/HTTPS ,同时对所有的 HTTP/HTTPS 代理使用同一个代理会话,以最高限度提高 Surge 的代理性能。Surge 可以通过 skip-proxy 指定哪些流量不被 proxy server 所代理
  • Surge TUN interface: iOS 上大部分应用程序的网络交互使用 HTTP/HTTPS,但也存在部分应用程序(如:iOS邮件客户端、Facebook客户端)等应用程序使用其他的通讯方式(如:SPDY等),这些应用无法被 Proxy server 所代理,这就需要使用更为底层的TUN interface 隧道方式。Surge 可以通过 bypass-tun 指定哪些数据流量不送 TUN interface 处理
  • 当前 Surge TUN interface 只能处理 TCP 流量,对于 ICMP、UDP 流量将被直接丢弃,因此需要通过配置* bypass-tun *选项来放行这些流量。

最近利用Surge抓包微信小程序中请求数据,发现这些请求在Surge下显示为TCP连接而并非HTTP请求。因此考虑如何能够解密抓包请求数据,社区咨询后发现还是有办法的。增加如下配置

force-http-engine-hosts=112.65.*.*

正常的TCP请求可以通过以上设定抓包解决,但微信中的不行,因为微信中的请求都进行了mmtls加密,即使设定为HTTP解析,对于请求体/响应体解码失败。

  • Surge支持本地DNS映射,这样此类需求就不需要独立APP了,比如SwitchHosts,iHosts,又或者直接操作/etc/hosts文件了。
  • 本地DNS映射的好处是,比如在开发中本地或局域网WEB服务,需要使用域名访问来测试效果,就可以用该设定来解决。

如图,我给内网服务及本地服务均配置了域名,这样就可以使用mymac.cn域名来访问了。

注意,Surge下skip-proxy配置项一般会有localhost和127.0.0.1等配置,这些配置的作用是Surge在执行代理规则时,对这些访问地址会采取跳过代理。而如上的DNS映射与此项并不冲突,因此localhost这种地址仍然work。

VMess协议节点需要配置alterId=0的话,Surge勾选该选项即可满足要求。如果alterId为其它值就没办法。

关于alterId为0的含义

现在 VMess 的 AlterID 设置为 0,则代表开启 VMessAEAD 头部加密,用于对抗重放和读取长度探测。

既然买了这些复杂的app,玩好才可以事半功倍。

--

--

--

Develop with pleasure!

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Alan He

Alan He

Develop with pleasure!

More from Medium

Bucket Sort

CERN Secrets And 666- Looking For The Invisible

𝐆𝐔𝐈𝐃𝐄𝐋𝐈𝐍𝐄.