你是否也有一台只带IPv6的“小鸡”(VPS)用来当作科学上网出口?它可能性能强劲,价格便宜,但一遇到只支持IPv4的网站、服务或资源时,就瞬间“残废”?别担心,今天我们来施展一场技术“复活术”,通过 SingBox 与 Cloudflare WARP 的终极配合,让你的V6小鸡满血复活,同时拥有速度起飞的原生IPv6和解锁全网的WARP IPv4,成为真正的“双栖王者”!

核心思路

我们的“法术”核心,在于利用 SingBox 路由规则的处理顺序resolve行动触发的重新匹配机制,实现对流量的精准外科手术式分流。

  • 对于IP地址请求,直接判断是V4还是V6,分发到对应出口。
  • 对于域名请求,先强制解析成IP地址,然后带着IP地址回到规则列表顶部重新匹配,最终实现智能分流。

这套机制,保证了无论是IP直连还是域名访问,都能被精确地送往正确的网络路径。

准备工作 (施法材料)
  1. 一台 V6 Only 的VPS服务器。

  2. 已正确安装并运行 SingBox。 推荐 https://233boy.com/sing-box/sing-box-script/ sing-box 一键安装脚本

  3. 已正确安装 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连接)
这个流程很简单:

  1. 请求进入路由规则。
  2. 如果是IPv6地址,会立刻被第4条规则 "ip_cidr": ["::/0"] 捕获,直接从direct出口发出。
  3. 如果是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小鸡上,享受它带来的丝滑体验了。