跳转至

sing-box 客户端 + 服务端配置参考

sing-box 内存占用很低,所以来折腾一下。

Main PID: 28497 (sing-box)
   Tasks: 21 (limit: 37771)
  Memory: 26.7M (peak: 33.5M)
     CPU: 11.565s

警告

以下配置可能无法满足您的需求

服务端配置(移除注释):

{
  "log": {
    "level": "warn",
    "output": "/var/log/sing-box/box.log", // 日志位置,不需要可删除
    // 注意: 自定义日志位置需要确保 sing-box 可访问
    // sing-box 默认工作路径是 /var/lib/sing-box
    "timestamp": true
  },
  "dns": {
    "servers": [
      {
        "type": "local",
        "tag": "local-dns"
      }
    ]
  },
  "inbounds": [
    {
      "tag": "proxy-in",
      "multiplex": { // 多路复用,仅限部分代理
        "enabled": true,
        "padding": false // 填充一些空数据混淆多路复用特征,开启的话客户端也需要配置
      // 其他字段
    }
    // 其他入站
  ],
  "outbounds": [
    {
      "type": "direct",
      "tag": "direct-out",
      "domain_resolver": { // 配置出站域名解析策略,优先 ipv6
        "server": "local-dns",
        "strategy": "prefer_ipv6"
      }
    }
    // 其他出站配置,比如 warp...
  ],
  "route": {
    "rules": [
      {
        "inbound": "proxy-in",
        "action": "sniff" // 对 proxy-in 开启嗅探,sing-box 1.13 写法
      },
      {
        "protocol": ["bittorrent", "quic"], // 屏蔽 quic,不需要可删除
        "action": "reject"
      },
      // ...其他路由规则
    ],
    "rule_set": [
      // 一些规则集,屏蔽还是走其他出站自己配置
      {
        "type": "remote",
        "tag": "cn-site",
        "format": "binary",
        "url": "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geosite/cn.srs",
        "update_interval": "7d"
      },
      {
        "type": "remote",
        "tag": "cn-ip",
        "format": "binary",
        "url": "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geoip/cn.srs",
        "update_interval": "7d"
      }
    ]
  }
}
吐槽一下,网上搜到的各种 sing-box 入站代理配置都开启了 TFO[TCP Fast Open],不仅增加了安全隐患,实际上还不能帮你降低任何延迟,主要有两点原因,第一点是因为 TFO 本身有一定的实现难度,实现不好的话会增加延迟;第二点则是因为就算客户端和服务端都开启了 TFO,当今互联网上的大部分路由设备都会丢弃 TFO 包,导致你开了和没开一样。

所以如果你真的很在乎 TCP 的握手延迟你应该开启多路复用,对应 sing-box 的 multiplex 字段,不过凡事皆有代价,如果你的线路质量一般,则不要开启多路复用,会严重影响你的上网体验,如果线路本身还可以,则可以使用下面的多路复用配置。

客户端配置:

{
  "log": {
    "level": "warn"
  },
  "certificate": { "store": "mozilla" }, // 使用 mozilla 证书集合
  "dns": {
    "servers": [
      {
        "tag": "dns-remote",
        "type": "udp",
        "server": "1.1.1.1",
        "detour": "proxy"
      },
      {
        "domain_resolver": "dns-local",
        "path": "dns-query",
        "server": "dns.alidns.com",
        "tag": "dns-direct",
        "type": "https"
      },
      {
        "tag": "dns-local",
        "type": "local"
      }
    ],
    "rules": [ // dns 分流规则
      {
        "type": "logical",
        "mode": "or",
        "rules": [
          {
            "domain": ["example.com"] // 额外添加域名走 dns-direct
          },
          {
            "rule_set": ["cn-site", "cn-location"]
          }
        ],
        "server": "dns-direct"
      }
    ],
    "independent_cache": true
  },
  "inbounds": [
    {
      "tag": "mixed-in",
      "type": "mixed",
      "listen": "127.0.0.1",
      "listen_port": 2080
    }
  ],
  "outbounds": [
    {
      "tag": "proxy",
      // ...其他字段
      "multiplex": {
        "enabled": true,
        "protocol": "smux", // 或者 h2mux
        "max_connections": 4,
        "min_streams": 4,
        "padding": false // 默认值,与服务端对应
      }
    },
    {
      "tag": "direct",
      "type": "direct"
    }
  ],
  "route": {
    "rules": [
      { "action": "sniff", "inbound": ["mixed-in"] },
      { "action": "hijack-dns", "protocol": "dns" },
      {
        "rule_set": ["cn-site", "cn-location"],
        "outbound": "direct"
      }
    ],
    "rule_set": [
      {
        "type": "remote",
        "tag": "cn-site",
        "format": "binary",
        "url": "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo-lite/geosite/cn.srs",
        "update_interval": "2d"
      },
      {
        "format": "binary",
        "tag": "cn-location",
        "type": "remote",
        "url": "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geosite/geolocation-cn.srs",
        "update_interval": "7d"
      }
    ],
    "final": "proxy",
    "default_domain_resolver": {
      "server": "dns-direct"
    },
    "auto_detect_interface": true
  },
  "experimental": {
    "cache_file": {
      "enabled": true
    }
  }
}
然后你会注意到我并没有配置 tun 或者 fakeip,因为我在 Linux 上绝大部分时间并不使用 tun,使用代理而不是 tun 也有很多好处:

  1. 性能更好,避免了内核态和用户态的频繁切换。

  2. 浏览器自动禁用 quic,再也不用担心 quic 变成 udp over tcp 了。

  3. 本地客户端基本不需要配置 ip 类规则,配置代理时都会配置 no_proxy 等变量,防止私有 ip 走代理,不需要代理的软件代理设置为空即可。

  4. 访问网页的 DNS 处理逻辑更简单,浏览器会直接给 socks 代理发送域名,而 shadowsocks, vless 等协议直接将走代理的域名发送给服务端处理,再也不用担心本地处理代理域名的 dns。

  5. Chrome 142 更新了 Local Network Access(局域网访问)权限,使用 fakeip 的话难免会弹出权限申请,不同意的话就没法上网了。


Chrome 默认策略是每次询问

缺点和局限就不提了,不过我偶尔也有需要 tun 的时候,这时候我会选择直接用各种 gui 开 tun,避免手搓配置导致各种各样的问题。


Loading Comments...