Surge 高级设置

内容纲要

查看【Surge】专题可浏览更多内容

本章节主要讲的是 [General] 区块下的内容,所以示例都以 [General] 开头表明其在 [General] 下,但不是让你每个功能字段前都加上 [General] 字段。

网络优化

网络优化下的以下设置为默认强制开启:

  • 「并发 DNS 查询」
    Surge 会向所有 DNS 服务器并发进行请求,并使用最快的响应结果。
  • 「DNS 乐观解析(Optimistic DNS)」
    Surge 将沿用已过期的 DNS 结果缓存,同时进行新的 DNS 查询。当域名配置了过短的 TTL 时可有效减少不必要的等待时间。
  • 「TCP CDN 优化」
    如果域名包含多个 A/AAAA 记录,Surge 将并发向所有地址发起连接,最好选择速度最快的连接。

除了上述 3 个选项,还有几个选项是可选设置:

代理接管优先

使用 Surge 设置为系统代理的方式接管网络流量,该模式可降低开启 Surge 代理的额外开销,略微提升性能。但是部分 App 会检查系统代理设置,并在存在代理时拒绝工作。

开启后会将 compatibility-mode 修改为 1

[General]
compatibility-mode = 1
  • 0: Auto(旧版本 Surge 下等于 1,新版本下等于 3)
  • 1: System Proxy + VIF
  • 2: System Proxy Only
  • 3: VIF Only
  • 4: System Proxy (via VIF) + VIF

    不使用 127.0.0.1 的回环地址作为代理,使用 VIF 的虚拟代理地址,将产生额外的性能开销

  • 5: System Proxy + VIF (No Default Route)

    不声明为默认路由,但声明若干个小路由以覆盖所有地址(与 Surge Mac 增强模式行为相同)。
    这种配置下由于 VIF 不是主网络设备无法配置系统代理。部分应用在该模式下会认为 VPN 未开启以解决特殊兼容性问题,如 HomeKit Security Camera

增强版 Wi-Fi 助理

[General]
# 增强版 Wi-Fi 助理
wifi-assist = false

Surge 会在 Wi-Fi 网络不佳时尝试使用数据网络建立连接。该功能将对所有连接生效,请仅当使用不限量的数据流量时开启。

混合网络

无论 Wi-Fi 信号如何,总是尝试并发使用 Wi-Fi 和数据网络连接。

[General]
# 混合网络
all-hybrid = false

该选项可显著改善在弱 Wi-Fi 和网络切换时的网络体验。该选项对所有 TCP 连接和 DNS 查询生效。请仅当使用不限量的数据流量套餐时开启。

开启后,等同于对所有策略设置 hybrid = true,所有 TCP 连接在建立时均会并发尝试数据网络和 WiFi 连接,也就说如果不想对所有策略启用「混合网络」可以指定目标策略使用,如:

[Proxy]
HYBRID = direct, hybrid=true

但实际上可以不用这么写,因为 Surge 新增了两个内置策略:

  • HYBRID:等价于 HYBRID = direct, hybrid=true
  • NO-HYBRID :等价于 NO-HYBRID = direct, hybrid=off

对于 DIRECT 的「混合网络」应用,可以使用直接使上述两个内置策略。

至于其他策略,「混合网络」的参数说明如下:

  • hybrid=auto:默认,使用全局设置也就是使用 [General] 下的 all-hybrid 设置;
  • hybrid=onhybrid=true:对该策略启动并发连接;
  • hybrid=off:即使在 All Hybrid 或 WiFi Assist 开启时,有 WiFi 就不使用数据网络;

「Wi-Fi 助理」和「混合网络」的区别:

  • WiFi Assist:使用 WiFi 尝试建立连接后,如果一秒钟内仍未完成,则再使用数据网络尝试连接。选择最先完成的 TCP 连接;
  • Hybrid:直接并发建立两个 TCP 连接,选择最先完成的 TCP 连接;

游戏优化模式

开启后将在系统负载非常高,数据包处理出现延迟时,优先处理 UDP 数据包。

[General]
udp-priority = true

延迟测试

[General]
# INTERNET 测试 URL:使用网络诊断功能时访问的 URL
internet-test-url = http://wifi.vivo.com.cn/generate_204

# 代理测速 URL:测试代理策略时的 URL
proxy-test-url = http://cp.cloudflare.com/generate_204

# 测试超时(秒):Surge 将向该 URL 发送一个 HTTP HEAD 请求。测试只关心是否收到了返回数据,并不关心数据内容。仅支持 http:// 协议
test-timeout = 5

GeoIP 数据库

Surge 默认是使用由 MaxMind 创建的 GeoLite2 数据库,但是它的信息不是那么的准确,从 Surge iOS 4.5.0 开始可以自定义 GeoIP 数据的 URL,需要为 MaxMind 的格式。

早期的 Surge 没办法自定义 GeoIP 数据库的使用,所以就有了禁用 GEOIP,CN,DIRECT 规则然后使用自定义的 Ruleset 规则进行替代的用法。

[General]
geoip-maxmind-url = https://raw.githubusercontent.com/Loyalsoldier/geoip/release/Country.mmdb

在配置信息设置好 geoip-maxmind-url 后建议在图形界面打开「自动更新」开关(或者直接在图形界面中设置 URL 及开关)。

IPv6 支持

可以手动开启 IPv6 的完整支持,默认是关闭状态。

[General]
ipv6 = false
  • true:开启
  • false:关闭

IPv6 VIF

允许 Surge VIF 处理 IPv6 请求,当需要 Surge 处理直接使用 IPv6 地址的 raw TCP 请求时可开启。

[General]
ipv6-vif = auto

可选项:

  • off:完全关闭 IPv6 VIF;
  • auto:仅在当前网络支持 IPv6 时开启;
  • always:总是开启 IPv6 VIF;

如果设置为 auto,则仅当存在有效的 Internet IPv6 地址 (2000::/3) 时才会启用 IPv6 VIF。

远程控制器

远程控制器

允许 Surge 请求查看器或 Surge CI 进行管理控制。

[General]
external-controller-access = [email protected]:6170

其中 6170 为端口、password 为密码。

默认仅允许外部控制器通过 USB 进行控制。如果想要允许由 Wi-Fi 控制可以将 127.0.0.1 改为 0.0.0.0

HTTP API

HTTP API 可以让另一个 App 或者设备通过 HTTP API 控制 Surge 功能。

[General]
http-api = [email protected]:6171
  • password:密码;
  • 127.0.0.1:或 0.0.0.0,同 远程控制器;
  • 6171:访问端口;

兼容性

跳过代理

该选项将使得发往这些域名或者 IP 段的请求由 Surge VIF 进行处理(而不是 Surge Proxy),该选项用于修正和某些应用的兼容性问题。该选项一般只用于处理某些特殊的兼容性问题,并不能使请求绕过 Surge。(对于 Surge Mac,如果未开启「增强模式」,确实可以绕过)

[General]
skip-proxy = 127.0.0.1, 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, localhost, *.local, seed-sequoia.siri.apple.com, sequoia.apple.com, passenger.t3go.cn, www.baidu.com, yunbusiness.ccb.com, wxh.wo.cn, gate.lagou.com, www.abchina.com.cn, mbank.psbc.com, www.10010.com

例子

  • 若要指定一个域,请输入域名。如:apple.com
  • 若要指定域中的所有网站,请在域名前使用 *,如:*apple.com
  • 若要指定域的特定部分,请指定完整部分。如:store.apple.com
  • 若要通过 IP 地址指定主机或网络,请输入特定的 IP 地址(如 192.168.2.11)或地址范围(如 192.168.2.*192.168.2.0/24);

注意:如果你输入一个 IP 地址或地址范围,你只能在使用该地址连接到该主机时绕过代理,而不能在通过解析到该地址的域名连接到主机时绕过代理。

排除简单主机名

[General]
exclude-simple-hostnames = true

路由

默认情况下,部分请求可能不会被 Surge 接管。比如应用可以强制绑定物理网卡以绕过 Surge VIF。开启该选项后可以保证所有请求都由 Surge 所接管,没有泄漏,此时可将 Surge 当作防火墙使用。(需要 iOS 14 或更高版本)

如果还想让 Surge 处理所有本地网络的请求,可开启「包含本地网络请求」选项。

开启这些选项会引起严重的副作用,如 AirDrop、Xcode Debugger 等无法正常使用,请仅在需要的特定情况下开启。

包含所有网络请求

开启 include-all-networks 选项后,会强制所有网络数据由 Surge 处理,在未开启的情况下,网络切换时的网络请求有可能不被 Surge 处理,app 也可以通过强制绑定物理网络适配器的方式绕过。开启后所有除本地局域网外的网络流量一定都将由 Surge 所处理,不可绕过。该选项可用于构建防火墙。

[General]
include-all-networks = false

包含本地网络请求

include-local-networks 仅在 include-all-networks 开启时有效,将无视路由表,将所有本地流量也交由 Surge 所处理。

[General]
include-local-networks = false

Include APNS

让 Surge 接管 Apple Push Notification service (APNs) 相关请求。

仅应在有特殊需求时开启。正常情况下不应该开启以避免产生问题。

include-apns = false

Include Cellular Services

让 Surge 接管 VoLTE, Wi-Fi Calling, IMS, MMS, Visual Voicemail 等相关数据网络服务的请求。

仅应在有特殊需求时开启。正常情况下不应该开启以避免产生问题。

include-cellular-services = false

隐藏 VPN 图标

启动该选项后,Surge 运行时状态栏上将不会显示 VPN 图标。

[General]
hide-vpn-icon = true

启动该选项可能导致「Cannot allocate memory」系统错误,请谨慎使用。

UDP

当服务器不支持 UDP Relay 时的 UDP 行为设置

当代理服务器不支持 UDP Relay 时,相关的连接的行为设置,有 directreject 两个选项:

[General]
udp-policy-not-supported-behaviour = reject

如一些海外游戏和语音使用 UDP 协议,而所使用的服务器不支持 UDP Relay 时,设置为 reject 将无法连接,但如果需要调整该参数的值为 direct,请务必清楚了解同一目标主机名 TCP 请求与 UDP 请求的源地址不同所造成的隐私及安全风险。

UDP 代理转发测试指定

默认情况下是向 8.8.8.8 查询 apple.com,如果想要指定可以如下设置:

[General]
proxy-test-udp = [email protected]

高级

LogLevel

日志等级,默认为 notify

[General]
loglevel = notify

可选项有:

  • verbose
  • info
  • notify
  • warning

不建议在日常使用中启用 verbose,因为这会严重降低性能。

Show Reject Error Page

当遇到 REJECT 策略时显示错误页,这在之前讲「规则系统」的时候有提到。

[General]
show-error-page-for-reject = true

效果图:
Surge 高级设置

另外还可以使用 hijack-dns = *:53 来劫持所有的 DNS 查询。

Always Real IP

当 Surge VIF 处理 DNS 问题时,此选项要求 Surge 返回一个真正的 IP 地址,而不是一个 Fake IP。
DNS 数据包将被转发到上游 DNS 服务器。

例如由于游戏主机会使用 STUN 技术进行 NAT 穿透,需要进行一些额外的配置才能正常工作。

[General]
always-real-ip = *.msftconnecttest.com, *.msftncsi.com, *.srv.nintendo.net, *.stun.playstation.net, xbox.*.microsoft.com, *.xboxlive.com, *.logon.battlenet.com.cn, *.logon.battle.net, stun.l.google.com

Always Raw TCP Hosts

用于强行关闭对特定主机名的主动协议探测,与 force-http-engine-hosts 参数的书写方法一致

always-raw-tcp-hosts = example.com:80, <ip-address>:0

Hijack DNS

默认情况下,Surge 只对发送到 Surge DNS 地址(198.18.0.2)的 DNS 查询返回 Fack IP 地址。发送到标准 DNS 的查询将被转发。

如 Google 系智能硬件产品会无视 DHCP 配置强行使用 8.8.8.88.8.4.4,需要配置 Surge 强行劫持才可以正常工作。

[General]
hijack-dns = 8.8.8.8:53

TCP Force HTTP Hosts

使 Surge 将 TCP 连接视为 HTTP 请求。Surge HTTP 引擎将处理请求,并且所有高级功能都将可用,如截取、重写和脚本。

  • 支持通配符 *?
  • 使用前缀 - 排除主机名;
  • 默认情况下,只对 80 端口的请求进行处理(使用 example.com:443 指定端口或 example.com:0 表示所有端口);
  • <ip-address> 表示匹配所有主机名为 IP 地址的连接;
  • <ipv4-address> 表示匹配所有主机名为 IPv4 地址的连接;
  • <ipv6-address> 表示匹配所有主机名为 IPv6 地址的连接;

例子

[General]
force-http-engine-hosts = example.com:80, <ip-address>:0
  • -*.apple.com:排除所有发往 *.apple.com 上的 80 端口的请求;
  • www.google.com:对 www.google.com 上的 80 端口的请求强制使用 HTTP 处理;
  • www.google.com:8080:对 www.google.com 上的 8080 端口的请求强制使用 HTTP 处理;
  • www.google.com:0:对 www.google.com 上的所有端口的请求强制使用 HTTP 处理;
  • *:0:对所有主机名上的所有端口使用强制 HTTP 处理。

VIF Excluded Routes

Surge VIF 只能处理 TCP 和 UDP 协议。使用此选项绕过特定的 IP 范围,以允许所有流量通过。

⚠️ 注意:此选项仅适用于 Surge VIF。Surge 代理服务器处理的请求不受影响。将「skip-proxy」和「tun-excluded-routes」组合起来,以确保特定的 HTTP 流量绕过 Surge。
此选项可能导致系统错误 ENOMEM (无法分配内存)。这看起来像是 iOS 系统中的一个 bug。如果可能,请不要使用此选项。

[General]
tun-excluded-routes = 239.255.255.250/32

VIF Included Routes

默认情况下,Surge VIF 接口将自己声明为默认路由。但是,由于 Wi-Fi 接口的路由较小,一些流量可能无法通过 Surge VIF 接口。使用此选项可以添加较小的路由。

[General]
tun-included-routes = 192.168.1.12/32