在开头先写写,这篇文章其实自己也没有很大的底气写出来,因为不是网络相关专业的,仅仅是自己学习参考其他一部分人有讲解过后的教程/博客/视频等自己折腾的一套配置,应该会有错误的地方,请相关专业的大咖指出,愿意继续学习!
1. 为什么想折腾Sing-box
有一部分原因是看了坛友所发:
以下阐述针对Windows端:
一直以来我都是使用的clash,不过后面可能出了点事情,就换mihomo(clash meta)咯。一个是基本所有订阅都会有clash的订阅方式,一个是后面自己深入发现写写分流更简单。
不过最近看了几篇文章,发现 singbox 还挺不错的,还有就是clash也有点用腻了哈哈,动了想折腾的心思。
目前更新维护的速度非常感人,愿意称之为“究极为爱发电”,就是官方文档写的实在是太过 专业 了,因此需要折腾挺长一段时间的。 因此这边做个总结~
2. 不同模块的组成
2.1 log(日志)
这部分配置其实没啥好说的
"log": {
"disabled": false,
"level": "warn",
"timestamp": true
},
就日志的 level 这边需要看看,如果是要仔细看看具体的cli日志 设置成 info
或者 debug
即可。
2.2 DNS(我自用的主要是使用realip)
fakeip和realip其实一直在被讨论,虽然我用fakeip没有用出什么问题,但是我还是更愿意追求realip。
2.2.1 DNS.servers
"servers": [
{
"tag": "tx",
"address": "https://120.53.53.53/dns-query",
"detour": "direct"
},
{
"tag": "google",
"address": "https://dns.google/dns-query",
"address_resolver": "tx",
"address_strategy": "ipv4_only",
"strategy": "ipv4_only",
"client_subnet": "1.0.1.0"
}
],
国内dns目前我更推荐用腾讯,因为阿里马上就要做限制啦,虽然腾讯也有,不过还是腾讯的限制还是相对少一点的。
至于非国内的域名或者ip,更推荐google的doh,毕竟"大"。
那这边的配置其实很好理解 tag 是 tx 的就走国内直连
下面的google其实就是realip的一个应用了, client_subnet
为 1.0.1.0
简单理解 ,会根据你节点的位置,与google的dns服务器的距离,选择个最近的,这样延迟就会低一些,就会使得整体的dns解析就相对快很多,只要你不是延迟很高的节点,基本dns解析就是无感的,而且优越性在一定上比fakeip好些。
这边其实有个点我的配置都用的doh,也就是每次都得建立tcp连接,可能你会觉得很慢,实际体验下来不慢。后面看了部分讲解,因为只要链接过一次,就会链式的一直连下去,且会有缓存,就不会那么慢咯。
2.2.2 DNS.rules
"rules": [
{
"outbound": "any",
"server": "tx"
},
{
"clash_mode": "direct",
"server": "tx"
},
{
"clash_mode": "global",
"server": "google"
},
{
"rule_set": "geosite-cn",
"server": "tx"
},
{
"type": "logical",
"mode": "and",
"rules": [
{
"rule_set": "geolocation-!cn",
"invert": true
},
{
"rule_set": "geoip-cn"
}
],
"server": "google",
"client_subnet": "114.114.114.114/24"
}
],
"strategy": "ipv4_only",
"disable_cache": false,
"disable_expire": false,
"independent_cache": false,
"final": "google"
},
any
指代的其实就是订阅中会鉴权的时候 一般提供的都是域名,而进行鉴权认证的时候,肯定要走国内的dns,不然也连接不到google的dns,所以需要有个 any
。
后面的简单看看也就能理解,逻辑与那边简单提一下。
这是官方的无DNS泄露的一个案例,我觉得有必要放过来,实际上就是
当域名是中国的域名(不在 geolocation-!cn 集合中)与 IP 地址是中国的 IP 地址时,使用 Google DNS 服务器进行解析,并使用 114.114.114.114/24 作为客户端子网。
为了处理一些特殊情况,比如某些中国域名可能解析到国外 IP 地址,通过这个规则可以确保使用 Google DNS 来解析这些特殊的中国域名,同时告诉 Google DNS 服务器客户端位于中国(通过 client_subnet),以获得更准确的 DNS 解析结果。
2.3 inbounds(入站)
"inbounds": [
{
"tag": "tun",
"type": "tun",
"interface_name": "singbox",
"inet4_address": "172.19.0.1/30",
"mtu": 9000,
"stack": "mixed",
"auto_route": true,
"sniff": true,
"strict_route": true,
"platform": {
"http_proxy": {
"enabled": true,
"server": "127.0.0.1",
"server_port": 7890
}
}
}
],
这个tun入站,我踩了很多坑,后面也是慢慢排查才排查出来的。
至少在使用我整理的这份配置上, 一定要开启 sniff
嗅探,(插个题外话,个人觉得是realip的问题,所以必须开启sniff),不然会启动singbox后会非常非常卡,乃至连Google首页都进不去等情况。
stack
也建议开启 mixed
如果你对DNS泄露有严格想法的话,也要开启 strict_route
否则还是会存在泄露的情况,官方解释如下:
在 Windows 中:
添加防火墙规则以阻止 Windows 的 普通多宿主 DNS 解析行为 造成的 DNS 泄露
它可能会使某些应用程序(如 VirtualBox)在某些情况下无法正常工作。
2.4 outbounds(出站)
"outbounds": [
{
"tag": "direct",
"type": "direct"
},
{
"tag": "dns-out",
"type": "dns"
},
...
],
这边详细的请看我的自用配置
这边就是两个出站一定要写 一个是 direct
一个是 dns
2.5 route(路由)
2.5.1 route.rules
"rules": [
{
"protocol": "dns",
"outbound": "dns-out"
},
{
"ip_is_private": true,
"outbound": "direct"
},
{
"clash_mode": "direct",
"outbound": "direct"
},
{
"clash_mode": "global",
"outbound": "GLOBAL"
},
...
],
一样的 几个必要的一定要写,其他的请看我的自用配置,其实就是分流
2.5.2 route.rule_set
"rule_set": [
{
"tag": "geoip-apple",
"type": "remote",
"format": "binary",
"url": "https://github.com/MetaCubeX/meta-rules-dat/raw/sing/geo-lite/geoip/apple.srs",
"download_detour": "proxy"
},
...
],
很多规则集,具体看我的配置吧,你可以自己添加新的规则集。
需要注意的就是 singbox 更偏向使用 二进制文件的规则集 srs
可能考虑到,想要性能更好吧,具体看文档。
可以使用sing-box rule-set compile [--output <file-name>.srs] <file-name>.json
编译成二进制文件
这里推荐直接用 MetaCubeX
维护的singbox规则集就行,如果你有自己需要维护的,根据上面的命令自行转换即可
2.6 experimental
2.6.1 experimental.cache_file
"cache_file": {
"enabled": true
},
就是缓存文件,打开就行,缓存一些路由等等
2.6.2 experimental.clash_api
"clash_api": {
"external_controller": "127.0.0.1:9090",
"external_ui": "ui",
"external_ui_download_url": "https://github.com/MetaCubeX/Yacd-meta/archive/gh-pages.zip",
"external_ui_download_detour": "proxy",
"default_mode": "rule"
}
简单理解 就是一个可视化的面板 因为singbox官方还没出Windows的客户端,可以暂时先用clash_api来代替
3. 如何搭配sub-store使用
3.1 搭建sub-store
git clone https://github.com/sub-store-org/Sub-Store.git
cd ./Sub-Store/backend
# 我是用的是fnm 创建了一个 node -v 是 18 的(也推荐这个版本 不然启动会有奇怪的问题)
npm install -g pnpm
pnpm i
pnpm run --parallel --stream "/^dev:.*/"
这样就启动起来了,不过是后端,搭配官方的前端 sub-store.vercel.app/?api=http://127.0.0.1:3000
使用即可
3.2 导入自己的订阅
3.3 生成singbox配置文件
链接
里 填写 自用配置的远程地址 这边以 realip 为例
https://raw.githubusercontent.com/yyhhyyyyyy/selfproxy/main/Sing-Box/singbox_realip.json
添加一个 脚本操作
然后选择 链接
填写
https://raw.githubusercontent.com/yyhhyyyyyy/selfproxy/main/Sing-Box/tp.js#name=klm&outbound=🕳ℹ️all|all-auto🕳ℹ️hk|hk-auto🏷ℹ️港|hk|hongkong|kong kong|🇭🇰🕳ℹ️tw|tw-auto🏷ℹ️台|tw|taiwan|🇹🇼🕳ℹ️jp|jp-auto🏷ℹ️日本|jp|japan|🇯🇵🕳ℹ️sg|sg-auto🏷ℹ️^(?!.*(?:us)).*(新|sg|singapore|🇸🇬)🕳ℹ️us|us-auto🏷ℹ️美|us|unitedstates|united states|🇺🇸🕳ℹ️de|de-auto🏷ℹ️德|de|germany|🇩🇪🕳ℹ️gb|gb-auto🏷ℹ️英|uk|unitedkingdom|united kingdom|🇬🇧🕳ℹ️kr|kr-auto🏷ℹ️韩|kr|korea|southkorea|🇰🇷🕳ℹ️fr|fr-auto🏷ℹ️法|fr|france|🇫🇷🕳ℹ️nl|nl-auto🏷ℹ️荷|nl|netherlands|🇳🇱🕳ℹ️in|in-auto🏷ℹ️印|india|🇮🇳🕳ℹ️tr|tr-auto🏷ℹ️(🇹🇷)|(土)|(Türkiye)|turkey
其实就是分国家组啦 脚本如果有需要自行看js内容
最后点 即使预览
就能copy 整份 配置的 json文件了
4. 运行singbox
# 先进入到singbox目录 然后执行
.\singbox.exe run -c .\singbox.json
就能跑起来咯, 不过不好的地方就是目前是 cli 的形式 ,就是启动后的 cmd or powershell 需要放在后台, 后面有空在把静默启动的教程也一并写入吧~
5. 参考文档
6. 仓库地址
自己的配置仓库地址 如果有用,欢迎各位帅哥点个小小的star~
包含自用的 clash(mihomo) surge singbox 配置