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" 模式意味着流量将根据用户定义的规则进行路由。
}
}
}