你是否也有一台只带IPv6的“小鸡”(VPS)用来当作科学上网出口?它可能性能强劲,价格便宜,但一遇到只支持IPv4的网站、服务或资源时,就瞬间“残废”?别担心,今天我们来施展一场技术“复活术”,通过 SingBox 与 Cloudflare WARP 的终极配合,让你的V6小鸡满血复活,同时拥有速度起飞的原生IPv6和解锁全网的WARP IPv4,成为真正的“双栖王者”!
核心思路
我们的“法术”核心,在于利用 SingBox 路由规则的处理顺序和resolve行动触发的重新匹配机制,实现对流量的精准外科手术式分流。
- 对于IP地址请求,直接判断是V4还是V6,分发到对应出口。
- 对于域名请求,先强制解析成IP地址,然后带着IP地址回到规则列表顶部重新匹配,最终实现智能分流。
这套机制,保证了无论是IP直连还是域名访问,都能被精确地送往正确的网络路径。
准备工作 (施法材料)
-
一台
V6 Only的VPS服务器。 -
已正确安装并运行
SingBox。 推荐 https://233boy.com/sing-box/sing-box-script/ sing-box 一键安装脚本 -
已正确安装
Cloudflare WARP官方客户端,并设置为SOCKS5代理模式,监听本地的40000端口。
推荐 https://www.nodeseek.com/post-429175-1 中的 「安装WARP-cil:」
终极配置文件 (核心咒语)
这份配置经过了逻辑上的再次审视和优化,确保每一条规则都物尽其用。 如果有新的需求或优化,欢迎随时分享。
# 编辑SingBox配置文件
vim /etc/sing-box/config.json
{
// 日志配置
"log": {
// 日志文件输出路径
"output": "/var/log/sing-box/access.log",
// 日志级别,"fatal"表示仅记录最严重的错误,可改为 "info" 或 "debug" 进行调试
"level": "fatal",
// 为日志添加时间戳
"timestamp": true
},
// DNS 配置
"dns": {
"servers": [
{
// 本地DNS服务器,用于内部解析和缓存
"type": "local",
"tag": "local"
},
{
// Cloudflare 的 IPv6 DNS,用于常规解析
"tag": "cloudflare-doh",
"type": "udp",
"server": "[2606:4700:4700::1111]",
// 强制DNS请求通过原生网络(direct出口)发出
"detour": "direct"
}
],
// DNS解析策略,优先使用IPv6地址
"strategy": "prefer_ipv6",
// 是否禁用DNS缓存,false表示启用缓存
"disable_cache": false
},
// NTP 时间同步配置
"ntp": {
"enabled": true,
// NTP服务器地址
"server": "time.hko.hk",
// 强制NTP请求通过原生网络发出
"detour": "direct"
},
// 入站连接配置,可以根据需要添加 shadowsocks、vmess 等协议
"inbounds": [],
// 出站连接配置
"outbounds": [
{
// 标签为 "direct",代表原生网络连接
"tag": "direct",
"type": "direct",
// 此出口的域名解析策略
"domain_resolver": {
"server": "local",
// 核心设置:强制只解析和使用IPv6地址
"strategy": "ipv6_only"
}
},
{
// 标签为 "socks5-warp",代表通过WARP客户端的连接
"tag": "socks5-warp",
"type": "socks",
// WARP客户端监听的本地地址和端口
"server": "127.0.0.1",
"server_port": 40000,
"domain_resolver": {
"server": "local",
// 核心设置:强制只解析和使用IPv4地址
"strategy": "ipv4_only"
}
},
{
// 标签为 "gemini-proxy",一个非香港的特殊代理出口示例
"tag": "gemini-proxy",
"type": "socks",
// [如果是香港机器] 请替换为你的代理服务器IP或域名
"server": "your_proxy_ip_or_domain.com",
// [如果是香港机器] 请替换为你的代理服务器端口
"server_port": 12345,
// [如果是香港机器] 请替换为你的代理用户名
"username": "your_username",
// [如果是香港机器] 请替换为你的代理密码
"password": "your_password"
},
{
// 标签为 "block",用于阻止特定流量
"tag": "block",
"type": "block"
}
],
// 路由配置,这是整个分流策略的核心 (已按正确逻辑重排)
"route": {
// 远程规则集
"rule_set": [
{
"tag": "geosite-ai-no-cn",
"type": "remote",
"format": "binary",
"url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-category-ai-!cn.srs",
"update_interval": "1d",
// 关键设置:如果原生网络无法下载此规则,则通过 WARP(v4) 出口下载,解决V6 Only服务器的更新难题
"download_detour": "socks5-warp"
},
{
"tag": "geosite-finance",
"type": "remote",
"format": "binary",
"url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-category-finance.srs",
"update_interval": "1d",
"download_detour": "socks5-warp"
}
],
// 路由规则,按从上到下的顺序进行匹配
"rules": [
// 1. DNS协议处理 (拦截本地DNS请求交由sing-box处理,然后通过原生v6发出)
{
"action": "hijack-dns",
"protocol": "dns"
},
{
"protocol": "dns",
"outbound": "direct"
},
// 2. 特殊域名分流 (例如需要走特定代理的网站,优先级高于通用域名解析)
{
"rule_set": [
"geosite-ai-no-cn",
"geosite-finance"
],
"outbound": "gemini-proxy"
},
// 3. 强制解析所有其他域名流量 (这是后续IP分流的前提)
{
"action": "resolve",
"server": "local",
//或 "server": "cloudflare-doh",
// 通过ECS技术,伪装成香港地区IP,以获取更优的CDN节点
"client_subnet": "149.62.46.28/24"
},
// 4. 对解析出的IP进行V6判断 (此规则紧随resolve之后,匹配则走原生V6)
{
"ip_cidr": ["::/0"],
"outbound": "direct"
},
// 5. 兜底规则 (所有非V6流量,即V4或解析失败的,全部走WARP)
{
"outbound": "socks5-warp"
}
]
}
}
咒语详解
让我们深入剖析路由规则(route.rules)的真实运作流程,这其中有一个非常关键且巧妙的设计。SingBox的路由规则是按顺序从上到下匹配的。
情景一:当请求本身就是IP地址时 (例如SSH连接)
这个流程很简单:
- 请求进入路由规则。
- 如果是IPv6地址,会立刻被第4条规则
"ip_cidr": ["::/0"]捕获,直接从direct出口发出。 - 如果是IPv4地址,则会被第5条规则
"ip_cidr": ["0.0.0.0/0"]捕获,交给socks5-warp处理。
情景二:当请求是域名时 (例如 curl google.com)
这才是整个分流体系的精髓所在,让我们以一个域名请求 www.example.com 为例,追踪它在正确规则顺序下的旅程:
跳过预处理: 请求不是DNS协议,域名也不在我们的rule_set中。因此,它顺利通过了前3条规则。
执行强制解析: 请求来到了第4条规则 "action": "resolve"。Sing-Box立刻对 www.example.com 进行DNS查询。假设查询返回了一个IPv6地址 2a09:bac1:31c0::3cf:3e。
继续向下匹配 (关键!): Sing-Box不会回到顶部,而是带着这个IPv6地址,继续向下匹配紧随其后的规则。
IP分流成功: 请求来到了第5条规则 "ip_cidr": ["::/0"]。IP地址 2a09:bac1:31c0::3cf:3e 完美匹配IPv6的定义,于是被发往 direct 出口。匹配成功,流程结束。
IPv4的情况: 如果第2步中解析出的IP是IPv4地址 104.28.215.67。那么在第5条规则 "ip_cidr": ["::/0"] 处,匹配会失败。请求将继续向下,来到最后一条兜底规则,最终被发往 socks5-warp 出口。
总结
通过这套“域名请求 → 解析 → 带IP重匹配 → IP分流”的精妙闭环,我们完美实现了:
- 精确性: 无论是IP还是域名,都能被准确识别并导向正确的网络路径。
- 高性能: IPv6流量绝不会绕路WARP,保证了原生网络的最佳性能,畅享原生网络的低延迟和高速度。。
- 高可用: IPv4流量通过WARP获得生命,同时所有规则更新、DNS解析都能通过V4网络作为备用,极大地提高了服务器的可用性。
这不再仅仅是一个配置文件,而是一套优雅、高效的网络流量处理方案。现在,你可以充满信心地将这套“终极咒语”部署到你的V6小鸡上,享受它带来的丝滑体验了。
@ylck #28 高手可不会失业。我失业了没事干,慢慢仔细看的
不如xray直接添加warp出口
买了个WAP的香港一刀鸡,发现V6地址是台湾的,配合你这个再修改HOSTS指定gemini解析到IPV6,成功用这个鸡能用gemini了,真的大呼666
顶
好贴 收藏
厉害
把Sing-box玩起飞了
还是喜欢自带v4出口的v6机,以前套warp老是用不了多久就会掉v4...
学习
我不明白
好帖

但是我有个疑问
好像 sing-box 使用 resolve 动作后,后续都是用 ip 连接
如果是这样,无法把域名传入 alice 的家宽 socks5 节点,是不是不能访问例如 台湾 等当地流媒体
好货 回去试试
@hailarpig #7
json 配置里有特殊配置
// 2. 特殊域名分流 (例如需要走特定代理的网站,优先级高于通用域名解析)