Singbox配置方式

Singbox Config

阅读时长: 10 分钟
共 4550字
作者: eimoon.com

Sing-Box 是一个免费的开源代理平台,是新一代超强通用代理工具,。它的性能以及支持的协议类型已经超过了 *ray core 与 clash。

Sing-Box 的设计重点是性能、轻量级设计、可用性、模块化和代码质量。除了支持shadowsocks、trojan、vmess和socks协议外,它还支持ShadowTLS、Hysteria和 NaiveProxy 等较新的协议。

除了命令行客户端以外,Sing-Box还提供了图形界面客户端,图形界面支持 Android、iOS、macOS 以及 Apple tvOS,目前Windows 没有图形界面客户端,不过可以直接使用包管理器 Sccop 或者 Chocolatey 安装命令行版本,也可以选择第三方开发者开发的图形界面客户端: GUI.for.SingBox 或者一个更加成熟的第三方客户端: Hiddify-Next

Sing-Box 配置是json格式,他提供 6个主要的对象:“log“ “dns“ “inbounds“ “outbounds“ “route“ “experimental“

1.log

在 config.json 中,日志字段用于指定 Sing-Box 服务器的日志记录选项。这可以包括应执行的日志记录级别以及应保存日志文件的位置,以下是如何在 Sing-Box 配置文件中使用日志字段的示例:

"log": {
	"disabled": false,
	"level": "error",
	"output": "box.log",
	"timestamp": true
}

在此示例中,Sing-Box 服务器会将所有错误消息记录到文件 中/etc/sing-box/box.log。日志级别设置为 error,这意味着只会记录错误消息及更高级别。

日志字段在 Sing-Box 配置文件中是可选的。如果未包含,Sing-Box 将使用默认日志记录选项。可以自定义日志记录选项以满足您的特定需求和要求。

您还可以将日志级别设置为以下任一级别:

**trace    debug    info    warn    error    fatal    panic**

2.DNS设置

DNS 也是Singbox 配置的可选部分。它对于受 DNS 审查的 Singbox 客户端非常有用。Sing-Box 可以配置为使用特定 DNS 服务器或 DNS 服务器列表 来解析域名。您还可以为 Singbox 创建规则来确定应如何使用每个服务器。

Sing-Box允许您从各种DNS协议中进行选择,并配置要用于域查询的服务器。您可以创建规则来指定某些域应通过不同的 DNS 服务器进行查询。 当您想避免看起来像是在试图绕过审查时,这会很有用,因为缺乏 DNS 流量可能是一个危险信号。 使用 ISP 的 DNS 查询特定域将使您的在线活动对外部观察者来说更典型。 例如,下面是一个dns的配置

  "dns": {
    "servers": [
      {
        "tag": "dns_proxy",
        "address": "tls://1.1.1.1",
        "address_resolver": "dns_resolver"
      },
      {
        "tag": "dns_direct",
        "address": "h3://dns.alidns.com/dns-query",
        "address_resolver": "dns_resolver",
        "detour": "DIRECT"
      },
      { "tag": "dns_fakeip", "address": "fakeip" },
      { "tag": "dns_resolver", "address": "223.5.5.5", "detour": "DIRECT" },
      { "tag": "block", "address": "rcode://success" }
    ],
    "rules": [
      { "outbound": ["any"], "server": "dns_resolver" },
      {
        "geosite": ["category-ads-all"],
        "server": "dns_block",
        "disable_cache": true
      },
      {
        "geosite": ["geolocation-!cn"],
        "query_type": ["A", "AAAA"],
        "server": "dns_fakeip"
      },
      { "geosite": ["geolocation-!cn"], "server": "dns_proxy" }
    ],
    "final": "dns_direct",
    "independent_cache": true,
    "fakeip": { "enabled": true, "inet4_range": "198.18.0.0/15" }
  },

在上面的例子中,绕行是指 DNS 流量将被发送到哪里。如果我们不定义绕行,则特定 DNS 服务器流量将通过您的默认出站发送,这将在稍后的路由部分中定义。

要使用 Sing-Box 劫持客户端的 DNS 流量,必须启用特定入站的嗅探功能。或者,您可以通过路由部分中的“dns-out”选项路由 DNS 流量。以下是官方文档中的一个示例。

入站

在 Sing-Box 中, inbound指传入 Sing-Box 的连接。换句话说,它是由远程设备或客户端发起并指向运行 Sing-Box 的设备的连接。

在 Sing-Box 配置文件中,该inbound部分用于指定处理传入连接的设置。这包括监听端口、协议、传输和其他设置(例如身份验证方法)。

入站处理传入流量并将其定向到适当的本地服务,而出站负责连接到远程服务器并将流量转发给它。

这是Sing-Box支持的入站连接类型的完整列表。您可以点击提供的链接访问每种类型的官方文档。

我为 sing-box 支持的入站的各种协议和传输组合创建了一些可行且经过测试的 config.json 文件。这些文件可在 singbox inbounds 标签下找到。您可以使用这些现成的 json 块根据自己的要求快速构建自己的 config.json。

    {
  "inbounds": [
    {
      "type": "tun",
      "inet4_address": "198.18.0.1/16",
      "auto_route": true,
      "exclude_package": [
        "cmb.pb",
        "cn.gov.pbc.dcep",
        "com.MobileTicket",
        "com.adguard.android",
        "com.ainemo.dragoon",
        "com.alibaba.android.rimet",
        "com.alicloud.databox",
        "com.amazing.cloudisk.tv",
        "com.autonavi.minimap",
        "com.bilibili.app.in",
        "com.bishua666.luxxx1",
        "com.cainiao.wireless",
        "com.chebada",
        "com.chinamworld.main",
        "com.cmbchina.ccd.pluto.cmbActivity",
        "com.coolapk.market",
        "com.ctrip.ct",
        "com.dianping.v1",
        "com.douban.frodo",
        "com.eg.android.AlipayGphone",
        "com.farplace.qingzhuo",
        "com.hanweb.android.zhejiang.activity",
        "com.leoao.fitness",
        "com.lucinhu.bili_you",
        "com.mikrotik.android.tikapp",
        "com.moji.mjweather",
        "com.motorola.cn.calendar",
        "com.motorola.cn.lrhealth",
        "com.netease.cloudmusic",
        "com.sankuai.meituan",
        "com.sina.weibo",
        "com.smartisan.notes",
        "com.sohu.inputmethod.sogou.moto",
        "com.sonelli.juicessh",
        "com.ss.android.article.news",
        "com.ss.android.lark",
        "com.ss.android.ugc.aweme",
        "com.tailscale.ipn",
        "com.taobao.idlefish",
        "com.taobao.taobao",
        "com.tencent.mm",
        "com.tencent.mp",
        "com.tencent.soter.soterserver",
        "com.tencent.wemeet.app",
        "com.tencent.weread",
        "com.tencent.wework",
        "com.ttxapps.wifiadb",
        "com.unionpay",
        "com.unnoo.quan",
        "com.wireguard.android",
        "com.xingin.xhs",
        "com.xunmeng.pinduoduo",
        "com.zui.zhealthy",
        "ctrip.android.view",
        "io.kubenav.kubenav",
        "org.geekbang.geekTime",
        "tv.danmaku.bili"
      ],
      "stack": "mixed",
      "sniff": true
    },
    {
      "type": "socks",
      "tag": "socks-in",
      "listen": "::",
      "listen_port": 5353
    }
  ]
}
下面是对每个字段的详细注释:

第一个入站连接的配置:

type: “tun” 表示这是一个 tun 虚拟网络接口的配置。 inet4_address: “198.18.0.1/16” 设定了虚拟网络接口的 IPv4 地址和子网掩码。 auto_route: true 表示将自动处理路由,确保数据包正确传输。 exclude_package: 这是一个数组,包含了不通过此虚拟网络接口处理的 Android 应用程序包名列表。列出的 Android 应用程序将使用常规网络接口而不是虚拟接口。 stack: “mixed” 表示混合 system TCP 栈与 gvisor UDP 栈。 sniff: true 表示启用流量嗅探功能,以便自动检测和处理传入的数据流类型。 第二个入站连接的配置:

type: “socks” 表示这是一个 SOCKS 代理配置。 tag: “socks-in” 为这个入站连接定义了一个标签,方便在其它配置中引用。 listen: “::” 表示监听所有 IPv6 地址。如果需要监听所有 IPv4 地址,可以使用 “0.0.0.0”。 listen_port: 5353 定义了 SOCKS 代理监听的端口号。 其中 tun 接口是核心部分,我们将利用 tun 接口来实现全局透明代理

在选择满足您需求的代理协议时,仔细考虑其安全性和维护非常重要。虽然有些人可能认为VLESS是安全的,但实际上自 2020 年以来它就不再维护了。因此,许多新的软件工具和平台(包括 sing-box)都不支持 VLESS 作为入站。

但是,出于兼容性原因,Sing-Box 仅支持 VLESS 作为出站。

您最喜欢的功能可能会缺失,因为它不合适,因为它影响性能或设计清晰度,或者因为它是一个坏主意

出站

在 Sing-Box 上下文中,转发outbound是一种配置,用于指定如何将流量转发到外部目标。它通常用于建立与远程服务器的连接或将流量发送到特定地址。

出站负责连接远程服务器并将流量转发给它,而入站负责处理传入流量并将其定向到适当的本地服务。

以下是Sing-Box支持的不同类型的出站连接的完整列表。您可以点击相应的链接访问每种类型的官方文档:

{
  "outbounds": [
    {
      "type": "selector", // 类型为选择器,用于在多个出站中选择一个
      "tag": "select", // 标签名为 "select"
      "outbounds": [
        "trojan-out" // 可选择的出站列表,这里只有 "trojan-out"
      ],
      "default": "trojan-out" // 默认选择的出站为 "trojan-out"
    },
    {
      "type": "selector", // 同样是选择器类型
      "tag": "openai", // 标签名为 "openai"
      "outbounds": [
        "trojan-out" // 可选择的出站仍然是 "trojan-out"
      ],
      "default": "trojan-out" // 默认选择的出站同样是 "trojan-out"
    },
    {
      "type": "selector", // 选择器类型
      "tag": "tiktok", // 标签名为 "tiktok"
      "outbounds": [
        "trojan-out" // 可选择的出站是 "trojan-out"
      ],
      "default": "trojan-out" // 默认选择的出站为 "trojan-out"
    },
    {
      "type": "trojan", // 类型为 Trojan
      "tag": "trojan-out", // 标签名为 "trojan-out"
      "server": "xxxxxxxx", // Trojan 服务器地址
      "server_port": 9443, // Trojan 服务器端口
      "password": "xxxxxxxx", // Trojan 连接密码
      "tls": {
        "enabled": true, // 启用 TLS 加密
        "server_name": "xxxxxxxx", // TLS 服务器名称
        "insecure": true, // 不验证 TLS 证书,用于自签名证书
        "utls": {
          "fingerprint": "chrome" // 使用 Chrome 的 TLS 指纹
        }
      },
      "multiplex": {
        "protocol": "h2mux", // 使用 h2mux 多路复用协议
        "max_connections": 4, // 最大连接数为 4
        "min_streams": 4 // 每个连接的最小流数为 4
      },
      "transport": {
        "type": "grpc", // 传输协议为 gRPC
        "service_name": "TunService" // gRPC 服务名称
      }
    },
    {
      "type": "direct", // 直连类型,不通过代理直接访问
      "tag": "direct" // 标签名为 "direct"
    },
    {
      "type": "block", // 阻止类型,用于拦截流量
      "tag": "block" // 标签名为 "block"
    },
    {
      "type": "dns", // DNS 类型,用于 DNS 查询
      "tag": "dns-out" // 标签名为 "dns-out"
    }
  ]
}

这个配置定义了不同类型的出站连接方式,包括选择器、Trojan、直连、阻止和 DNS 类型。每种类型都通过标签进行标识,便于在后续的路由规则中引用 我为 Sing-Box 支持的许多出站连接类型创建了示例。您可以通过访问“singbox outbounds”标签查看列表。这些示例以现成的 JSON 块形式呈现,可以帮助您根据特定需求快速构建自己的配置文件 (config.json)。

路由

这是指一组规则,用于确定流量如何从客户端转发到服务器。根据规则,一些流量可以通过 VPN 隧道路由,一些流量则通过直接 ISP 连接路由。

使用此功能(拆分隧道)意味着连接和断开 VPN 的麻烦已经结束。

您可以使用 Sing-Box 路由配置来指定更复杂的路由规则,例如根据域名、IP 或端口号路由流量。您还可以使用它通过多个出站连接路由流量。

SingBox 路由规则示例:

{
  "route": {
    "rules": [
      {
        "protocol": "dns",        // 使用DNS协议的流量
        "outbound": "dns-out"     // 将通过'dns-out'出口转发
      },
      {
        "clash_mode": "direct",   // Clash模式为直连
        "outbound": "direct"      // 将通过'direct'出口直接连接
      },
      {
        "clash_mode": "global",   // Clash模式为全局
        "outbound": "select"      // 将通过'select'出口选择转发
      },
      {
        "domain_suffix": [        // 特定后缀的域名
          "icloudnative.io",
          "fuckcloudnative.io",
          "sealos.io",
          "cdn.jsdelivr.net"
        ],
        "outbound": "direct"      // 将通过'direct'出口直接连接
      },
      {
        "process_name": [         // 特定进程名称
          "TencentMeeting",
          "NemoDesktop",
          ...
        ],
        "outbound": "direct"      // 将通过'direct'出口直接连接
      },
      {
        "rule_set": [             // 特定的规则集
          "WeChat",
          "Bilibili"
        ],
        "outbound": "direct"      // 将通过'direct'出口直接连接
      },
      {
        "protocol": "quic",       // 使用QUIC协议的流量
        "outbound": "block"       // 将被阻止
      },
      {
        "inbound": "socks-in",    // 来自'socks-in'入口的流量
        "outbound": "select"      // 将通过'select'出口选择转发
      },
      {
        "rule_set": "OpenAI",     // OpenAI规则集
        "outbound": "openai"      // 将通过'openai'出口转发
      },
      {
        "domain_suffix": [        // OpenAI相关的域名后缀
          "openai.com",
          "oaistatic.com",
          "oaiusercontent.com"
        ],
        "outbound": "openai"      // 将通过'openai'出口转发
      },
      {
        "package_name": "com.openai.chatgpt", // OpenAI ChatGPT应用包名
        "outbound": "openai"                  // 将通过'openai'出口转发
      },
      {
        "rule_set": "TikTok",     // TikTok规则集
        "outbound": "tiktok"      // 将通过'tiktok'出口转发
      },
      {
        "package_name": "com.zhiliaoapp.musically", // TikTok应用包名
        "outbound": "tiktok"                          // 将通过'tiktok'出口转发
      },
      {
        "domain_suffix": [        // 特定的域名后缀
          "depay.one",
          "orbstack.dev"
        ],
        "outbound": "select"      // 将通过'select'出口选择转发
      },
      {
        "process_name": [         // 特定的进程名称
          "DropboxMacUpdate",
          "Dropbox"
        ],
        "outbound": "select"      // 将通过'select'出口选择转发
      },
      {
        "package_name": [         // 特定应用包名
          "com.google.android.youtube",
          ...
        ],
        "outbound": "select"      // 将通过'select'出口选择转发
      },
      {
        "domain": "accounts.google.com", // 特定的域名
        "domain_suffix": [               // 特定的域名后缀
          "sourceforge.net",
          "fhjasokiwq.com"
        ],
        "outbound": "select"             // 将通过'select'出口选择转发
      },
      {
        "domain_suffix": "cloud.sealos.io", // 特定的域名后缀
        "outbound": "direct"                // 将通过'direct'出口直接连接
      },
      {
        "type": "logical",        // 逻辑类型规则
        "mode": "and",            // 使用'and'模式
        "rules": [                // 组合规则
          {
            "rule_set": "geosite-geolocation-!cn"
          },
          {
            "rule_set": "geoip-cn",
            "invert": true
          }
        ],
        "outbound": "select"      // 将通过'select'出口选择转发
      },
      {
        "rule_set": "Global",     // Global规则集
        "outbound": "select"      // 将通过'select'出口选择转发
      },
      {
        "rule_set": "geoip-cn",   // 中国地理位置IP规则集
        "outbound": "direct"      // 将通过'direct'出口直接连接
      },
      {
        "ip_is_private": true,    // 私有IP地址
        "outbound": "direct"      // 将通过'direct'出口直接连接
      },
      {
        "rule_set": [             // 特定的规则集
          "YouTube",
          "Telegram",
          "Netflix",
          "geoip-google",
          "geoip-telegram",
          "geoip-twitter",
          "geoip-netflix"
        ],
        "outbound": "select"      // 将通过'select'出口选择转发
      }
    ]
  }
}

这个配置定义了不同类型的流量(如基于协议、域名后缀、应用包名、进程名称等)如何被路由。每条规则都指定了一种流量类型和相应的“出口”,即流量应该如何被处理或转发。这种灵活的路由配置可以非常精确地控制网络流 代码语言: JSON / 带注释的 JSON ( json ) 查看 Singbox 的其他配置,例如日志和DNS 设置、入站和出站以及其实验功能。

我还简单讨论了geosite.db和geoip.db是什么。这些压缩的域和 IP 地址列表用于路由过程。

实验功能

它同时支持 Clash API 和 V2Ray API,这意味着它可以与任何与这两个 API 兼容的 Web 控制面板一起使用。

在官方文档中可以找到使用 Clash API 的示例。 最后的实验性配置用来开启 Clash API。没错,sing-box 是兼容 Clash API 滴!那么我们就可以使用 Clash 的 dashboard 来管理 sing-box 了,直接用这个项目好了: metacubexd

{
  "experimental": {
    "cache_file": {
      "enabled": true  // 启用缓存文件功能。当此项设置为true时,启用 DNS 查询的缓存,以便加快后续相同查询的响应速度。
    },
    "clash_api": {
      "external_controller": "0.0.0.0:9090",  // 定义 Clash API 的外部控制器地址。"0.0.0.0:9090" 表示在本机的9090端口上监听外部的连接请求。
      "external_ui": "metacubexd",  // 指定外部用户界面(UI)的名称。这里的 "metacubexd" 是一个自定义 UI 的名称。
      "external_ui_download_url": "https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip",  // 提供外部 UI 的下载 URL。这个 URL 是从 GitHub 上下载 "metacubexd" UI 的压缩包。
      "external_ui_download_detour": "select",  // 定义下载外部 UI 时使用的转发策略。"select" 表示将通过'select'出口选择转发
      "default_mode": "rule"  // 设置 Clash API 的默认模式。"rule" 模式意味着流量将根据用户定义的规则进行路由。
    }
  }
}

微信公众号

使用 Hugo 构建
主题 StackJimmy 设计