# 10. SLURM(Simplified Local Internet Number Resource Management with the RPKI) ## 10.1 目标与范围 SLURM 用于让 RP(Relying Party)在本地对上游 RPKI 验证结果做“过滤”和“补充断言”,而不修改上游发布对象。 本文档基于: - RFC 8416(SLURM v1,ROA/BGPsec) - draft-ietf-sidrops-aspa-slurm-04(SLURM v2,新增 ASPA) ## 10.2 版本与顶层结构 ### 10.2.1 SLURM v1(RFC 8416) `slurmVersion` 必须为 `1`,且顶层 JSON 对象必须包含且仅包含以下成员: - `slurmVersion` - `validationOutputFilters`(必须包含 `prefixFilters`、`bgpsecFilters`) - `locallyAddedAssertions`(必须包含 `prefixAssertions`、`bgpsecAssertions`) 空策略示例: ```json { "slurmVersion": 1, "validationOutputFilters": { "prefixFilters": [], "bgpsecFilters": [] }, "locallyAddedAssertions": { "prefixAssertions": [], "bgpsecAssertions": [] } } ``` ### 10.2.2 SLURM v2(draft-04) `slurmVersion` 必须为 `2`,在 v1 基础上扩展 ASPA 两类成员: - `validationOutputFilters.aspaFilters` - `locallyAddedAssertions.aspaAssertions` 空策略示例: ```json { "slurmVersion": 2, "validationOutputFilters": { "prefixFilters": [], "bgpsecFilters": [], "aspaFilters": [] }, "locallyAddedAssertions": { "prefixAssertions": [], "bgpsecAssertions": [], "aspaAssertions": [] } } ``` ## 10.3 字段规范(RFC 8416) ### 10.3.1 `prefixFilters` 数组元素每项: - 必须至少包含一个:`prefix` 或 `asn` - 可选:`comment` 匹配规则: - 若配置了 `prefix`:匹配“被该前缀覆盖(encompassed)”的 VRP 前缀 - 若配置了 `asn`:匹配该 ASN - 同时配置时:两者都要匹配 ### 10.3.2 `bgpsecFilters` 数组元素每项: - 必须至少包含一个:`asn` 或 `SKI` - 可选:`comment` 匹配规则: - 按 `asn`/`SKI` 单独或联合匹配 Router Key(BGPsec) ### 10.3.3 `prefixAssertions` 数组元素每项: - 必须:`prefix`、`asn` - 可选:`maxPrefixLength`、`comment` 约束: - 若给出 `maxPrefixLength`,应满足 `prefix 长度 <= maxPrefixLength <= 地址位宽(IPv4=32, IPv6=128)` ### 10.3.4 `bgpsecAssertions` 数组元素每项: - 必须:`asn`、`SKI`、`routerPublicKey` - 可选:`comment` ## 10.4 ASPA 扩展(draft-ietf-sidrops-aspa-slurm-04) ### 10.4.1 `aspaFilters` 数组元素每项: - 必须:`customerAsn` - 可选:`comment` 匹配规则: - 当 VAP(Validated ASPA Payload)的 `customerAsn` 等于过滤器 `customerAsn` 时命中并移除。 ### 10.4.2 `aspaAssertions` 数组元素每项: - 必须:`customerAsn` - 必须:`providerAsns`(ASN 数组) - 可选:`comment` 关键约束(draft-04): - `customerAsn` 不得出现在 `providerAsns` 中 - `providerAsns` 必须按升序排列 - `providerAsns` 里的 ASN 必须唯一(无重复) 语义补充(draft-04): - `aspaAssertions` 仅用于“新增断言”,不构成隐式过滤(不会自动替代 `aspaFilters`)。 - 在 RTRv2 输出阶段,新增的 ASPA 断言应加入 ASPA PDU 集合,并做去重。 ## 10.5 应用语义(RFC 8416 Section 4) ### 10.5.1 原子性 SLURM 应用必须是原子的: - 要么完全不生效(等同未使用 SLURM) - 要么完整按当前 SLURM 配置生效 ### 10.5.2 处理顺序 在同一次计算中: 1. 先执行 `validationOutputFilters`(移除匹配验证结果) 2. 再追加 `locallyAddedAssertions` ### 10.5.3 多文件 实现可以支持多个 SLURM 文件并行使用(取并集),但在启用前应检查断言重叠冲突;若存在冲突,整组文件应被拒绝。 ## 10.6 最小可用示例(SLURM v2) ```json { "slurmVersion": 2, "validationOutputFilters": { "prefixFilters": [ { "prefix": "203.0.113.0/24", "comment": "Filter a broken VRP from upstream" } ], "bgpsecFilters": [], "aspaFilters": [ { "customerAsn": 64496, "comment": "Filter one customer ASPA" } ] }, "locallyAddedAssertions": { "prefixAssertions": [ { "asn": 64496, "prefix": "203.0.113.0/24", "maxPrefixLength": 24, "comment": "Local business exception" } ], "bgpsecAssertions": [], "aspaAssertions": [ { "customerAsn": 64496, "providerAsns": [64497, 64498], "comment": "Local ASPA assertion" } ] } } ``` ## 10.7 参考文献 - RFC 8416: https://www.rfc-editor.org/rfc/rfc8416.html - draft-ietf-sidrops-aspa-slurm-04: https://www.ietf.org/archive/id/draft-ietf-sidrops-aspa-slurm-04.html