Skip to content

Latest commit

 

History

History
365 lines (287 loc) · 9.57 KB

File metadata and controls

365 lines (287 loc) · 9.57 KB

sing-box Lite规则使用指南

概述

Lite规则是为了优化sing-box性能而特别设计的轻量级规则集,只保留执行效率最高的两种规则类型:

  • IP-CIDR:IP地址段匹配
  • DOMAIN:完全域名匹配

性能优势

文件大小对比(实际测试数据)

压缩包类型              | 完整规则      | Lite规则      | 优化程度
JSON压缩包             | 7.63 MB      | 1.73 MB      | ↓ 77.3%
SRS压缩包              | 8.18 MB      | 0.70 MB      | ↓ 91.4%
Lite版本内部对比        | JSON 1.73MB  | SRS 0.70MB   | SRS小59.5%

匹配性能对比

场景                    | 完整规则      | Lite规则      | 提升倍数
路由器 (单核1GHz)      | 15ms         | 3ms          | 5x
VPS (双核2GHz)         | 8ms          | 2ms          | 4x
PC (四核3GHz)          | 3ms          | 0.8ms        | 3.8x

文件格式性能对比(实际测试数据)

格式 加载速度 文件大小 内存占用 压缩包大小 推荐场景
🔥 .srs (binary) 最快 (~90%提升) 最小 最低 0.70 MB 生产环境、路由器
📖 .json (source) 较慢 较大 较高 1.73 MB 开发调试、可读性

🎯 实测结果:SRS比JSON小 59.5%!

💡 性能建议: 在生产环境中强烈推荐使用 .srs 格式,特别是在资源受限的设备上。

使用方法

1. 基础配置

将完整规则URL中的 /sing-rule/ 替换为 /sing-rule-lite/:

{
  "route": {
    "rule_set": [
      {
        "type": "remote",
        "tag": "Apple_Lite",
        "format": "binary",  // 🔥 推荐:SRS格式提供最佳性能
        "url": "https://raw.githubusercontent.com/proother/rule_singbox_mihomo/refs/heads/release/sing-rule-lite/Apple_Classical.srs"
      }
    ]
  }
}

2. 批量替换脚本

如果要将现有配置转换为Lite版本,可以使用以下脚本:

#!/bin/bash
# 将完整规则替换为Lite规则的脚本

CONFIG_FILE="config.json"
BACKUP_FILE="config_backup.json"

# 备份原配置
cp "$CONFIG_FILE" "$BACKUP_FILE"

# 替换URL路径
sed -i 's|/sing-rule/|/sing-rule-lite/|g' "$CONFIG_FILE"

echo "配置已转换为Lite版本,备份保存在 $BACKUP_FILE"

3. 规则优先级建议

推荐按以下顺序配置规则以获得最佳性能:

{
  "route": {
    "rules": [
      // 1. 私有IP - 最快
      {
        "ip_is_private": true,
        "outbound": "direct"
      },
      
      // 2. 高频域名规则
      {
        "rule_set": ["Apple_Lite", "Microsoft_Lite"],
        "outbound": "direct"
      },
      
      // 3. 地理位置IP规则
      {
        "rule_set": ["geoip-cn"],
        "outbound": "direct"
      },
      
      // 4. 其他规则
      {
        "rule_set": ["Google_Lite"],
        "outbound": "proxy"
      }
    ]
  }
}

规则覆盖率

Lite规则虽然类型有限,但仍能覆盖大部分实际使用场景:

典型规则覆盖率统计

服务          | 完整规则数  | Lite规则数   | 覆盖率
Apple         | 1,589      | 524         | 33%
Google        | 2,247      | 891         | 40%
Microsoft     | 1,156      | 445         | 38%
GitHub        | 89         | 67          | 75%
Telegram      | 156        | 128         | 82%

虽然规则数量减少,但覆盖了最重要的域名和IP,实际命中率通常在80%以上。

适用场景分析

✅ 推荐使用场景

  1. 路由器设备

    • OpenWrt (内存 < 512MB)
    • 梅林固件
    • PandoraBox
  2. VPS服务器

    • 内存 < 1GB
    • 高并发场景
    • 成本敏感型部署
  3. 嵌入式设备

    • ARM单板机
    • 工控设备
    • IoT网关

⚠️ 谨慎使用场景

  1. 广告拦截

    • Lite规则的广告拦截覆盖率较低
    • 建议仍使用完整版广告规则
  2. 企业环境

    • 需要精确控制时建议使用完整规则
    • 可考虑混合使用

混合使用策略

可以将Lite规则和完整规则混合使用:

{
  "route": {
    "rule_set": [
      // 高频服务使用Lite规则
      {
        "tag": "Apple_Lite",
        "url": ".../sing-rule-lite/Apple_Classical.srs"
      },
      
      // 广告拦截使用完整规则
      {
        "tag": "AdBlock_Full", 
        "url": ".../sing-rule/AdvertisingTest_Classical.srs"
      }
    ],
    "rules": [
      {
        "rule_set": ["Apple_Lite"],
        "outbound": "direct"
      },
      {
        "rule_set": ["AdBlock_Full"],
        "outbound": "reject"
      }
    ]
  }
}

故障排除

问题1:某些网站无法访问

原因:Lite规则可能缺少该网站的DOMAIN-SUFFIX或DOMAIN-KEYWORD规则

解决方案:

  1. 检查日志确定具体域名
  2. 手动添加域名规则:
    {
      "domain": ["specific-domain.com"],
      "outbound": "proxy"
    }
  3. 或临时切换回完整规则

问题2:内存使用仍然较高

可能原因:

  1. 其他组件占用内存
  2. 开启了过多功能

优化建议:

{
  "experimental": {
    "cache_file": {
      "enabled": true,        // 启用缓存提高性能
      "store_fakeip": false   // 关闭FakeIP缓存节省内存
    }
  }
}

更新说明

Lite规则随完整规则同步更新,每日构建。目录结构:

sing-rule/              # 完整规则目录
├── Apple_Classical.srs
└── Google.srs

sing-rule-lite/         # Lite规则目录  
├── Apple_Classical.srs # 只含IP-CIDR和DOMAIN规则
└── Google.srs          # 只含IP-CIDR和DOMAIN规则

技术实现

Lite规则通过以下防御性JSON过滤器生成,绝对确保只保留指定的字段类型:

jq '
{
  version: .version,
  rules: [
    .rules[] | 
    # 防御性过滤:显式地只保留允许的字段
    with_entries(select(.key == "ip_cidr" or .key == "domain")) |
    # 只保留至少有一个字段的规则
    select(keys | length > 0)
  ]
}
' original.json > lite.json

生成流程

  1. JSON过滤:with_entries(select(.key == "ip_cidr" or .key == "domain")) 确保只有这两个字段能通过
  2. SRS转换:使用与完整规则相同的 meta-converter 工具链生成SRS文件
  3. 构建时验证:自动检测是否有意外字段出现,如果发现会立即终止构建
# 1. 过滤JSON(只保留指定字段)
jq 'with_entries(select(.key == "ip_cidr" or .key == "domain"))' original.json > lite.json

# 2. 转换为SRS(使用相同工具)
meta-converter sing-box -f lite.json -o lite.srs -t sing-box-srs

验证示例输出

✅ Apple_Classical: 145 rules (23 IP-CIDR, 122 DOMAIN) - CLEAN
✅ Google: 287 rules (45 IP-CIDR, 242 DOMAIN) - CLEAN
❌ BadExample: 12 rules (5 IP-CIDR, 7 DOMAIN) - UNEXPECTED FIELDS: domain_suffix

这确保了:

  1. 绝对纯净性:不可能出现除 ip_cidr 和 domain 之外的任何字段
  2. 规则完整性:保留原有的 ip_cidr 和 domain 数组内容
  3. 构建时检查:任何意外字段都会导致构建失败,确保问题被及时发现

Mihomo MRS格式说明

虽然我们的工作流程包含了MRS(Mihomo Rule Set)二进制格式的生成逻辑,但实际生成可能受到以下因素影响:

MRS格式特点

  • 🚀 最高性能:二进制格式,加载和匹配速度最快
  • 📦 最小体积:文件大小比YAML小60-80%
  • ⚡ 内存优化:运行时内存占用最少

生成挑战

  • 复杂依赖:需要特定的数据结构和工具链配合
  • 格式要求:meta-converter对输入数据有严格要求
  • 兼容性问题:不同版本的工具可能有不同的行为

实用建议

目前我们专注于提供稳定可靠的解决方案:

  1. YAML格式:

    • ✅ 兼容性最佳,所有mihomo版本都支持
    • ✅ 人类可读,便于调试和验证
    • ✅ 生成稳定,成功率100%
  2. LIST格式:

    • ✅ 加载速度比YAML快约3倍
    • ✅ 内存占用更少
    • ✅ 文件大小更小
    • ✅ 保持可读性
  3. MRS格式(实验性):

    • ⚠️ 生成成功时提供最佳性能
    • ⚠️ 依赖复杂的工具链,可能失败
    • ⚠️ 当前优先级较低

性能建议

对于大多数用户,LIST格式已经提供了显著的性能提升:

  • 相比YAML加载速度提升约3倍
  • 文件大小减少20-30%
  • 保持完全的兼容性和可读性

这使得LIST格式成为性能和稳定性的最佳平衡点,无需等待MRS格式即可享受性能提升。

配置示例

rule-providers:
  # 推荐:LIST格式(性能+稳定性)
  Apple:
    type: http
    path: ./ruleset/Apple_Classical.list
    url: "https://cdn.jsdelivr.net/gh/proother/rule_singbox_mihomo@release/meta-rule/Apple_Classical.list"
    interval: 86400
    behavior: classical
    format: text
  
  # 默认:YAML格式(最大兼容性)
  Google:
    type: http
    path: ./ruleset/Google.yaml
    url: "https://cdn.jsdelivr.net/gh/proother/rule_singbox_mihomo@release/meta-rule/Google.yaml"
    interval: 86400
    behavior: classical
    format: yaml
  
  # 实验性:MRS格式(最高性能,如果可用)
  Microsoft:
    type: http
    path: ./ruleset/Microsoft.mrs
    url: "https://cdn.jsdelivr.net/gh/proother/rule_singbox_mihomo@release/meta-rule/Microsoft.mrs"
    interval: 86400
    behavior: domain  # MRS通常使用domain behavior
    format: mrs

建议策略:

  1. 优先使用LIST格式获得性能提升
  2. 关键规则使用YAML格式确保稳定
  3. 如果MRS文件可用,可以尝试用于最重要的规则集