MENU

sing-box ipv4与ipv6分流

• 2026 年 09 月 10 日 • 阅读: 8 • 技术,解难

前情提要:两个机子,一个是美西线路机(sing-box运行机器),一个是家宽(图便宜买的 ipv6 AT&T 家宽的 NAT,机器的 ipv4是 idc出口),机器内存128M,开了个 socks5 代理。由于内存较低,且为alpine系统所以暂不考虑在这个家宽NAT里直接运行warp。

机制

所有流量
  ↓ rule[0]  action=resolve + strategy=prefer_ipv6
    把域名目标在本地解析成 1 个确定的 IP:
      有 AAAA → IPv6(优先);只有 A → IPv4;本来就是 IP → 跳过
  ↓ rule[1]  ip_cidr ::/0        → warp-ipv6 (<家宽IP>:<socks端口>)
  ↓ rule[2]  ip_cidr 0.0.0.0/0   → warp-ipv4 (127.0.0.1:40001)
  ↓ final=block(解析失败/兜底一律丢弃,不串出口)
flowchart TD
    A["入站连接<br/>(目标 = 域名 或 IP)"] --> B{"目标是域名?"}

    B -- "是" --> C["rule0: action=resolve<br/>strategy=prefer_ipv6<br/>用本地 DNS 解析"]
    B -- "否:本来就是 IP" --> D["resolve 跳过"]

    C --> E{"该域名有 AAAA?"}
    E -- "有" --> F["解析为 IPv6"]
    E -- "无,仅 A" --> G["解析为 IPv4"]

    F --> H{"最终目标 family"}
    G --> H
    D --> H

    H -- "IPv6" --> I["rule1: ip_cidr ::/0"]
    H -- "IPv4" --> J["rule2: ip_cidr 0.0.0.0/0"]

    I --> K["outbound: warp-ipv6<br/>家宽NAT<br/>AT&T Residential IPv6"]
    J --> L["outbound: warp-ipv4<br/>127.0.0.1:40000<br/>Cloudflare WARP IPv4"]

    K --> M["落地"]
    L --> M

    N["解析失败 / 未匹配任何规则"] --> O["route.final = block<br/>(直接丢弃)"]

配置文件示例

{
  "dns": {
    "servers": [
      {
        "tag": "dns_google",
        "address": "8.8.8.8",
        "detour": "direct"
      },
      {
        "tag": "dns_cloudflare",
        "address": "1.1.1.1",
        "detour": "direct"
      }
    ],
    "final": "dns_google",
    "strategy": "prefer_ipv6"
  },

  "outbounds": [
    {
      "type": "socks",
      "tag": "warp-ipv6",
      "server": "<家宽NAT的IP地址>",
      "server_port": <socks5的端口>,
      "version": "5",
      "username": "<账号>",
      "password": "<密码>",
      "network": [
        "tcp",
        "udp"
      ]
    },
    {
      "type": "socks",
      "tag": "warp-ipv4",
      "server": "127.0.0.1",
      "server_port": 40000,
      "version": "5",
      "network": [
        "tcp",
        "udp"
      ]
    },
    {
      "type": "direct",
      "tag": "direct"
    },
    {
      "type": "block",
      "tag": "block"
    }
  ],

  "route": {
    "rules": [
      {
        "action": "resolve",
        "strategy": "prefer_ipv6"
      },
      {
        "ip_cidr": [
          "::/0"
        ],
        "action": "route",
        "outbound": "warp-ipv6"
      },
      {
        "ip_cidr": [
          "0.0.0.0/0"
        ],
        "action": "route",
        "outbound": "warp-ipv4"
      }
    ],
    "final": "block"
  }
}

经过测试,只有在分流前直接进行DNS解析才能有效的分流,否则会出现问题。

返回文章列表 打赏
本页链接的二维码
打赏二维码