·singbox中各个json模块的基本结构:
singbox在启动时,会自动将指定目录下的json文件加载及合并运行
每个json文件必须具有标准的json结构,否则就会报错
{
"log": {},
"dns": {},
"inbounds": [],
"outbounds": [],
"outbound_providers": [], //限PuerNya版内核
"route": {},
"experimental": {}
}
例如如果想要自定义dns.json模块
则内部结构必须是如下的形式,即开头和结尾的1级花括号必须存在!
{
"dns": {
"servers": [……]
}
}
具体的格式可以在正确运行singbox内核后,参考/tmp/ShellCrash/jsons
目录下的相关文件
你也可以通过 https://www.json.cn 来在线解析json格式是否正确
·ShellCrash中自定义配置文件的名称及目录:
目前 log dns ntp experimental 是替换内置设定而非合并,即自定义的内容会覆盖脚本生成的内容,需要谨慎使用,请确保不会影响脚本内置功能的使用
而inbounds outbounds outbound_providers route rule-set 则是与基础的config.json配置文件中的内容合并,注意singbox并不是增量合并,如果自定义内容和配置文件中的原有内容出现重复或者冲突,则内核依然会无法运行
各个模块的自定义文件必须放在ShellCrash安装目录下的jsons文件夹内!
且文件名必须是log.json、dns.json、outbounds.json…… 等,不得随意更改,否则不会加载!
·配置文件示例:
示例:自定义log等级
编辑$CRASHDIR/jsons/log.json
文件:
{
"log": {
"level": "debug",
"timestamp": true
}
}
示例:禁用ntp服务
编辑$CRASHDIR/jsons/ntp.json
文件:
{
"ntp": {
"enabled": false
}
}
示例:自定义outbound_providers,实现在线更新订阅
注意:outbound_providers功能仅限PuerNya版内核使用!
注意:每个例如"my_airport1"的tag应当在outbounds模块中被正确引用!你可以通过搭配自定义outbounds.json来使用!
注意:多个平级的{}之间需要使用逗号连接,如果只有一个同级{}则不要写逗号!
具体字段内容可以参考:官方文档
编辑$CRASHDIR/jsons/outbound_providers.json
文件:
{
"outbound_providers": [
{
"tag": "my_airport1",
"type": "http",
"healthcheck_url": "https://www.gstatic.com/generate_204",
"healthcheck_interval": "10m",
"download_url": "example.your_airport1.com",
"path": "./yamls/your_airport1.yaml",
"download_ua": "clash.meta",
"download_interval": "24h",
"download_detour": "DIRECT",
"override_dialer": { "domain_strategy": "prefer_ipv6" }
},
{
"tag": "my_airport2",
"type": "http",
"healthcheck_url": "https://www.gstatic.com/generate_204",
"healthcheck_interval": "10m",
"download_url": "example.your_airport2.com",
"path": "./yamls/your_airport2.yaml",
"download_ua": "clash.meta",
"download_interval": "24h",
"download_detour": "DIRECT",
"override_dialer": { "domain_strategy": "prefer_ipv6" }
}
]
}
编辑$CRASHDIR/jsons/outbounds.json
文件以引用outbound_providers:
注意:如果你还想编辑自定义节点或者其他outbounds模块内容,必须都写在同一个文件内,脚本不会加载诸如outbounds2.json这样的文件,多个平级的{}之间请使用逗号连接,如果只有一个同级{}则不要写逗号!
{
"outbounds": [
{
"type": "selector",
"tag": "🇭🇰 香港节点",
"providers": [ "my_airport1" ],
"includes": [ "香港.*BGP" ]
},
{
"type": "urltest",
"tag": "🇸🇬 新加坡节点",
"tolerance": 100,
"providers": [ "my_airport2" ],
"includes": [ "新加坡" ]
}
]
}
示例:自定义outbounds,实现自定义节点或策略组
注意:每个例如"my_airport1"的tag应当在outbounds模块中被正确引用!你可以通过搭配自定义outbounds.json来使用!
注意:多个平级的{}之间需要使用逗号连接,如果只有一个同级{}则不要写逗号!
具体字段内容可以参考:官方文档
编辑$CRASHDIR/jsons/outbounds.json
文件:
{
"outbounds": [
{
"type": "trojan",
"tag": "my_trojan1",
"server": "example.my_trojan.com",
"server_port": 443,
"password": "123321",
"tls": {
"enabled": true,
"insecure": true
}
},
{
"type":"shadowsocks",
"tag":"my_ss1",
"server":"example.my_ss.com",
"server_port":10001,
"method":"2022-blake3-aes-128-gcm",
"password":"8JCsPssfgS8tiRwiMlhARg==",
"tcp_fast_open":false
},
{
"type": "selector",
"tag": "🚀 自建手选",
"outbounds": [
"my_trojan1",
"my_ss1"
]
},
{
"type": "urltest",
"tag": "♻️ 自建自动",
"outbounds": [
"my_trojan1",
"my_ss1"
],
"url": "https://www.gstatic.com/generate_204",
"interval": "5m0s",
"tolerance": 50
},
{
"type": "selector",
"tag": "🛑 广告拦截",
"outbounds": [
"DIRECT",
"REJECT"
]
}
]
}
示例:自定义shadowsocks/hysteria2等协议入站
注意:如果你想自定义二级或者更低等级的json字段,则其上级字段也必须包含在文件中,否则singbox内核无法完成合并
具体字段内容可以参考:官方文档
注意:多个平级的{}之间需要使用逗号连接,如果只有一个同级{}则不要写逗号!
编辑$CRASHDIR/jsons/inbound.json
文件:
{
"inbounds": [
{
"type": "shadowsocks",
"tag": "ss-in",
"listen": "::",
"listen_port": 24678,
"sniff": true,
"method": "2022-blake3-aes-128-gcm",
"password": "8JCsPssfgS8tiRwiMlhARg==",
"multiplex": {}
},
{
"type": "hysteria2",
"tag": "hy2-in",
"listen": "::",
"listen_port": 24678,
"sniff": true,
"up_mbps": 100,
"down_mbps": 100,
"obfs": {
"type": "salamander",
"password": "cry_me_a_r1ver"
},
"users": [
{
"name": "tobyxdd",
"password": "goofy_ahh_password"
}
],
"ignore_client_bandwidth": false,
"tls": {},
"masquerade": "",
"brutal_debug": false
}
]
}
示例:启用内核内置缓存功能
注意:本处示例仅支持1.8.0以上版本singbox内核
注意:由于experimental.json是完全覆盖脚本内置设置,故如果需要使用clash面板就必须同时写入clash_api相关内容
注意:多个平级的{}之间需要使用逗号连接,如果只有一个同级{}则不要写逗号!
编辑$CRASHDIR/jsons/experimental.json
文件:
{
"experimental": {
"clash_api": {
"external_controller": "0.0.0.0:9999",
"external_ui": "ui",
"secret": "",
"default_mode": "Rule"
},
"cache_file": {
"enabled": true,
"path": "",
"cache_id": "",
"store_fakeip": false
}
}
}
示例:自定义路由规则
注意:如果你想自定义二级或者更低等级的json字段,则其上级字段也必须包含在文件中,否则singbox内核无法完成合并
注意:多个平级的{}之间需要使用逗号连接,如果只有一个同级{}则不要写逗号!
注意:简单规则推荐使用脚本内置:6-6-2自定义规则功能进行编辑,更简单直观!
具体字段内容可以参考:官方文档
编辑$CRASHDIR/jsons/route.json
文件:
{
"route": {
"rules": [
{ "inbound": [ "mixed-in" ], "outbound": "GLOBAL" },
{
"domain": [
"example.a.com",
"example.b.com"
],
"domain_suffix": [
"acl4.ssr",
"ip6-localhost"
],
"ip_cidr": [
"0.0.0.0/8",
"10.0.0.0/8"
],
"outbound": "🎯 全球直连"
},
{ "domain_suffix": [ "example.com" ], "outbound": "🚀 节点选择" },
{ "domain_keyword": [ "baidu" ], "outbound": "DIRECT" },
{ "source_ip_cidr": [ "10.0.0.0/24" ], "outbound": "REJECT" },
{ "rule-set": [ "geoip-cn" ], "outbound": "DIRECT" } //注意:仅限1.8.0以上版本内核搭配自定义rule-set规则使用
]
}
}
示例:自定义rule-set规则
注意:仅限1.8.0以上版本singbox内核
注意:如果你想自定义二级或者更低等级的json字段,则其上级字段也必须包含在文件中,否则singbox内核无法完成合并
注意:多个平级的{}之间需要使用逗号连接,如果只有一个同级{}则不要写逗号!
注意:你需要通过route.json模块或者dns.json模块来调用rule-set规则,详见示例:自定义路由规则 或 示例:自定义DNS
具体字段内容可以参考:官方文档
编辑$CRASHDIR/jsons/rule-set.json
文件:
{
"route": {
"rule_set": [
{
"tag": "geoip-cn",
"type": "local",
"format": "binary",
"path": "./geoip-cn.sys"
},
{
"tag": "geoip-us",
"type": "remote",
"format": "binary",
"url": "https://raw.githubusercontent.com/SagerNet/sing-geoip/rule-set/geoip-us.srs",
"download_detour": "proxy"
}
]
}
}
示例:自定义DNS
注意:由于dns.json是完全覆盖脚本内置设置,所以如需使用fakeip则切勿更改fakeip_range,以免引起回环!
注意:多个平级的{}之间需要使用逗号连接,如果只有一个同级{}则不要写逗号!
具体字段内容可以参考:官方文档
编辑$CRASHDIR/jsons/dns.json
文件:
{
"dns": {
"servers": [
{
"tag": "dns_proxy",
"address": "tls://1.0.0.1:853",
"strategy": "prefer_ipv4",
"address_resolver": "dns_resolver"
}, {
"tag": "dns_direct",
"address": "https://223.5.5.5/dns-query",
"strategy": "prefer_ipv4",
"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": ["cn"],
"query_type": [ "A", "AAAA" ],
"server": "dns_direct"
}, {
"geosite": ["geolocation-!cn"],
"query_type": [ "A", "AAAA" ],
"server": "dns_fakeip"
},
{
"rule-set": [ "geosite-cn" ],
"query_type": [ "A", "AAAA" ],
"server": "dns_direct"
} //注意:仅限1.8.0以上版本内核搭配自定义rule-set规则使用
],
"final": "dns_direct",
"independent_cache": true,
"reverse_mapping": true,
"fakeip": { "enabled": true, "inet4_range": "198.18.0.0/16", "inet6_range": "fc00::/16" }
}
}
需要更简单的配置模版?
可参考:DustinWin-sing-box教程基础篇 进行配置!