·singbox中各个json模块的基本结构:
singbox在启动时,会自动将指定目录下的json文件加载及合并运行
每个json文件必须具有标准的json结构,否则就会报错
{
"log": {},
"dns": {},
"ntp": {},
"certificate": {},
"inbounds": [],
"outbounds": [],
"providers": [], //限reF1nd分支内核
"route": {},
"endpoints": [],
"experimental": {}
}
例如如果想要自定义dns.json模块
则内部结构必须是如下的形式,即开头和结尾的1级花括号必须存在!
{
"dns": {
"servers": [……]
}
}
具体的格式可以在正确运行singbox内核后,参考/tmp/ShellCrash/jsons 目录下的相关文件
你也可以通过 https://www.json.cn 来在线解析json格式是否正确
·ShellCrash中自定义配置文件的名称及目录:
目前 log dns ntp experimental 是替换内置设定而非合并,即自定义的内容会覆盖脚本生成的内容,需要谨慎使用,请确保不会影响脚本内置功能的使用
而inbounds outbounds 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": true,
"server": "time.apple.com",
"server_port": 123,
"interval": "30m"
}
}
示例:自定义providers,实现在线更新订阅
注意:providers功能仅限reF1nd版内核使用!
注意:每个例如"my_airport1"的tag应当在outbounds模块中被正确引用!你可以通过搭配自定义outbounds.json来使用!
注意:多个平级的{}之间需要使用逗号连接,如果只有一个同级{}则不要写逗号!
具体字段内容可以参考:订阅 - sing-box (dustinwin.us.kg)
编辑$CRASHDIR/jsons/providers.json文件:
{
"providers": [
{
"type": "remote",
"tag": "my_airport1",
"url": "https://my_airport1.com/asdfghjkl123",
"path": "./providers/my_airport1.yaml",
"user_agent": "clash.meta;mihomo",
"update_interval": "24h0m0s",
"health_check": {
"enabled": true,
"url": "https://www.gstatic.com/generate_204",
"interval": "10m0s",
"timeout": "3s"
},
"override_tls": {
"enabled": true,
"insecure": true
}
},
{
"type": "remote",
"tag": "my_airport2",
"url": "https://my_airport2.com/asdfghjkl123",
"path": "./providers/my_airport2.yaml",
"user_agent": "clash.meta;mihomo",
"update_interval": "24h0m0s",
"health_check": {
"enabled": true,
"url": "https://www.gstatic.com/generate_204",
"interval": "10m0s",
"timeout": "3s"
},
"override_tls": {
"enabled": true,
"insecure": true
}
}
]
}
编辑$CRASHDIR/jsons/outbounds.json文件以引用providers:
注意:如果你还想编辑自定义节点或者其他outbounds模块内容,必须都写在同一个文件内,脚本不会加载诸如outbounds2.json这样的文件,多个平级的{}之间请使用逗号连接,如果只有一个同级{}则不要写逗号!
{
"outbounds": [
{
"type": "selector",
"tag": "🇭🇰 香港节点",
"providers": [ "my_airport1" ],
"includes": [ "香港.*BGP" ],
"use_all_providers": true
},
{
"type": "urltest",
"tag": "🇸🇬 新加坡节点",
"tolerance": 100,
"providers": [ "my_airport2" ],
"includes": [ "新加坡" ],
"use_all_providers": true
}
]
}
示例:自定义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/inbounds.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
}
]
}
示例:启用Tailscale异地组网客户端
注意:默认内核为了节约内存考虑并为编译tailscale支持,请前往更新-内核-自定义内核界面下载安装完整版singbox内核
注意:需要在Tailscale官网创建账号后,在Keys - Tailscale界面创建Auth key并填入"auth_key":中方可正确连接!
注意:多个平级的{}之间需要使用逗号连接,如果只有一个同级{}则不要写逗号!
具体字段内容可以参考:官方文档
编辑$CRASHDIR/jsons/endpoints.json文件:
{
"endpoints": [
{
"type": "tailscale",
"tag": "ts-ep",
"state_directory": "/tmp/ShellCrash/tailscale",
"auth_key": "tskey-auth-abcddsfqwe-12315kjdlasjlfjljg", //此处换成你自己的auth_key
"control_url": "",
"ephemeral": false,
"hostname": "ShellCrash",
"accept_routes": true,
"exit_node": "", //默认直连,如果延迟高可以尝试换成你希望使用的代理出口,不推荐
"exit_node_allow_lan_access": false,
"advertise_routes": [],
"advertise_exit_node": false,
"udp_timeout": "5m"
}
]
}
示例:启用内核内置缓存功能
注意:本处示例仅支持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",
"external_ui_download_url": "",
"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" }
]
}
}
示例:自定义rule-set规则
注意:如果你想自定义二级或者更低等级的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",
"type": "https",
"server": "doh.pub",
"routing_mark": 7894,
"detour": "👑 高级节点",
"domain_resolver": "dns_resolver"
},
{
"tag": "dns_direct",
"type": "https",
"server": "doh.pub",
"routing_mark": 7894,
"domain_resolver": "dns_resolver"
},
{
"tag": "dns_fakeip",
"type": "fakeip",
"inet4_range": "28.0.0.1/8",
"inet6_range": "fc00::/16"
},
{
"tag": "dns_resolver",
"type": "https",
"server": "223.5.5.5",
"routing_mark": 7894
}
],
"rules": [
{ "clash_mode": "Direct", "server": "dns_direct", "strategy": "prefer_ipv4" },
{ "domain_suffix": ["services.googleapis.cn"], "server": "dns_fakeip", "strategy": "prefer_ipv4", "rewrite_ttl": 1 },
{ "domain": ["time-ios.apple.com", "time1.cloud.tencent.com", "music.163.com", "musicapi.taihe.com", "music.taihe.com", "songsearch.kugou.com", "trackercdn.kugou.com", "api-jooxtt.sanook.com", "api.joox.com", "joox.com", "y.qq.com", "streamoc.music.tc.qq.com", "mobileoc.music.tc.qq.com", "isure.stream.qqmusic.qq.com", "dl.stream.qqmusic.qq.com", "aqqmusic.tc.qq.com", "amobile.music.tc.qq.com", "music.migu.cn", "localhost.ptlogin2.qq.com", "localhost.sec.qq.com", "xnotify.xboxlive.com", "proxy.golang.org", "heartbeat.belkin.com", "mesu.apple.com", "swscan.apple.com", "swquery.apple.com", "swdownload.apple.com", "swcdn.apple.com", "swdist.apple.com", "lens.l.google.com", "na.b.g-tun.com", "ff.dorado.sdo.com", "shark007.net", "adguardteam.github.io", "adrules.top", "anti-ad.net", "local.adguard.org", "static.adtidy.org", "ps.res.netease.com"], "server": "dns_direct" },
{ "domain_suffix": ["*", "lan", "localdomain", "example", "invalid", "localhost", "test", "local", "home.arpa", "direct", "time.edu.cn", "ntp.org.cn", "pool.ntp.org", "music.163.com", "126.net", "kuwo.cn", "y.qq.com", "xiami.com", "music.migu.cn", "msftconnecttest.com", "msftncsi.com", "steamcontent.com", "srv.nintendo.net", "n.n.srv.nintendo.net", "cdn.nintendo.net", "battle.net", "battlenet.com.cn", "wotgame.cn", "wggames.cn", "wowsgame.cn", "wargaming.net", "linksys.com", "linksyssmartwifi.com", "router.asus.com", "nflxvideo.net", "square-enix.com", "finalfantasyxiv.com", "ffxiv.com", "ff14.sdo.com", "mcdn.bilivideo.cn", "media.dssott.com", "market.xiaomi.com", "cmbchina.com", "cmbimg.com", "sandai.net", "n0808.com", "3gppnetwork.org", "uu.163.com", "pub.3gppnetwork.org", "oray.com", "orayimg.com", "gcloudcs.com", "gcloudsdk.com"], "server": "dns_direct" },
{ "domain_regex": ["time.*.com", "time.*.gov", "time.*.edu.cn", "time.*.apple.com", "time1.*.com", "time2.*.com", "time3.*.com", "time4.*.com", "time5.*.com", "time6.*.com", "time7.*.com", "ntp.*.com", "ntp1.*.com", "ntp2.*.com", "ntp3.*.com", "ntp4.*.com", "ntp5.*.com", "ntp6.*.com", "ntp7.*.com", "localhost.*.weixin.qq.com", "xbox.*.*.microsoft.com", ".*.*.xboxlive.com", "xbox.*.microsoft.com", ".+.stun.*.*", ".+.stun.*.*.*", ".+.stun.*.*.*.*", ".+.stun.*.*.*.*.*"], "server": "dns_direct" },
{ "clash_mode": "Global", "query_type": ["A", "AAAA"], "server": "dns_fakeip", "strategy": "prefer_ipv4", "rewrite_ttl": 1 },
{ "rule_set": ["geosite-cn"], "server": "dns_direct" },
{ "query_type": ["A", "AAAA"], "server": "dns_fakeip", "strategy": "prefer_ipv4", "rewrite_ttl": 1 }
],
"final": "dns_proxy",
"strategy": "prefer_ipv4",
"independent_cache": true,
"reverse_mapping": true
}
}
需要更简单的配置模版?
可参考:DustinWin-sing-box教程基础篇 进行配置!