Neatbo.

静态路由选择解释

给定一张 IPv4/IPv6 路由表和目的地址,逐条说明最长前缀、metric、同级候选及拒绝动作,保留完整报告与原件。

浏览器本地处理输入声明路由表 JSON输出逐路由报告、CSV 与原件单个文件最多 10 MiB · 最多 1 个

请从原始路由文本手工整理单一静态表。工具解释声明的排名;缓存、重定向和现网策略需结合真实系统检查。

声明的路由和目标地址 JSON

只处理本角色当前选择的来源。先检查所选文件名和合计大小,再读取内容;未选择的来源不会参与处理。

就绪

尚无结果

开始之前

给定一张 IPv4/IPv6 路由表和目的地址,逐条说明最长前缀、metric、同级候选及拒绝动作,保留完整报告与原件。

如何使用

  1. 选择粘贴或文件模式。
  2. 输入声明路由与本次目的地址。
  3. 逐地址核对匹配理由和全部同级候选。
  4. 下载原件、完整 JSON 与 CSV,结合实际系统配置排查。

支持范围与限制

明确选择粘贴或单个 UTF-8 JSON 文件;只处理当前模式,原始输入最多 1 MiB。拒绝 BOM、损坏 UTF-8、重复键和有损数值。

1–4096 条路由、1–256 个目的地址,路由与目的地址的乘积最多 16384。id 和 interface 为 1–128 个 UTF-16 单元;metric 为 0–4294967295 整数,hopLimit 为 0–255 整数。

支持 unicast、blackhole、unreachable、prohibit。unicast 可声明同地址族 nextHop;CIDR 主机位会规范化并标记。IPv4 映射 IPv6 保持 IPv6 地址族。

只按最长前缀、再按最小 metric 筛选。保留全部同级候选;顺序和 hopLimit 不打破平局,混合动作平局明确标记。

完整 JSON、CSV、原件与复制文本合计最多 16 MiB;CSV 对公式前缀加单引号,JSON 与原件保持原值。超限整份拒绝。

此声明表不包含实际系统策略、缓存、重定向、接口状态或包级 ECMP;不能据此证明某个真实数据包的路径或修复系统问题。

原始 ip-route 文本需手工整理成声明的 JSON 字段。工具只读单一静态表,不能修复现网路由、缓存、重定向或策略。

只处理当前活动的粘贴或文件来源。活动文件名允许512 UTF-8字节、MIME标签128字节;原始输入保持逐字节完整,并提供来源SHA256。

10秒整体绝对期限从元数据检查和原生文件读取前开始,覆盖Worker加载到发布结果。取消、超时或换源会清空全部旧产物;完整来源保留,可再次运行。

完整JSON报告、公式安全CSV、原始输入和复制文本合计16 MiB。生成大字符串前先预留输出字节;typed报告和表格JSON另有16 MiB工作量上限,不发布部分输出。

操作示例

示例输入

{"routes":[{"id":"=default","cidr":"10.0.0.1/0","metric":100,"type":"unicast","nextHop":"10.0.0.1","interface":"网卡😀","hopLimit":64},{"id":"local","cidr":"10.0.0.0/24","metric":1,"type":"unicast"},{"id":"blocked","cidr":"2001:db8::/32","metric":0,"type":"blackhole"}],"destinations":["10.0.0.2","2001:db8::1","192.0.2.1"]}
示例参数
{"sourceMode":"paste"}

示例输出

{
  "schema": "neatbo-static-routes/1",
  "model": "single-declared-table-longest-prefix-then-lowest-unsigned-metric",
  "routeCount": 3,
  "destinationCount": 3,
  "comparisonCount": 9,
  "routes": [
    {
      "index": 0,
      "id": "=default",
      "source": {
        "id": "=default",
        "cidr": "10.0.0.1/0",
        "metric": 100,
        "type": "unicast",
        "nextHop": "10.0.0.1",
        "interface": "网卡😀",
        "hopLimit": 64
      },
      "family": "ipv4",
      "network": "0.0.0.0",
      "prefix": 0,
      "cidr": "0.0.0.0/0",
      "hostBitsNormalized": true,
      "metric": 100,
      "type": "unicast",
      "nextHop": "10.0.0.1",
      "interface": "网卡😀",
      "hopLimit": 64
    },
    {
      "index": 1,
      "id": "local",
      "source": {
        "id": "local",
        "cidr": "10.0.0.0/24",
        "metric": 1,
        "type": "unicast"
      },
      "family": "ipv4",
      "network": "10.0.0.0",
      "prefix": 24,
      "cidr": "10.0.0.0/24",
      "hostBitsNormalized": false,
      "metric": 1,
      "type": "unicast",
      "nextHop": null,
      "interface": null,
      "hopLimit": null
    },
    {
      "index": 2,
      "id": "blocked",
      "source": {
        "id": "blocked",
        "cidr": "2001:db8::/32",
        "metric": 0,
        "type": "blackhole"
      },
      "family": "ipv6",
      "network": "2001:db8::",
      "prefix": 32,
      "cidr": "2001:db8::/32",
      "hostBitsNormalized": false,
      "metric": 0,
      "type": "blackhole",
      "nextHop": null,
      "interface": null,
      "hopLimit": null
    }
  ],
  "results": [
    {
      "index": 0,
      "source": "10.0.0.2",
      "family": "ipv4",
      "canonical": "10.0.0.2",
      "bestPrefix": 24,
      "bestMetric": 1,
      "decision": "forward",
      "tie": false,
      "selectedRouteIndexes": [
        1
      ],
      "comparisons": [
        {
          "routeIndex": 0,
          "id": "=default",
          "matched": true,
          "selected": false,
          "reason": "shorter-prefix"
        },
        {
          "routeIndex": 1,
          "id": "local",
          "matched": true,
          "selected": true,
          "reason": "best-prefix-and-metric"
        },
        {
          "routeIndex": 2,
          "id": "blocked",
          "matched": false,
          "selected": false,
          "reason": "different-family"
        }
      ]
    },
    {
      "index": 1,
      "source": "2001:db8::1",
      "family": "ipv6",
      "canonical": "2001:db8::1",
      "bestPrefix": 32,
      "bestMetric": 0,
      "decision": "blackhole",
      "tie": false,
      "selectedRouteIndexes": [
        2
      ],
      "comparisons": [
        {
          "routeIndex": 0,
          "id": "=default",
          "matched": false,
          "selected": false,
          "reason": "different-family"
        },
        {
          "routeIndex": 1,
          "id": "local",
          "matched": false,
          "selected": false,
          "reason": "different-family"
        },
        {
          "routeIndex": 2,
          "id": "blocked",
          "matched": true,
          "selected": true,
          "reason": "best-prefix-and-metric"
        }
      ]
    },
    {
      "index": 2,
      "source": "192.0.2.1",
      "family": "ipv4",
      "canonical": "192.0.2.1",
      "bestPrefix": 0,
      "bestMetric": 100,
      "decision": "forward",
      "tie": false,
      "selectedRouteIndexes": [
        0
      ],
      "comparisons": [
        {
          "routeIndex": 0,
          "id": "=default",
          "matched": true,
          "selected": true,
          "reason": "best-prefix-and-metric"
        },
        {
          "routeIndex": 1,
          "id": "local",
          "matched": false,
          "selected": false,
          "reason": "outside-prefix"
        },
        {
          "routeIndex": 2,
          "id": "blocked",
          "matched": false,
          "selected": false,
          "reason": "different-family"
        }
      ]
    }
  ],
  "sourceInputs": [
    {
      "role": "routes",
      "kind": "paste",
      "name": "routes-pasted.json",
      "mime": "application/json",
      "bytes": 329,
      "sha256": "8317ee00408584deebeffc4a20b9de2c0cab7cdd0e21f9790aebdc07ce730795"
    }
  ],
  "inputBytes": 329,
  "sourceCount": 1
}

出现问题时

保留声明原件,按错误修正地址、字段或数值范围;超预算时拆分目的地址。取消或失败不交付部分报告,可保留同一输入重试。

常见问题

hopLimit 会改变候选排序吗?

不会。它只被保留,不作为本模型的路由排名条件。

两个候选完全同级时会选第一条吗?

不会。结果保留全部同级候选和动作歧义;包级选择需要实际系统的额外信息。

文档与延伸阅读

相关工具