iOS Surge 开启后无法使用部分国产 APP 或网络出错的解决办法

July 26, 2022

越来越多的国内 APP 都在产品层面禁止了开启代理使用。例如交通银行买单吧、部分地方的健康码和银行客户端。对于常年开启 Surge 这类代理工具的用户来说,这就非常恶心了。

对于遇到这种情况的用户来说,我的建议是不要让它们浪费你的生命,评估下这款应用是否有不可代替性,尽量直接切换到其他同类应用,并在 App Store 给个建议或差评然后将其卸载。截止目前 T3 出行和民生银行、上海银行等客户端我已经直接卸载了。

如果因为各种原因你暂时还得忍受这些应用,一个解决办法是开启 Surge 的 TUN Only 兼容模式:

[General]
compatibility-mode = 3

除了用配置文件开启外,你也可以直接在 Surge 的更多设置 => 兼容模式 里选择 TUN Only

这种方法有很多副作用,按照Surge 文档上的说法,开启 TUN Only 模式后会导致 HTTP 相关的高级功能失效,且性能会稍有下降。

另外根据我的实际体验,开启 TUN Only 之后会导致代理链不支持 HTTP3 UDP 流量,现在很多网站都默认启用了 HTTP3,而 HTTP3 是用 UDP 协议承载的,在国内网络环境下 UDP 流量直接发往目标代理服务器会导致网络性能极差,简而言之,一旦开启 TUN Only 你的代理链在很多情况下是无法生效的。

针对上述情况,可以使用 Surge 提供的模块功能以及 HTTP API 搭配 iOS 的「快捷指令」程序实现自动化开启和关闭 TUN Only 兼容模式,遗憾的是,这种方法也是有缺点的,因为快捷指令是在打开 APP 之后才会触发 Surge API 调用,大部分 APP 在打开的一瞬间就会触发网络请求,这时候还是会检测到代理报错。

如果你想试一试这种方法,可以参考下述操作方法:

首先添加以下配置到你的 Surge 配置文件开启 Surge 的 HTTP API 功能。

[General]
http-api = 你的密码@127.0.0.1:7170

打开 Surge 安装以下模块,你可以将以下代码上传到合适的地方再用 URL 导入,也可以直接新建本地模块。

#!name=TUN Only
#!desc=开启 Tun Only 兼容模式,解决某些 APP 不能正常连接的问题
#!system=ios

[General]
compatibility-mode = 3

一切准备就绪后,打开手机上的快捷指令 APP 开始创建自动化流程

Step 1: 打开「快捷指令」新建自动化

step 1

Step 2

20220726011955-step 2

Step 3: 选取要监听的 APP,可以选取多个

20220726011950-step 3

选好了下一步

Step 4: 继续新建操作,选择「获取 URL 内容」

20220726011957-step 4

Step 5: 填写请求参数

20220726011959-step 5

Step 6: 配置完毕

20220726011952-Step 7

到这里就实现了当打开 xxx APP 的时候自动开启 Surge 的 TUN Only 模式。如果要实现关闭 APP 时自动关闭 TUN Only 模式,你可以按照上述步骤再来一遍。

最近发现有用户在 Github 开源了一个用于优化 Surge 和某些应用兼容性的模块,可以给我们参考:关于通用设置增强模块功能

结束语

检测到开代理就不让用是一种非常恶心用户的做法,这种行为并不能实质性提升应用的安全性,只能说设计这套逻辑的相关 PD 和开发者都非常不专业。所以遇到这种表现的 APP,我更建议你通过 APP 的投诉入口或者客服电话进行投诉和建议。

如果你喜欢我的内容,请考虑请我喝杯咖啡☕吧,非常感谢🥰 。

If you like my contents, please support me via BuyMeCoffee, Thanks a lot.