ESC

开始输入,可搜索发票、服务、域名、工单,以及 更多...

搜索... Ctrl+K
IP 与 ASN

IRR 路由对象创建教程:RIPE 数据库与 RADB 的 route/route6、as-set 及 whois 验证

6 个步骤 9 分钟阅读 3 次阅读 0
本文目录

想让自己的 ASN 广播的 IP 前缀被上游和 IX 接受,第一步往往是创建 IRR 路由对象。IRR(Internet Routing Registry,互联网路由注册库)记录“哪个前缀由哪个 ASN 发起”,上游运营商会据此自动生成 BGP 前缀过滤器,没有路由对象的前缀通常会被直接过滤。本文讲解 RIPE 数据库中 route / route6 对象的写法、非 RIPE 地址如何使用 RADB、as-set 的基本概念、上游如何从 IRR 生成过滤器,以及用 whois 验证。命令适用于 Debian/Ubuntu 与 CentOS/Rocky/AlmaLinux。

示例使用文档地址 203.0.113.0/24、198.51.100.0/24、2001:db8:1000::/48 和私有 ASN AS64500,请替换为你的实际资源。如果你是从 IMIDC 租用 IP 并用自有 ASN 广播,请同时参考“用自有 ASN 广播租用 IP 段(LOA)”与“ROA/RPKI”教程。

步骤 1:确认 IP 段所属 RIR 与维护者(mnt-by)

route 对象应该建在 IP 段所属 RIR 的数据库里:RIPE 区域地址建在 RIPE DB,APNIC 地址建在 APNIC 库,ARIN 地址可用 ARIN 自己的 IRR,其他情况或需要补充时常用 RADB。先查询 inetnum 的维护者以及你的 aut-num:

# install whois: Debian/Ubuntu
apt install -y whois
# CentOS/Rocky/AlmaLinux
dnf install -y whois

# which RIR and maintainer hold the block?
whois -h whois.ripe.net 203.0.113.0/24 | grep -E 'inetnum|netname|mnt-by|mnt-routes|mnt-lower|source'
whois -h whois.ripe.net AS64500 | grep -E 'aut-num|as-name|mnt-by'

在 RIPE 数据库中创建 route 对象需要两方授权:IP 段的 mnt-routes(或 mnt-lower / mnt-by)维护者,以及 origin 所指 ASN 的维护者。如果 IP 是向 IMIDC 租用的,前缀授权由 IMIDC 的维护者完成,请通过工单提交前缀与 ASN,由我们创建或协助授权。

步骤 2:在 RIPE 数据库中编写 route / route6 对象

RIPE 数据库支持网页编辑(登录 RIPE NCC Access 后在 Database 中选择“Create an object”)和电子邮件/whois 风格的纯文本提交。核心字段只有几个:route(前缀)、origin(发起 ASN)、mnt-by(你的维护者)、source(数据库名)。IPv6 使用 route6:

route:          203.0.113.0/24
descr:          Example Networks - leased from IMIDC
origin:         AS64500
mnt-by:         EXAMPLE-MNT
source:         RIPE

route6:         2001:db8:1000::/48
descr:          Example Networks IPv6
origin:         AS64500
mnt-by:         EXAMPLE-MNT
source:         RIPE
  • route / route6:前缀必须与实际广播的长度一致;同时广播 /23 和两个 /24 时,需要分别建三个对象。
  • origin:发起该前缀的 ASN,如有多个 ASN 广播同一前缀,每个 ASN 各建一个对象。
  • mnt-by:日后修改、删除该对象所需的维护者。

步骤 3:非 RIPE 地址使用 RADB 创建路由对象

RADB 是由 Merit 运营的公共 IRR,许多北美、亚太的上游都会查询它,并且它镜像了大量其他 IRR。使用 RADB 需要先申请一个维护者(maintainer)账户(RADB 是付费服务),然后通过网页或邮件提交对象。注意 source 字段为 RADB:

route:          198.51.100.0/24
descr:          Example Networks
origin:         AS64500
mnt-by:         MAINT-AS64500
source:         RADB
只为你有权广播的前缀创建路由对象。不要为他人地址随意创建 RADB 对象,部分上游会结合 RIR 数据和 LOA 交叉核验,不一致会被拒绝。

步骤 4:用 as-set 管理多个 ASN(可选)

如果你自己还有下游客户 ASN,上游需要知道你可能转发哪些 ASN 的前缀,这时就要用 as-set。命名推荐使用“层级式”写法(AS号:AS-名称),members 中列出你自己和下游的 ASN,也可以嵌套其他 as-set。然后把 as-set 名告诉上游,并在 aut-num 的 export 策略中引用它。

as-set:         AS64500:AS-CUSTOMERS
descr:          AS64500 and its downstream customers
members:        AS64500
members:        AS64501, AS64502
mnt-by:         EXAMPLE-MNT
source:         RIPE

步骤 5:了解上游如何从 IRR 生成 BGP 前缀过滤器

大多数上游使用 bgpq4 这类工具,按你提交的 ASN 或 as-set 查询 IRR,展开出所有 route 对象,生成路由器的前缀列表,并定时刷新。你可以自己运行同样的命令,提前看到上游会允许哪些前缀:

# Debian/Ubuntu
apt install -y bgpq4
# CentOS/Rocky/AlmaLinux (EPEL)
dnf install -y epel-release && dnf install -y bgpq4

# IPv4 prefix list for everything AS64500 originates
bgpq4 -4 -l AS64500-IN AS64500
# IPv6, expanding an as-set, BIRD syntax
bgpq4 -6 -b -l AS64500_V6 AS64500:AS-CUSTOMERS
# aggregate output (-A) for a large as-set
bgpq4 -4 -A -l CUST-IN AS64500:AS-CUSTOMERS

如果输出里没有你的前缀,上游大概率也会过滤掉它。不同上游刷新周期不同,从数小时到一天一次不等,更新对象后可以工单通知上游手动刷新。

步骤 6:用 whois -h whois.radb.net 验证路由对象

对象创建后,通过 whois 确认已经生效。RADB 镜像了 RIPE、APNIC、ARIN 等多个 IRR,所以查 whois.radb.net 可以大致代表上游看到的结果(镜像同步可能有延迟):

# route object for a prefix (RADB mirrors most IRRs)
whois -h whois.radb.net 203.0.113.0/24
# all route objects with origin AS64500
whois -h whois.radb.net -- '-i origin AS64500'
# RIPE DB only, route and route6
whois -h whois.ripe.net -- '-T route,route6 -i origin AS64500'
# members of an as-set
whois -h whois.radb.net AS64500:AS-CUSTOMERS

常见问题

RIPE 创建 route 对象时提示认证失败?

通常是缺少 IP 段维护者的授权。租用的 IP 段由 IMIDC 维护,请提交工单提供前缀、ASN 和你的 mnt-by 名称,由我们完成授权或代为创建。

路由对象和 ROA 有什么区别?

路由对象属于 IRR,用于上游生成过滤器,任何有维护者权限的人都能创建;ROA 属于 RPKI,由地址持有方通过 RIR 加密签发,用于路由源验证。两者最好同时具备且 ASN 一致。

不再使用的前缀需要删除路由对象吗?

需要。过期的路由对象会让他人误以为该 ASN 仍可广播该前缀,带来安全隐患。停止广播或租期结束时请及时删除,或联系我们处理。

如仍无法解决,可提交工单联系 IMIDC 7×24 技术支持:https://www.imidc.com/submitticket.php

这篇文章有帮助吗?

相关教程