你是否也有一台只带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" }, { // 阿里云的 IPv6 DNS,专门用于解析国内域名 "tag": "ali-doh-v6", "type": "udp", "server": "[2400:3200::1]", "detour": "direct" } ], "rules": [ { // 匹配所有 .cn 后缀和苹果国内域名 "domain_suffix": [".cn", "apple.com.cn"], // 交给阿里云DNS解析,以获得最佳国内解析速度和准确性 "server": "ali-doh-v6" }, { // 其他所有域名都交给Cloudflare解析 "server": "cloudflare-doh" } ], // 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", // 通过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小鸡上,享受它带来的丝滑体验了。
评论 (0)