🗂 | 查看 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
表示:
- 这个配置中有三个 SOCKS5 代理服务器;
- 有一个名为
PROXY
的 Select 选择策略组,该策略组下可选那三个代理服务器中的某一个或是直连; FINAL
类型规则使用PROXY
策略组的结果;- 只有
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
,当 Server1
及 Server2
都挂掉时自动选择 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
除 url
、timeout
、interval
外,还有一个参数:维持策略 (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」的代理服务器。