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=on
或hybrid=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 = password@127.0.0.1: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 = password@127.0.0.1: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 时,相关的连接的行为设置,有 direct
与 reject
两个选项:
[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 = google.com@1.1.1.1
高级
LogLevel
日志等级,默认为 notify
[General]
loglevel = notify
可选项有:
- verbose
- info
- notify
- warning
不建议在日常使用中启用 verbose,因为这会严重降低性能。
Show Reject Error Page
当遇到 REJECT 策略时显示错误页,这在之前讲「规则系统」的时候有提到。
[General]
show-error-page-for-reject = true
效果图:
另外还可以使用 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.8
和 8.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