logo NodeSeekbeta

[教程] V6小鸡复活术!解锁原生IPv6与WARP IPv4双出口

你是否也有一台只带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"
      }
    ],
     // 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连接)
这个流程很简单:

  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小鸡上,享受它带来的丝滑体验了。

12345
  • @ylck #28 高手可不会失业。我失业了没事干,慢慢仔细看的

  • 不如xray直接添加warp出口

  • 买了个WAP的香港一刀鸡,发现V6地址是台湾的,配合你这个再修改HOSTS指定gemini解析到IPV6,成功用这个鸡能用gemini了,真的大呼666 xhj006

  • 顶

  • 好贴 收藏 xhj003

  • 厉害 xhj003 把Sing-box玩起飞了

  • 还是喜欢自带v4出口的v6机,以前套warp老是用不了多久就会掉v4...

  • 学习

  • 我不明白

  • 好帖
    xhj002
    但是我有个疑问
    好像 sing-box 使用 resolve 动作后,后续都是用 ip 连接
    如果是这样,无法把域名传入 alice 的家宽 socks5 节点,是不是不能访问例如 台湾 等当地流媒体

  • 好货 回去试试

  • @hailarpig #7
    json 配置里有特殊配置
    // 2. 特殊域名分流 (例如需要走特定代理的网站,优先级高于通用域名解析)

12345

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有72782位seeker

🎉欢迎新用户🎉