科学之家

适用客户端

sing-box 分流规则

支持平台
AndroidiOSWindowsmacOSLinuxOpenWrt
规则格式
SRS · route.rule_set

通过 route.rule_set 引用二进制 SRS,再把规则集绑定到已有出站或拒绝动作。

官方图文介绍

通过 route.rule_set 引用二进制 SRS,再把规则集绑定到已有出站或拒绝动作。 下方为对应客户端的官方资料图,具体规则的添加方法见本页教程。

根据 sing-box 官方资料(新窗口) 整理

sing-box · 官方项目仓库介绍卡片
sing-box · 官方项目仓库介绍卡片查看官方图文来源(新窗口) · 核对 2026-09-26

图片为官方发布素材或标明的官网页面实拍;中文介绍由本站根据官方资料整理。平台与版本不同,界面可能有所差异。

01 · 开始前,准备好这三样

本教程从你已经安装 sing-box、并有一份能正常连接的配置开始。先确认网页能够通过现有节点打开,再添加分流,这样遇到问题时更容易判断是节点、规则还是配置格式的原因。

  1. 备份:导出或复制当前完整配置,记下原本启用的配置名。先在副本上修改,随时可以恢复。
  2. 出口名称:抄下已有代理策略组或出站标签的全名。示例里的大写占位名称需要替换,空格、大小写和符号都要一致。
  3. 测试目标:先选一个服务,例如 GitHub。只添加一组规则并测试成功,再逐步加入其他资源。
本软件的设置位置

JSON 的 route.rule_set / route.rules。SRS 是二进制规则集,不是 JSON 配置,也不是节点订阅。下载链路参数在不同版本有变化,1.14 起请查看官方 http_client 说明;本页基础片段不预设你的下载出站。

三个词先认识

规则内容
要匹配的域名、IP 或条件。域名填写 github.com,不带 https:// 或网页路径。
策略 / 出站
匹配后交给哪个出口,或者选择直连、拒绝。规则本身不提供代理线路。
兜底
没有其他规则命中时的处理方式。保留现有兜底,不要把它误放到具体规则前面。

02 · sing-box 的规则内容

下表提供本软件对应的远程规则资源。规则源负责维护匹配名单,你负责指定策略。先从需要的一项开始,不必一次全部启用。YAML domain 与本页 SRS 均为域名集合,直接使用 IP 的流量还需要 IP 规则。

sing-box 规则与建议策略
用途配置中的标识策略对应资源
广告拦截science-category-ads-all拦截打开 SRS / binary
YouTubescience-youtube已有代理出站打开 SRS / binary
Netflixscience-netflix已有代理出站打开 SRS / binary
OpenAIscience-openai已有代理出站打开 SRS / binary
Telegramscience-telegram已有代理出站打开 SRS / binary
GitHubscience-github已有代理出站打开 SRS / binary
Steamscience-steam已有代理出站打开 SRS / binary
国内直连science-cn直连打开 SRS / binary

广告拦截是可选项。遇到登录、支付、验证码或视频加载异常,先看是否命中拦截规则,再对实际误拦截域名建立优先放行规则。选择代理策略只改变连接出口,不保证某个服务的地区权限或线路可用性。

具体网站与大范围规则重叠怎么办?

按需要把明确的网站例外放在更优先的位置。国内集合或通用代理集合范围很大,可能提前命中某个服务;查看实际匹配记录后再调整顺序。同一网站还可能使用独立的登录、图片、视频域名,不能只测试首页。

03 · sing-box 图文设置教程

sing-box设置路径示意
软件设置顺序示意;具体步骤请以下文为准。

1. 确认内核版本与出站标签

本页路由动作示例适用于 sing-box 1.11 及之后的配置写法。先导出完整 JSON,查看 outbounds 数组中的 tag。把 PROXY_TAG 和 DIRECT_TAG 替换成实际存在的代理与直连出站 tag,不能只凭显示名称猜测。

2. 合并远程 rule_set

将示例 route.rule_set 数组中的对象并入原来的同名数组。type=remote 表示远程下载,format=binary 对应 .srs,tag 是这个集合在当前配置中的名字。已有 route 对象时只能合并,不能再写第二个 route。

3. 插入路由规则

把 route.rules 中的对象插入原规则数组。rule_set 的名称必须与前一步 tag 完全一致;代理与直连用 action=route 并写 outbound,广告用 action=reject。保留原来的 DNS 处理、嗅探规则和 route.final。

4. 校验、加载与排查

保存完整配置后,可用 sing-box check -c config.json 校验,再在实际使用的客户端加载。确认远程集合下载成功,通过日志核对规则及出站。若 GitHub 资源下载失败,需要为对应版本配置可用的下载出站;不要把未校验的网络参数直接套到所有版本。

04 · 视频教程

视频教程待更新

sing-box 的分流视频教程正在准备中,可先按照图文步骤完成设置。

查看视频教程

05 · 配置片段与下载

下面是用于合并的规则片段,没有节点、监听端口或完整客户端设置。不要用它替换整个配置。把片段放入上文指定的位置;已有同名段或数组时合并内容,并保留原有配置。

复制前替换占位名称

PROXY_TAG 和 DIRECT_TAG 必须对应现有 outbounds 中的 tag。拒绝连接使用 action: reject,不需要创建一个叫 reject 的出站。

sing-box · 合并用规则片段
{
  "route": {
    "rule_set": [
      {
        "type": "remote",
        "tag": "science-category-ads-all",
        "format": "binary",
        "url": "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geosite/category-ads-all.srs",
        "update_interval": "1d"
      },
      {
        "type": "remote",
        "tag": "science-youtube",
        "format": "binary",
        "url": "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geosite/youtube.srs",
        "update_interval": "1d"
      },
      {
        "type": "remote",
        "tag": "science-netflix",
        "format": "binary",
        "url": "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geosite/netflix.srs",
        "update_interval": "1d"
      },
      {
        "type": "remote",
        "tag": "science-openai",
        "format": "binary",
        "url": "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geosite/openai.srs",
        "update_interval": "1d"
      },
      {
        "type": "remote",
        "tag": "science-telegram",
        "format": "binary",
        "url": "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geosite/telegram.srs",
        "update_interval": "1d"
      },
      {
        "type": "remote",
        "tag": "science-github",
        "format": "binary",
        "url": "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geosite/github.srs",
        "update_interval": "1d"
      },
      {
        "type": "remote",
        "tag": "science-steam",
        "format": "binary",
        "url": "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geosite/steam.srs",
        "update_interval": "1d"
      },
      {
        "type": "remote",
        "tag": "science-cn",
        "format": "binary",
        "url": "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geosite/cn.srs",
        "update_interval": "1d"
      }
    ],
    "rules": [
      {
        "rule_set": [
          "science-category-ads-all"
        ],
        "action": "reject"
      },
      {
        "rule_set": [
          "science-youtube"
        ],
        "action": "route",
        "outbound": "PROXY_TAG"
      },
      {
        "rule_set": [
          "science-netflix"
        ],
        "action": "route",
        "outbound": "PROXY_TAG"
      },
      {
        "rule_set": [
          "science-openai"
        ],
        "action": "route",
        "outbound": "PROXY_TAG"
      },
      {
        "rule_set": [
          "science-telegram"
        ],
        "action": "route",
        "outbound": "PROXY_TAG"
      },
      {
        "rule_set": [
          "science-github"
        ],
        "action": "route",
        "outbound": "PROXY_TAG"
      },
      {
        "rule_set": [
          "science-steam"
        ],
        "action": "route",
        "outbound": "PROXY_TAG"
      },
      {
        "rule_set": [
          "science-cn"
        ],
        "action": "route",
        "outbound": "DIRECT_TAG"
      }
    ]
  }
}

下载文件与上面展示的内容一致,按钮会保存到本地;若浏览器直接显示文本,可用“另存为”保存并保留原文件后缀。JSON 文件不允许注释或尾随逗号,YAML 使用空格缩进,配置中的逗号和等号应使用英文符号。

后续怎样更新?

示例使用 update_interval: 1d 检查远程资源。客户端应能下载 SRS;名单更新不会改变你手动指定的出站 tag。

06 · 怎样确认真的生效?

验证分流的三个检查点:流量进入客户端、规则成功匹配、出口符合预期。
图 2 · 分流验证检查图。网页能打开,只能证明连接成功,不能单独证明规则命中。
  1. 先看配置:确认当前启用的就是刚修改的配置或路由方案,运行模式能够使用分流规则。
  2. 再看资源:远程规则应显示下载或更新成功;本地规则应能在配置或编辑页面中找到。文件下载成功和规则被引用是两件事。
  3. 发起新连接:关闭测试网站的旧连接后重新打开,例如 github.com。只刷新网页可能复用旧连接,导致看到的仍是旧策略。
  4. 核对结果:在请求、活动连接或日志里找到目标域名,检查规则与出口。需要走代理的访问应命中相应策略,而国内直连应显示直连。
一个最小验证例子

先只配置 GitHub,给它指定一个已有代理策略。访问 github.com,找到这次请求。若记录显示的是通用兜底,回去检查规则位置;若已经匹配 GitHub 却打不开,就检查该策略里选中的线路。两种情况的处理方法不同。

07 · 常见问题与恢复方法

下载后为什么不能直接导入节点订阅?

本页下载的是规则片段或规则集合,节点订阅是另一种数据。按本软件教程合并规则,再使用你已有的节点;不能把规则链接当成节点地址。

提示找不到策略、出站或标签怎么办?

检查占位名称是否已经替换,并逐字比较大小写、空格和特殊符号。规则写了一个名称,不会自动创建该策略或出站。

配置保存后没有效果怎么办?

依次确认:选中了正确配置、没有全局代理或全局直连覆盖、目标应用流量进入客户端、规则成功加载、具体规则没有被更早的规则抢先匹配。每次只改一个条件再测试。

远程文件打不开或格式报错怎么办?

先从本页资源链接确认拿到的是实际规则内容,不是登录页、错误网页或 GitHub 文件预览页。再核对扩展名和声明格式;不要通过改名把 SRS、MRS、LIST、YAML 相互转换。

误拦截后怎样恢复?

先停用刚添加的拦截规则或恢复备份配置。恢复联网后,查看误拦截域名并添加更具体的放行例外,再逐条重新启用;不要为了修复一个站点而清空所有已有规则。

修改会不会被订阅更新覆盖?

直接编辑远程订阅生成的配置,可能在更新时丢失。软件支持覆写或扩展时使用对应机制;采用本地完整配置副本时,需要自己合并后续订阅变化。

浏览器能走代理,其他软件却没有命中规则?

系统代理只覆盖遵循该设置的程序,部分程序使用自己的代理设置或直接连接。先在客户端日志确认目标程序是否出现;没有记录时检查接管方式与分应用设置。只有客户端明确支持并完成所需配置时才使用 TUN;仅添加规则不能接管原本未进入客户端的流量。

域名规则已命中,为什么仍有部分图片、登录或视频失败?

同一服务往往分别使用页面、账号、图片和媒体域名。先查看失败请求的真实目标与最终出口,再判断是否缺少规则、命中拦截或出口不可用。应用直连 IP、IPv6 或 UDP 的连接也可能走不同路径;按对应软件文档检查,不能只凭首页成功认定全部请求都正常。

更新后提示不认识字段,怎样判断是语法还是版本问题?

记录当前客户端和内核版本,查该版本支持的字段与规则格式。先使用配置检查功能查看具体行号:缩进、逗号等属于文件语法,unknown field 一类提示还可能是功能版本不匹配。恢复备份确认原配置可用后,再按官方迁移说明逐项调整。

提交问题反馈时应该准备什么?

提供客户端与内核版本、设备系统、问题出现步骤,以及脱敏后的目标域名、命中规则、出站名称和错误码。保留一份能正常工作的配置用于对照;不要公开完整订阅地址、账号密钥或包含认证信息的日志。

08 · 资料来源

以下资料用于核对软件语法与设置方式。教程按 2026-09-25 可访问资料整理;软件界面随版本变化时,请以其官方文档及实际界面为准。