内容纲要

🗂 | 查看 Surge 专题可浏览更多内容


代理策略

「代理策略」配置在配置文件的 [Proxy] 下面:

[General]

[Proxy]
Local = socks5, 127.0.0.1, 1080

[Rule]
FINAL,DIRECT

如上示例,增加了一条代理服务器,名为 Local,协议为 SOCKS5、服务器地址为 127.0.0.1、端口为 1080。

那么该如何使用它呢?

[General]

[Proxy]
Local = socks5, 127.0.0.1, 1080

[Rule]
DOMAIN-SUFFIX,example.com,Local
FINAL,DIRECT

来看一份完整配置,看过之前的文章那就很清楚了,在访问本地服务器域名 example.com 及其子域名时使用代理服务器 Local 代理访问。

代理服务器支持的协议还有其他多种,在此不一一列举了,如果你不熟悉文本配置的方法可以通过图形界面的方式添加,然后看看文本配置是怎么样的。

自定义内置策略

除了代理策略,对于 Surge 的内置策略也可以个性化:

[General]

[Proxy]
🌐Direct = direct
⛔️Reject = reject

[Rule]
DOMAIN-SUFFIX,doubleclick.net,⛔️Reject
FINAL,🌐Direct

IPv4 & IPv6 偏好

如果在启用「IPv6」的情况下,对于 IPv4 或 IPv6 有偏好,可使用附带参数 ip-version,可选参数有:

  • dual:默认行为,在双栈网络上将并发使用 v4 和 v6 地址并选取最快速的结果。
  • prefer-v4:若 DNS 解析获得了 A 与 AAAA 记录,优先使用 A 记录,否则使用 AAAA 记录。
  • prefer-v6:若 DNS 解析获得了 A 与 AAAA 记录,优先使用 AAAA 记录,否则使用 A 记录。
  • v4-only:仅使用 A 记录,若未获得A记录则失败。
  • v6-only:仅使用 AAAA 记录,若未获得 AAAA 记录则失败。
[General]

[Proxy]
🌐Direct = direct, ip-version=prefer-v4
🌐DirectV6 = direct, ip-version=v6-only
⛔️Reject = reject

[Rule]
DOMAIN-SUFFIX,example.com,🌐DirectV6
FINAL,🌐Direct

如上示例的意思为:在访问 example.com 及其子域名时,仅使用 IPv6 地址,而默认情况下优先使用 IPv4 地址。

策略组

Surge 提供多种不同类型的策略组以满足各种场景的不同需求。

「代理策略」配置在配置文件的 [Proxy Group] 下面:

[General]

[Proxy]

[Proxy Group]

[Rule]
FINAL,DIRECT

目前有 5 种策略组类型:

  • 手动选择:Select;
  • URL 延迟自动测试:Auto Test;
  • URL 可用性自动测试:Fallback;
  • 子网:Subnet(原 SSID);
  • 负载均衡:Load Balance;

策略组类型

手动选择策略组:Select

Select 策略组用于手动选择策略,可在界面上方便的切换使用策略。

[General]

[Proxy]
Server1 = socks5, 192.168.1.2, 1080
Server2 = socks5, 192.168.1.3, 1080
Server3 = socks5, 192.168.1.4, 1080

[Proxy Group]
PROXY = select, Server1, Server2, Server3, DIRECT

[Rule]
FINAL, PROXY

表示:

  1. 这个配置中有三个 SOCKS5 代理服务器;
  2. 有一个名为 PROXY 的 Select 选择策略组,该策略组下可选那三个代理服务器中的某一个或是直连;
  3. FINAL 类型规则使用 PROXY 策略组的结果;
  4. 只有 FINAL 一条规则所以相当于全局,所以全局是代理(且是代理中的哪个服务器),还是直连就取决于对 PROXY 策略组的选择。

URL 延迟自动测试策略组:Auto Test

Auto Test 策略组,通过测试到某一个 URL 的访问确定延迟,并自动选择延迟最低的策略。

[General]
proxy-test-url = http://cp.cloudflare.com/generate_204
test-timeout = 5

[Proxy]
Server1 = socks5, 192.168.1.2, 1080
Server2 = socks5, 192.168.1.3, 1080
Server3 = socks5, 192.168.1.4, 1080, test-url=http://cp.cloudflare.com/generate_204

[Proxy Group]
PROXY = url-test, Server1, Server2, Server3

[Rule]
GEOIP,CN,DIRECT
FINAL, PROXY,dns-failed

如上示例,可以通过自动测试选出延迟最低的策略。

默认情况下使用 [General] 下的 proxy-test-url 设置的 URL 进行设置,Surge 将向该 URL 发送一个 HTTP HEAD 请求。测试只关心是否收到了返回数据,并不关心数据内容。仅支持 http:// 协议。

如想要对指定策略使用指定 URL 可以在该策略使用 test-url 参数设置(如上示例)。

此外还有一些其他参数:

[Proxy Group]
PROXY = url-test, Server1, Server2, Server3, interval=600, tolerance=100, timeout=5, evaluate-before-use=false
  • timeout:超时(秒),测试的最长等待时间,超过该时间的策略将标记为失败不再继续等待。
  • interval:间隔(秒),每次测试的间隔时间。所有类 url-test 组的测试时机为:
    • 首次使用时进行测试。
    • 后续使用该策略组时,如果上次测试的时间间隔已大于 interval 设置时间,则再次触发测试。
    • 当目前选中策略产生不可恢复性错误时,直接触发测试。
    • 网络切换后,将清理之前的测试结果,当策略组被使用时触发首次测试。
  • tolerance:容忍度(毫秒),仅当新测试的获胜策略超过旧获胜策略加上容忍度后再进行切换。如果某几个策略测试结果相差不大,那么会导致在这几个策略中频繁切换,如果策略的代理服务器的出口 IP 不同,可能会触发目标网站的风险控制。所以加入了容忍度设计,仅当新一次的测试结果中,最佳策略比原选中策略的延迟差大于容忍度时,才会切换至新的策略。
  • evaluate-before-use:默认情况下,在首次使用策略组时将直接使用子策略中的第一个策略,同时触发延迟测试。如果配置了 evaluate-before-use=true,那么首次使用时将等待测试完毕后选择最佳策略。

URL 可用性自动测试策略组:Fallback

Fallback 策略组通过测试某一个 URL 来确定可用性,按照优先级选择可用的策略。

[General]
proxy-test-url = http://cp.cloudflare.com/generate_204
test-timeout = 5

[Proxy]
Server1 = socks5, 192.168.1.2, 1080
Server2 = socks5, 192.168.1.3, 1080
Server3 = socks5, 192.168.1.4, 1080

[Proxy Group]
PROXY = fallback, Server1, Server2, Server3

[Rule]
GEOIP,CN,DIRECT
FINAL, PROXY,dns-failed

如上示例,简单来说当 Server1 挂掉时自动选择 Server2,当 Server1Server2 都挂掉时自动选择 Server3

Fallback 策略组的参数基本与 Auto Test 策略组一致(所以往上翻参考 Auto Test 策略组即可),但注意没有 tolerance 参数。

负载均衡策略组:Load Balance

Load Balance 负载均衡策略组用于让每个连接随机使用一个字策略。

[General]
proxy-test-url = http://cp.cloudflare.com/generate_204
test-timeout = 5

[Proxy]
Server1 = socks5, 192.168.1.2, 1080
Server2 = socks5, 192.168.1.3, 1080
Server3 = socks5, 192.168.1.4, 1080

[Proxy Group]
PROXY = load-balance, Server1, Server2, Server3

[Rule]
GEOIP,CN,DIRECT
FINAL, PROXY,dns-failed

urltimeoutinterval 外,还有一个参数:维持策略 (persistent,又名 per connection classifier)。

persistent:当 persistent=true 时,对于同一目标主机名,将尽量使用同一个策略。避免因出口 IP 不同而触发目标网站的风险控制。但当可用性改变时可能导致策略变化:

PROXY = load-balance, Server1, Server2, Server3,persistent=true

子网策略组:Subnet

Subnet 策略组就是之前的 SSID 策略组。

[General]

[Proxy Group]
Subnet = subnet, default = REJECT,  "TYPE:WIFI" = DIRECT

[Rule]
RULE-SET,https://www.example.com/reject.list,Subnet
FINAL,DIRECT

以上示例表示,在默认情况下使用某个去广告规则,但在 Wi-Fi 下不使用。

个人建议使用图形界面操作该策略组以便更好理解,子网表达式可使用以下几种表示:

  • 匹配 Wi-Fi 的 SSID:SSID:value
  • 匹配 Wi-Fi 的 BSSID:BSSID:value
  • 匹配路由的 IP 地址:ROUTER:value
  • 匹配所有 Wi-Fi 网络:TYPE:WIFI
  • 匹配所有有线网络:TYPE:WIRED
  • 匹配所有蜂窝网络 (仅 iOS):TYPE:CELLULAR
  • 匹配指定蜂窝网络 (仅 iOS):MCCMNC:100-200

如果没有使用前缀,为了兼容旧版本配置,会尝试匹配 SSID/BSSID/路由 IP。

禁用组策略变化通知

若要禁用组策略变化的通知,可以在该策略组加上 no-alert=true,如:

[Proxy Group]
PROXY = url-test, Server1, Server2, Server3, no-alert=true

隐藏策略组

使用参数 hidden=true 可用于隐藏策略组,被隐藏的策略组将不显示在策略组选择列表中,但是依然可以继续工作。

Fallback = fallback, Server1, Server2, hidden=true

外部代理列表

使用由代理服务商提供的代理列表,列表文件为一个纯文本,每一行包含一个代理声明。

也就是说可以将如下列示例的代理声明存成一个文本文件:

Server1 = socks5, 192.168.1.2, 1080
Server2 = socks5, 192.168.1.3, 1080
Server3 = socks5, 192.168.1.4, 1080

然后在策略组中使用:

[Proxy Group]
Proxy = select, policy-path=https://www.example.com/Proxy.list

除了 select 策略组,也可以使用 url-test 等策略组进行自动选择。

外部代理列表还有两个选项:

自动更新间隔

可以使用 update-interval 来设置更新间隔,单位是秒,默认是 24 小时。

[Proxy Group]
Proxy = select, policy-path=https://www.example.com/Proxy.list,update-interval=86400

过滤器

可以使用 policy-regex-filter 选项来过滤代理列表,这是一个可选项,使用正则表达式匹配

[Proxy Group]
Proxy = select, policy-path=https://www.example.com/Proxy.list,update-interval=86400, policy-regex-filter=US

如上述示例可以只保留「外部代理列表」中代理名称带有「US」的代理服务器。