BGP 的路由宣告
BGP 自身并不会发现并计算产生路由,只会将 IGP 路由表中的路由引入到 BGP 路由表中,并通过 Update 报文传递给 BGP 对等体(邻居)
Network 宣告,前提是路由表中存在该条路由
import-route 引入其他协议的路由
aggregate 汇总路由
BGP 支持根据已有的路由条目进行聚合,生成聚合路由
路由的下一跳
BGP 传递路由时,在 AS 边界路由器从 EBGP 邻居学来的路由,再向 IBGP 邻居时,并不会修改下一跳。这就导致了 IBGP 邻居无法到达该条路由的下一跳,从而使传递的该条路由失效。通常情况下需要修改下一跳为本设备建立 IBGP 邻居的源地址(下一跳本地)
在 AS 边界设备执行
[Huawei]peer 12.1.1.2 next-hop-local // 向该IBGP邻居传递路由时,将路由的下一跳改为本设备
路由汇总
BGP 支持自动汇总和手工汇总,一般情况下不会使用自动汇总,因为自动汇总不够灵活,只能汇总成主类/8 /16 /24 的路由。
而手工汇总就要灵活的多。
[Huawei-bgp]summary automatically // 开启自动汇总
// 导入的路由不能进行自动汇总
[Huawei-bgp]aggregate 192.168.0.0 255.255.255.0
// 手工汇总一条192.168.0.0/16的路由,默认情况下,产生汇总路由后并不会删除明细路由,需要手工配置
[Huawei-bgp]aggregate 192.168.0.0 255.255.255.0 detail-suppressed
// 手工汇总路由,并抑制(删除)明细路由
抑制明细路由由于丢失了部分 BGP 属性(AS_Path 路径属性)因此可能会有环路风险。
当然,BGP 也有相应的解决方案
加快收敛,手动刷新某个邻居的路由
[Huawei-bgp]refresh bgp 4.4.4.4 import // 让对方将最新的路由发过来
[Huawei-bgp]refresh bgp 4.4.4.4 export // 将最新的路由发送给对方
Null 0 防止环路
所有数据包的出接口时 Null 0 的话,会被路由器直接丢弃
不管任何路由协议,只要进行了 路由汇总,本地就会产生一条汇总的 Null0 的路由,防止环路产生
BGP 通告原则
BGP 通过 networkimport-route、aggregate 聚合方式生成 BGP 路由后,通过 Update 报文将 BGP 路由传递给对等体。
BGP 通告遵循以下原则:
- 只发布最优路由。
- 从 EBGP 对等体获取的路由,会发布给所有对等体
- IBGP 水平分割:从 IBGP 对等体获取的路由,不会发送给 IBGP 对等体。
- BGP 同步规则指的是:当一台路由器从自己的 IBGP 对等体学习到一条 BGP 路由时(这类路由被称为 IBGP 路由),它将不能使用该条路由或把这条路由通告给自己的 EBGP 对等体,除非它又从 IGP 协议例如 OSPF 等此处也包含静态路由)学习到这条路由,也就是要求 IBGP 路由与 IGP 路由同步。同步规则主要用于规避 BGP 路由黑洞问题
BGP 只发布最优路由
只发布最优且有效(即下一跳地址可达路由
通过 displaybgprouting-table 命令可以查看 BGP 路由表
在 BGP 路由表中同时存在以下两个标志的路由为最优、有效
- *:代表有效
-
:代表最优
从 EBGP 对等体学到的路由,会发给所有 BGP 对等体
IBGP 水平分割:从 IBGP 对等体获取的 BGP 路由,不会再发送给其他 IBGP 对等体
该条原则也被称为“IBGP 水平分割”
如图所示,如果 IBGP 对等体学习到的路由会继续传递给其他的 IBGP 对等体
- R2 将一条路由传递给了 IBGP 对等体 R3
- R3 收到路由之后传递给 IBGP 对等体 R1
- R1 继续传递给 IBGP 对等体 R2
路由环路形成。
路由黑洞
由于 IBGP 可以跨设备建立邻居,那么中间的转发设备由于没有运行 BGP 协议,那么会导致没有相应的 BGP 路由从而在转发层面丢弃数据包,这就叫路由黑洞
BGP 同步规则
为了防止路由黑洞,从 IBGP 学到的路由,不能直接更新给 EBGP 邻居(除非从 IGP 又学到了这条路由)
只有 IBGP 和 IGP 同时学到该条路由,才能更新给 EBGP 邻居
默认关闭该条规则
R5 访问 10.0.4.4
- R5 查找路由表,将报文发送给 R3。
- R3 收到报文后查找路由表,匹配到一条 BGP 路由其下一跳为 R2,但是 R2 为非直连下一跳,需要进行路由迭代,通过 IGP 学习到的路由迭代出下-跳为 R1。R3 将报文发送给 R1。
- R1 收到报文后查找路由表,因为 R1 并非 BGP 路由器末与 R2 建立 IBGP 对等体关系,因此 R1 上并无 BGP 路由 10.0.4.0/24,路由查找失败,R1 将报文丢弃
当一台路由器从自己的 IBGP 对等体学习到条 BGP 路由时(这类路由被称为 IBGP 路由),它将不能使用该条路由或把这条路由通告给自己的 EBGP 对等体,除非它又从 IGP 协议(例如 OSPF 等,此处也包含静态路由)学习到这条路由,该条规则也被称为 BGP 同步原则。.
- BGP 路由器 R4 上存在一条路由 100.40/24,R4 将其传递给了 R2。
- R2 将路由传递给非直连 IBGP 对等体 R3。
- R3 将路由传递给 R5
- 之后 R5 向 10.044 发起访问