#routes #verification #rpsl #bgp #irr #parser #routing

route_verification_as_rel

从IRR解析RPSL以验证观察到的BGP路由

2个版本

0.1.1 2024年8月18日
0.1.0 2023年11月6日

#11 in #irr


4个crate(2个直接)中使用

MIT许可

16KB
191

RPSLyzer:解析RPSL策略并验证BGP路由

RPSLyzer提供库和示例,以从互联网路由注册处(IRRs)解析路由策略规范语言(RPSL),并针对BGP表转储中的内部域路由进行验证。解析的重点在于与路由策略相关的RPSL对象和属性,主要集中在aut-num对象上。对于验证,我们简单地遍历每个BGP路由中的AS路径,并在路由的上下文中解释每个AS的aut-num对象中的策略。

在解析RPSL后,我们以JSON兼容的嵌套Rust数据结构的形式公开中间表示(IR)。您可以通过序列化的JSON从其他语言访问此IR。

用法

作为用户,您需要安装所需的工具、设置环境并直接使用Rust包route_verification。请参阅./ARTIFACTS.md以了解我们的数据获取、解析、验证和分析工作流程。注意:./ARTIFACTS.md正在完善(WIP);请参阅#164

仓库结构

  • 我们在./rfcs/处注释与RPSL相关的请求评论(RFC)。请查阅这些文档以了解我们使用的RPSL相关术语和RPSLyzer的限制。

  • 位于./rpsl_lexer/的RPSL词法分析器使用PyParsing和Python,与PyPy兼容。我们将其作为rpsl-lexer发布在PyPI上。

    rpsl-lexer将特定的RPSL语法标记化(词法分析)为抽象语法树(AST),特别是mp-importmp-export以及它们包含的<peering><filter>部分。我们主要从Rust库(route_verification_lex)通过UNIX管道调用此库。

    我们选择使用PyParsing进行标记化,以利用解析表达式语法(PEG)在递归定义的表达式中的强大功能。

  • ./route_verification/中的RPSL解析器、验证逻辑和读取-评估-打印循环(REPL)脚本示例是一系列Rust包(Rust库)和脚本。所有主要库包都在route_verification包中重新导出。

    所有重新导出的包在其路径名前都添加了route_verification_

    • route_verification_ir定义了中间表示(IR)和相关程序。
    • route_verification_lex将RPSL源代码解析成抽象语法树(AST)。它需要设置rpsl-lexer进行标记化(见上文)。
    • route_verification_parse将RPSL源代码解析成IR。它利用route_verification_lex进行标记化,然后解析AST到IR。
    • route_verification_irr从IRR解析RPSL源代码并将它们合并到一个IR中。
    • route_verification_as_rel解析应用互联网数据分析中心(CAIDA)的AS-relationship数据集以增强验证。
    • route_verification_bgp优化IR以供查询,并验证BGP路由与IR。它可以选择性地合并来自AS-relationship数据集的信息(通过伪as-set),并在验证过程中应用基于这些关系的特殊情况。

    此外,route_verification提供了一个命令行界面(CLI),用于解析IRR和测试运行验证。REPL脚本位于./route_verification/src/evcxr_examples.rs模块中。route_verification_rib_stats是生成目录中所有BGP表转储的统计信息的主要脚本,包括AS、AS对和路由级别。

    我们选择Rust作为IR、解析器和验证逻辑的编程语言,因为它具有强类型枚举和针对CPU密集型任务的令人满意的性能。

  • 我们用于分析并可视化结果的脚本位于./scripts/,这些脚本可作为这些任务的示例。大多数脚本是用Python编写的,并利用了常见的Python数据分析库,尽管其中一个CPU密集型脚本是用Rust编写的。

  • ./ARTIFACTS.md./ALIASES.md解释了如何运行脚本和常见变量名的含义。这些文档仍在进行中;请参阅#164

除了代码和简短文档外,此存储库的问题还包含有关此项目的详细讨论和开发记录。如果您遇到问题,我们建议使用GitHub的搜索来查找相关信息。

构建工具

我们在所有地方都使用用户友好、可重复和自动化的构建工具。所有Rust包都使用Cargo,Python库和脚本使用Rye。有关更多信息,请参阅./ARTIFACTS.md

Rust调试

  • 启用日志记录

    export RUST_LOG=route_verification=trace
    
  • 在错误消息中启用回溯(堆栈跟踪)

    export RUST_BACKTRACE=1
    

测试

请参阅.github/workflows/中的GitHub Actions以获取最新的测试。

维护状态

维护模式。我们不是积极开发此项目。只有错误修复贡献将被考虑。请根据需要进行分支和修改。

论文

这是对应于论文《RPSLyzer:互联网路由注册表中策略的特征化和验证》的代码和问题存储库。该论文已接受在ACM IMC'24上发表。我们正在制作最终版本,并将在此处链接预印本。

依赖关系

~7.5MB
~132K SLoC