Kawaii Networks 的路由过滤算法
我们使用 bgpq4 生成 as-set 以及 prefix list。采用的数据库包括:
RPKI,AFRINIC,ARIN,APNIC,LACNIC,RIPE,RADB,ALTDB
名词含义:
- 接受:接受路由,此后不再参与过滤。
- 拒绝:拒绝路由,此后不再参与过滤。
- 匹配:匹配路由,此后继续参与过滤。
对于每个 BGP 会话,我们都会生成一个对应的接收过滤器以及发送过滤器。路由器配置文件每日 10 点,22 点由 Github Actions 生成,12 点,0 点应用。具体算法如下:
接收路由
IBGP
- 接受所有额外允许的 prefix。
- 接受所有属于自己 AS 的前缀,最长可接受 32(IPv4)和 128(IPv6)。
- 拒绝所有前缀长度在 0-7 ,25-32 的路由(IPv4),所有前缀长度在 0-15,49-128 的路由(IPv6)。拒绝所有 as-path 包含 Bogon ASN 的路由。拒绝所有 Bogon IPv4 以及 Bogon IPv6 前缀。
- 拒绝所有 RPKI Invalid 的路由。
路由属性:
- 设置所有接受的路由的 local-preference 为 90。
TIP
关于 IBGP 的 local-preference,目前未有定论。应与发送模式有关。
EBGP
Upstream
- 拒绝所有前缀长度在 0-7 ,25-32 的路由(IPv4),所有前缀长度在 0-15,49-128 的路由(IPv6)。拒绝所有 as-path 包含 Bogon ASN 的路由。拒绝所有 Bogon IPv4 以及 Bogon IPv6 前缀。
- 拒绝所有 RPKI Invalid 的路由。
路由属性:
- 设置所有接受的路由的 local-preference 为 100。
IX Route Server
如果该 IX 在 PeeringDB 上未设置 IRR as-set,则如同 Upstream 处理。 如果该 IX 在 PeeringDB 上设置了 IRR as-set,则如同 Peer 处理。
路由属性:
- 设置所有接受的路由的 local-preference 为 130。
TIP
目前将所有的 IX Route Server 视为 Upstream 处理。
Peer
- 对于一个与我们建立连接的网络,首先在 PeeringDB 上使用 ASN 查找该网络的 IRR as-set,IPv4 Prefixes,IPv6 Prefixes。如果 IRR as-set 为空,则使用其 ASN 作为 AS-SET (如 AS23333)。如果 IPv4 Prefixes 或 IPv6 Prefixes 为空(0),则关闭会话。
- 拒绝所有前缀长度在 0-7 ,25-32 的路由(IPv4),所有前缀长度在 0-15,49-128 的路由(IPv6)。拒绝所有 as-path 包含 Bogon ASN 的路由。拒绝所有 Bogon IPv4 以及 Bogon IPv6 前缀。
- 拒绝所有 RPKI Invalid 的路由。
- 拒绝所有 as-path 不符合该网络的 AS-SET 的路由。as-path 应当如同金字塔一般,从左至右相邻的 AS 均为直接的 Upstream - Downstream 关系。
- 拒绝所有不在 prefix list 中的路由。
路由属性:
- 设置所有接受的路由的 local-preference 为 160。
TIP
目前只拒绝 as-path 不符合最左侧是 Peer AS,最右侧是其 Cone AS 的路由。
目前如果 AS Cone 太大,导致 AS-SET 及 prefix list 过大,则只拒绝 as-path 不符合最左侧是 Peer AS 的路由,不对 prefix list 进行限制。
Downstream
如同 Peer 处理。
路由属性:
- 设置所有接受的路由的 local-preference 为 200。
发送路由
IBGP
TIP
关于 IBGP 如何发送路由,目前未有定论
模式 1
- 接受所有额外允许的 prefix。
- 接受所有属于自己 AS 的前缀,最长可接受 32(IPv4)和 128(IPv6)。
模式 2
- 匹配所有类型为 static 和 connected 的路由。
- 匹配其他所有路由。
- 接受所有额外允许的 prefix。
- 接受所有属于自己 AS 的前缀,最长可接受 32(IPv4)和 128(IPv6)。
- 拒绝所有前缀长度在 0-7 ,25-32 的路由(IPv4),所有前缀长度在 0-15,49-128 的路由(IPv6)。拒绝所有 as-path 包含 Bogon ASN 的路由。拒绝所有 Bogon IPv4 以及 Bogon IPv6 前缀。
- 拒绝所有 RPKI Invalid 的路由。
EBGP
Upstream
- 匹配所有类型为 static 和 connected 的路由。接受所有属于自己 AS 的前缀,最长可接受 24(IPv4)和 48(IPv6)。
- 拒绝从 IBGP 接收的路由。
- 接受所有源自 Downstream 的路由。(因此仅有当地 Downstream 被发给上游)
IX Route Server
如同 Upstream 处理。
Peer
- 匹配所有类型为 static 和 connected 的路由。
- 匹配所有源自自身 AS 的路由。(例如从 IBGP 获得的)
- 接受所有属于自己 AS 的前缀,最长可接受 24(IPv4)和 48(IPv6)。
- 匹配并接受所有源自 Downstream 的路由。
Downstream
- 匹配所有类型为 static 和 connected 的路由。
- 匹配所有源自自身 AS 的路由。(例如从 IBGP 获得的)
- 接受所有属于自己 AS 的前缀,最长可接受 24(IPv4)和 48(IPv6)。
- 匹配并接受所有源自 Downstream 的路由。
- 匹配并接受所有源自 Peer 的路由。
- 匹配并接受所有源自 IX Route Server 的路由。
- 匹配并接受所有源自 Upstream 的路由。
- 匹配并接受所有源自 IBGP 的路由。