7.2 KiB
结构
{
"type": "urltest",
"tag": "auto",
"outbounds": [
"proxy-a",
"proxy-b",
"proxy-c"
],
"url": "",
"interval": "",
"tolerance": 50,
"idle_timeout": "",
"strategy": "latency",
"networkquality_ttl": "",
"networkquality_target": "apple",
"networkquality_config_url": "",
"networkquality_download_url": "",
"networkquality_upload_url": "",
"networkquality_probe_url": "",
"interrupt_exist_connections": false
}
字段
outbounds
==必填==
用于测试的出站标签列表。
url
用于测试的链接。默认使用 https://www.gstatic.com/generate_204。
interval
测试间隔。 默认使用 3m。
tolerance
以毫秒为单位的测试容差。 默认使用 50。
idle_timeout
空闲超时。默认使用 30m。
strategy
选择策略。可用值为 latency 和 networkquality。
默认的 latency 策略保持原有 URLTest 行为。networkquality 策略会在健康的出站中选择组合分数最高的成员:下载容量(比特/秒) / URLTest 延迟(毫秒)。零延迟按一毫秒处理;分数相同时选择延迟更低的成员。上传容量也会测量并返回,但不参与选择。当没有可用的网络质量结果时,将回退到延迟选择。
networkquality_ttl
网络质量测量的缓存有效期和自动测试间隔。默认使用 30m,小于 30m 的值会被拒绝。
使用 networkquality 策略时,首次自动测试会在初始延迟检查完成后启动。之后,每次自动测试完成并经过此间隔后,会启动下一次自动测试。在运行时从 latency 切换到 networkquality 也会立即启动测试,并从该次测试完成后重新计算间隔。latency 策略下自动计时器保持停止。自动测试使用默认最大运行时间,并禁用 HTTP/3。
同一 sing-box 实例中的所有 URLTest 组共享成功的测量结果。代理的规范化 server:port、测试目标、最大运行时间和 HTTP/3 模式相同时,在此间隔内复用同一次测量。整个 sing-box 实例同一时刻只执行一个实际网络质量测试;不同参与者和组在同一队列中等待。上一次成功的下载容量无论已经过去多久,都仍可参与选择。如果后续刷新失败,会返回本次错误,同时保留先前的容量及其原始时间戳,直到新的成功刷新替换它们。代理身份仅使用 server:port;凭据和传输参数会被有意忽略。
没有 URLTest 延迟结果的成员会被视为不可用,并且不会向网络质量服务发起测速。该成员仍会获得包含 "error": "URLTest delay unavailable" 的结果记录,因此完整结果图仍覆盖组内所有成员。如果该成员已有先前成功测得的容量,则会保留容量及其原始时间戳;缺少延迟时它不能被选中,后续 URLTest 恢复延迟后,保留的容量会重新参与选择。
也可以通过 Clash API 运行网络质量测试:
- 使用
{"maxRuntimeSeconds":20,"http3":false}请求POST /group/{name}/networkquality,依次处理组内所有成员,只对具有 URLTest 延迟的成员测速,并返回下载和上传结果。 GET /group/{name}/networkquality返回最近的结果,以及当前组测试的progress.current/progress.total。current是当前正在处理的成员序号(从一开始),total在测试开始时根据组快照固定。没有测试运行时两者均为零。- 使用
{"strategy":"networkquality"}请求PUT /group/{name}/strategy可在运行时切换策略。使用latency可切回延迟策略。
组测试期间,每个成员完成后,其结果会立即通过 GET /group/{name}/networkquality 可见。首次测试的部分结果绝不参与路由选择;在当前组的所有成员都有结果之前,仍由常规 URLTest 按延迟选择。完整结果可用于组合评分,但网络质量测试本身不会更改选中的出站;下一次完整的 URLTest 组更新才会应用它。单个 Clash API 延迟响应会继续更新每个成员的实时延迟历史,但不会切换 networkquality 组,也不会更改为其选中 now 显示的已提交延迟。组延迟仅在下一次完整 URLTest 组更新时统一更新,从而避免仪表板显示部分刷新的延迟结果。后续测速刷新期间,上一次完整结果会继续参与选择,直到新的完整结果替换它。如果测试被取消,已经发布的成员结果仍然可见,但不会替换用于选择的完整结果。
如果测试服务返回 HTTP 429,参与者结果会包含 "rateLimited": true 和错误信息。上一次成功测量的容量值及其原始时间戳会被保留,并且无论结果的年龄如何都仍可参与选择。限流响应也会开始新的 TTL 间隔,因此重复的 API 请求不会立即再次请求测试服务。
networkquality_target
用于网络质量测试的服务。可用值:
apple(默认):获取公开的 Apple Mensura Config v1。cloudflare:使用内置的 Cloudflare 测速端点。custom:从 networkquality_config_url 获取 Config v1,或使用下面的直接下载和上传 URL。
此设置不会改变普通延迟测试使用的 url。
networkquality_config_url
custom 网络质量目标使用的 Config v1 URL。设置此字段而不设置 networkquality_target 时,会自动选择 custom。
仅填写主机名或使用根路径 URL 时,会解析为 https://host/.well-known/nq。包含非根路径的 URL 会保持不变。
此字段不能与 networkquality_download_url、networkquality_upload_url 或 networkquality_probe_url 同时使用。
如需稳定且可控的测量,可部署 network-quality/goserver,然后在此填写其地址。例如:
{
"networkquality_target": "custom",
"networkquality_config_url": "https://nq.example.com"
}
networkquality_download_url
custom 目标的直接下载端点。必须与 networkquality_upload_url 一起设置。未设置 networkquality_target 时,直接 URL 会自动选择 custom。
该端点应返回足够大的响应体,并在测量期间支持并发请求。
networkquality_upload_url
custom 目标的直接上传端点。必须接受使用分块 application/octet-stream 请求体的 HTTP POST 请求。
networkquality_probe_url
直接 custom 模式中用于延迟和响应性探测的可选小型下载端点。如果为空,探测也会使用 networkquality_download_url。建议使用独立的小响应,以避免每次探测都传输完整下载负载。
直接下载、上传和探测 URL 必须使用同一主机。
{
"networkquality_target": "custom",
"networkquality_download_url": "https://speed.example.com/download",
"networkquality_upload_url": "https://speed.example.com/upload",
"networkquality_probe_url": "https://speed.example.com/probe"
}
interrupt_exist_connections
当选定的出站发生更改时,中断现有连接。
仅入站连接受此设置影响,内部连接将始终被中断。