Surge iOS Beta 更新日志
- 脚本编辑页面支持传入 $argument
- 在脚本列表页面执行脚本也会传入 $argument 的内容了
- 脚本的 $trigger 参数新增 "editor" 和 "http-api" 两个来源
- 修正 iOS 16 下 WireGuard 可能无法使用的问题
- 修正部分代理协议的流量统计中,未计算上传的 UDP 流量的问题
- 脚本编辑页面支持传入 $argument
- 在脚本列表页面执行脚本也会传入 $argument 的内容了
- 脚本的 $trigger 参数新增 "editor" 和 "http-api" 两个来源
- 修正 iOS 16 下 WireGuard 可能无法使用的问题
- 修正部分代理协议的流量统计中,未计算上传的 UDP 流量的问题
提示
我们的客服邮箱 support@nssurge.com 向 @icloud.com 域所回复的邮件,最近几日经常被拒绝,原因不明,如需联系请换用其他邮箱,请见谅。
我们的客服邮箱 support@nssurge.com 向 @icloud.com 域所回复的邮件,最近几日经常被拒绝,原因不明,如需联系请换用其他邮箱,请见谅。
Screenshot 2024-11-08 at 2.56.38 PM.png
15.1 KB
Surge Mac Beta 最新版本在状态栏图标加入了出站模式指示,如果不需要可在外观设置中关闭
Surge iOS Beta 更新日志
- 调整了 UI 编辑规则和代理策略的逻辑,现在即使是 UI 上不存在的配置参数,在编辑后如果类型不变,也可以保持了
- 调整了 FSI 错误的处理,增加 workaround,不再直接终止
- 对于不存在 Virtual IP 的 TCP 连接,现在在握手阶段就会直接阻断,不用再等到握手完毕。ICMP ping 也会响应 host unreachable
- 修正部分提示无法被转为横幅显示的问题
- 其他细节修正
- 调整了 UI 编辑规则和代理策略的逻辑,现在即使是 UI 上不存在的配置参数,在编辑后如果类型不变,也可以保持了
- 调整了 FSI 错误的处理,增加 workaround,不再直接终止
- 对于不存在 Virtual IP 的 TCP 连接,现在在握手阶段就会直接阻断,不用再等到握手完毕。ICMP ping 也会响应 host unreachable
- 修正部分提示无法被转为横幅显示的问题
- 其他细节修正
关于空密码的提示
接到部分用户反馈关于在代理协议中使用空密码的问询,为此对该问题进行一定说明:
1. “空密码”可以指代密码不存在(即为 null),或者是一个空字符串(即 '/0')。目前对应的 Surge 配置语法为,不配置 password 字段,或者 password=""。
2. 除了少数特例,绝大多数加密协议都不支持 null 密码,但是几乎所有协议都支持空字符串密码(因为密钥派生允许空字符串输入)。但是即使使用空字符串密码,也不会略过加密流程,性能与使用其他密码一致,等同于一个弱安全性密码。
3. 大部分协议都没有对这种情况进行特别注明。且在 UI 进行编辑时,并没有办法区分这两种情况。
因此,Surge 将在后续版本中统一关于空密码的处理行为,仅在部分明确不使用加密的协议中支持 null 密码(如 SS 的 none 模式),不再支持空字符串密码,请注意。
接到部分用户反馈关于在代理协议中使用空密码的问询,为此对该问题进行一定说明:
1. “空密码”可以指代密码不存在(即为 null),或者是一个空字符串(即 '/0')。目前对应的 Surge 配置语法为,不配置 password 字段,或者 password=""。
2. 除了少数特例,绝大多数加密协议都不支持 null 密码,但是几乎所有协议都支持空字符串密码(因为密钥派生允许空字符串输入)。但是即使使用空字符串密码,也不会略过加密流程,性能与使用其他密码一致,等同于一个弱安全性密码。
3. 大部分协议都没有对这种情况进行特别注明。且在 UI 进行编辑时,并没有办法区分这两种情况。
因此,Surge 将在后续版本中统一关于空密码的处理行为,仅在部分明确不使用加密的协议中支持 null 密码(如 SS 的 none 模式),不再支持空字符串密码,请注意。
我们依然经常会收到关于 Surge iOS 电耗问题的问询,再次解释一下该问题
1. 除非频繁触发脚本,否则 Surge 不会对电量消耗产生明显的影响。
2. 系统的电耗统计,对于 NE 类程序是不准确的,不应该以此作为参考。
3. 除开不准确,部分用户会因为电耗统计中 Surge 所占用百分比很高而认为 Surge 非常耗电。请注意该统计中的百分比,指的是这段时间内的电量消耗中 Surge 的占比,而非表示 Surge 消耗了如此多的电量。由于 Surge NE 常驻后台,如果这段时间内没有几乎没有使用过设备,那即使 Surge 只消耗了极少的电量,也会被统计为 100%。
我们也会定期测试最新版本 Surge 是否存在电量异常的情况,使用 5.14.1 版本在 iPhone 12 mini 上反复进行测试(仅 Wi-Fi),从剩余电量 100% 开始 24 小时后,无论 Surge 是否开启,剩余电量均为 72-74%,几乎属于测量误差范围。
1. 除非频繁触发脚本,否则 Surge 不会对电量消耗产生明显的影响。
2. 系统的电耗统计,对于 NE 类程序是不准确的,不应该以此作为参考。
3. 除开不准确,部分用户会因为电耗统计中 Surge 所占用百分比很高而认为 Surge 非常耗电。请注意该统计中的百分比,指的是这段时间内的电量消耗中 Surge 的占比,而非表示 Surge 消耗了如此多的电量。由于 Surge NE 常驻后台,如果这段时间内没有几乎没有使用过设备,那即使 Surge 只消耗了极少的电量,也会被统计为 100%。
我们也会定期测试最新版本 Surge 是否存在电量异常的情况,使用 5.14.1 版本在 iPhone 12 mini 上反复进行测试(仅 Wi-Fi),从剩余电量 100% 开始 24 小时后,无论 Surge 是否开启,剩余电量均为 72-74%,几乎属于测量误差范围。
最近的版本中我们暂停了新功能的开发,着重于处理一些遗留的低概率崩溃和内存泄露问题。目前最新的版本中相关问题都已得到了修正,是目前最稳健的一个版本,将于近日发布正式版本。
什么是内存泄露
简单说就是应用因为任何原因,向系统申请了一段内存后未正确释放,导致应用所使用的内存越来越高。
对于 Surge iOS,如果出现持续的泄露,内存占用会不断逼近系统限制,导致被终止重启。对于 Surge Mac,可以观察到内存占用不断提高。
内存泄露问题在计算机科学上一直是一个难题,即使是 iOS/macOS 的系统程序和内置应用,也经常会出现内存泄露的现象。这次修正的数个内存泄露问题也都十分隐蔽,比如当脚本使用 $httpClient 请求数据时,如果 H2 服务端在发送了部分数据后主动中断了该 stream,那可能会导致缓存的部分数据未能被正确释放,这种问题几乎只会在请求特定服务器时才会发生,所以难以被发现。
为此我们重新设计了新的内存泄露检测系统,用于分析这些低概率泄露问题,目前的表现相当良好,崩溃报告系统的数据显示,自 Mac 5.9.2 版本开始已经没有任何用户再遇到过可观测的内存泄露。
什么是内存泄露
简单说就是应用因为任何原因,向系统申请了一段内存后未正确释放,导致应用所使用的内存越来越高。
对于 Surge iOS,如果出现持续的泄露,内存占用会不断逼近系统限制,导致被终止重启。对于 Surge Mac,可以观察到内存占用不断提高。
内存泄露问题在计算机科学上一直是一个难题,即使是 iOS/macOS 的系统程序和内置应用,也经常会出现内存泄露的现象。这次修正的数个内存泄露问题也都十分隐蔽,比如当脚本使用 $httpClient 请求数据时,如果 H2 服务端在发送了部分数据后主动中断了该 stream,那可能会导致缓存的部分数据未能被正确释放,这种问题几乎只会在请求特定服务器时才会发生,所以难以被发现。
为此我们重新设计了新的内存泄露检测系统,用于分析这些低概率泄露问题,目前的表现相当良好,崩溃报告系统的数据显示,自 Mac 5.9.2 版本开始已经没有任何用户再遇到过可观测的内存泄露。
Surge iOS & Mac Beta 更新日志
优化了使用 Smart Group 作为 underlying-proxy (代理链)的表现,在先前的版本中由于架构问题,使用 Smart Group 作为一个代理策略的 underlying-proxy 时,Smart Group 无法发挥全部特性(如动态备用策略切换)。新版本中已经完全解决了这些问题。
注:部分用户询问 Snell 的 reuse 机制在 Smart Group 组中无法使用的问题,请注意这是特意进行的限制,因为 reuse 机制启动的情况下,Smart Group 无法准确评估该代理的表现,同时会导致备用策略切换无法正常运作。
优化了使用 Smart Group 作为 underlying-proxy (代理链)的表现,在先前的版本中由于架构问题,使用 Smart Group 作为一个代理策略的 underlying-proxy 时,Smart Group 无法发挥全部特性(如动态备用策略切换)。新版本中已经完全解决了这些问题。
注:部分用户询问 Snell 的 reuse 机制在 Smart Group 组中无法使用的问题,请注意这是特意进行的限制,因为 reuse 机制启动的情况下,Smart Group 无法准确评估该代理的表现,同时会导致备用策略切换无法正常运作。
Surge Mac Beta 更新日志
新功能:端口转发 Port Forwarding
配置样例
第一个参数为本地监听端口,第二个参数为转发目标,policy 参数选填,如果不填的话将使用标准代理匹配决定策略
该功能常见于使用 SSH 连接服务器 MariaDB 等开发调试场景。
新功能:端口转发 Port Forwarding
配置样例
[Port Forwarding]
0.0.0.0:6841 localhost:3306 policy=SQL-Server-Proxy
第一个参数为本地监听端口,第二个参数为转发目标,policy 参数选填,如果不填的话将使用标准代理匹配决定策略
该功能常见于使用 SSH 连接服务器 MariaDB 等开发调试场景。
我们在 iOS 3415 / macOS 3160 build 中,加入了一项针对 Snell V4 的优化,有望解决 Telegram 偶尔出现卡顿的问题,待观察是否确实有效。
关于 DNS 泄露
我们之前已经科普过 IP 泄露相关知识,近期又收到很多关于 “DNS 泄露” 与 “DNS ECS” 的问题。由于 “DNS 泄露” 在业界并没有一个统一且严格的定义,这里先归纳出两种常见情形,并分别说明其成因和应对措施:
所谓 DNS 泄露可以指:
1. 指的是在使用传统明文 DNS 时,链路中的运营商、防火墙、公共 Wi-Fi 提供者等都可能直接截获或监视你的 DNS 查询数据包,得知你访问的网站域名。
解决方法:
- 使用加密的 DNS 服务器(如 DoH)
- 使用全局代理模式,或者优先匹配的代理规则,使得不在本地进行 DNS 解析即可。
虽然理论上存在风险,然而实践中由于现在 app 存在大量网络请求,同时云服务器交叠复用,除非涉及的网站域名十分小众,否则也很难从 DNS 请求记录中获得有效信息。
2. 指的是访问的目标网站或者使用的 App自身通过技术手段,检测访问者的真实 IP。
具体技术原理是,构造一个随机的二级域名,通过 DNS 查询中的 ECS 机制,获取到查询者的 IP 地址,以此突破访问者的代理保护获得其实际 IP 地址。
但是,这种检测方法存在诸多不确定性,即使成功,也只能获取到用户的区域,而非真实 IP。
解决方法:
- 使用全局代理模式,或者优先匹配的代理规则,使得不在本地进行 DNS 解析即可。
- 使用不支持 ECS 的 DNS 服务器,如 CloudFlare 的 1.1.1.1。
- 自定义 DNS ECS 字段,提供虚假的 IP 地址也可以解决这个问题,但可能导致 CDN 调度混乱,出现解析错误、访问缓慢或完全连不上的情况。
我们之前已经科普过 IP 泄露相关知识,近期又收到很多关于 “DNS 泄露” 与 “DNS ECS” 的问题。由于 “DNS 泄露” 在业界并没有一个统一且严格的定义,这里先归纳出两种常见情形,并分别说明其成因和应对措施:
所谓 DNS 泄露可以指:
1. 指的是在使用传统明文 DNS 时,链路中的运营商、防火墙、公共 Wi-Fi 提供者等都可能直接截获或监视你的 DNS 查询数据包,得知你访问的网站域名。
解决方法:
- 使用加密的 DNS 服务器(如 DoH)
- 使用全局代理模式,或者优先匹配的代理规则,使得不在本地进行 DNS 解析即可。
虽然理论上存在风险,然而实践中由于现在 app 存在大量网络请求,同时云服务器交叠复用,除非涉及的网站域名十分小众,否则也很难从 DNS 请求记录中获得有效信息。
2. 指的是访问的目标网站或者使用的 App自身通过技术手段,检测访问者的真实 IP。
具体技术原理是,构造一个随机的二级域名,通过 DNS 查询中的 ECS 机制,获取到查询者的 IP 地址,以此突破访问者的代理保护获得其实际 IP 地址。
但是,这种检测方法存在诸多不确定性,即使成功,也只能获取到用户的区域,而非真实 IP。
解决方法:
- 使用全局代理模式,或者优先匹配的代理规则,使得不在本地进行 DNS 解析即可。
- 使用不支持 ECS 的 DNS 服务器,如 CloudFlare 的 1.1.1.1。
- 自定义 DNS ECS 字段,提供虚假的 IP 地址也可以解决这个问题,但可能导致 CDN 调度混乱,出现解析错误、访问缓慢或完全连不上的情况。
Surge Mac Beta 更新日志
新增选项 icmp-forwarding,默认开启
在开启增强模式时,为了降低对用户的干扰,Surge 会对所有 ICMP 数据包进行直接转发,这样不影响用户使用 ping 等工具。
但是这可能导致部分极端追求隐私保护的用户产生 IP 泄露,因此新增 icmp-forwarding 选项,可用于关闭该行为。
新增选项 icmp-forwarding,默认开启
在开启增强模式时,为了降低对用户的干扰,Surge 会对所有 ICMP 数据包进行直接转发,这样不影响用户使用 ping 等工具。
但是这可能导致部分极端追求隐私保护的用户产生 IP 泄露,因此新增 icmp-forwarding 选项,可用于关闭该行为。
配置行尾注释 #!REQUIREMENT 升级
- 现在提供
- 被该行尾注释禁用的内容,可以正常在 UI 显示和编辑了,在不满足条件时会显示为禁用状态,若开启将自动移除限制
- 现在提供
#!IOS-ONLY
, #!MACOS-ONLY
, #!TVOS-ONLY
三个简单写法- 被该行尾注释禁用的内容,可以正常在 UI 显示和编辑了,在不满足条件时会显示为禁用状态,若开启将自动移除限制
Surge Mac & iOS Beta 更新日志
[Host] 段支持使用 DOMAIN-SET 和 RULE-SET 进行配置以提高匹配效率。用例:
该功能仅为一些特别的需求所设计,绝大部分用户不需要考虑 DNS 区分解析,详见:https://kb.nssurge.com/surge-knowledge-base/zh/technotes/dns
[Host] 段支持使用 DOMAIN-SET 和 RULE-SET 进行配置以提高匹配效率。用例:
[Host]
DOMAIN-SET:https://example.com/domains.txt = server:https://223.5.5.5/dns-query
RULE-SET:https://example.com/rules.txt = server:https://223.5.5.5/dns-query
该功能仅为一些特别的需求所设计,绝大部分用户不需要考虑 DNS 区分解析,详见:https://kb.nssurge.com/surge-knowledge-base/zh/technotes/dns
Surge Mac Beta 更新日志
我们在先前的版本中将 STUN 服务器更换为了 stun.cloudflare.com,最近的测试中意外发现,该服务器并未完整实现 Surge 检测 NAT 类型所需要的命令,导致 Surge Ponte 配置时,会将所有网络类型报告为 Full Cone NAT (A)。
新版本修正了该问题,如果更新后发现 Ponte 报告 NAT 类型错误无法启动,说明当前网络确实不是 A 类,无法使用直接穿透模式。
我们在先前的版本中将 STUN 服务器更换为了 stun.cloudflare.com,最近的测试中意外发现,该服务器并未完整实现 Surge 检测 NAT 类型所需要的命令,导致 Surge Ponte 配置时,会将所有网络类型报告为 Full Cone NAT (A)。
新版本修正了该问题,如果更新后发现 Ponte 报告 NAT 类型错误无法启动,说明当前网络确实不是 A 类,无法使用直接穿透模式。