工程师很容易对 BGP 路由通告产生误解,这是本章第一个需要解释清楚的概念。
4.1.1 本地路由通告问题
假设现在有一台路由器,它要把网络 10.1.0.0/16 和 10.0.0.0/8 放到 BGP 中,以便这些前缀
可以被通告给其他路由器。例 4-1 中展示了与此相关的基本配置。
例 4-1 基本的 10.1.0.0/16 网络通告和 10.0.0.0/8 聚合
R1# show run | s router bgp
router bgp 100
no bgp log-neighbor-changes
!
address-family ipv4
network 10.0.0.0
network 10.1.0.0 mask 255.255.0.0
exit-address-family
通过查看 BGP 表,工程师发现没有任何路由被放入 BGP 路由表中,详见例 4-2。
例 4-2 缺失 BGP 路由的配置
R1# show bgp ipv4 unicast
R1#
通过查看路由器的本地路由表,工程师发现路由器上有一条去往 10.1.1.0/24 网络的直连路
由,详见例 4-3。通过在路由器的全局路由表(也就是 RIB[路由信息库])中对这两个配置的网
络执行精确的路由查找,工程师发现这两个网络都不存在于这个表中。
例 4-3 在 RIB 中查找路由
R1# show ip route | b Gateway
Gateway of last resort is not set
10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 10.1.1.0/24 is directly connected, Ethernet0/1
L 10.1.1.1/32 is directly connected, Ethernet0/1
192.168.1.0/32 is subnetted, 1 subnets
C 192.168.1.1 is directly connected, Loopback0
R1# show ip route 10.1.0.0 255.255.0.0
% Subnet not in table
R1# show ip route 10.0.0.0 255.0.0.0
% Subnet not in table
路由器的 RIB(路由表)中必须有明确的路由信息,这条路由才会被放入 BGP 表中,也就
才会被通告给 BGP 邻居。工程师有两种解决方案:更改 BGP 配置,使之与 RIB 中已有的路由
条目相匹配;或者为 BGP 配置中的网络创建静态路由。例 4-4 中展示了新的配置。
例 4-4 R1 上正确的路由通告和聚合配置
R1# show run | section route
router bgp 100
!
address-family ipv4
network 10.0.0.0
network 10.1.1.0 mask 255.255.255.0
exit-address-family
ip route 10.0.0.0 255.0.0.0 Null0
注释 在静态路由中使用 Null 0 接口是能够防止路由环路的安全机制。如果 R1 上有更精
确的路由(更长的匹配),它会按照更精确的路由来转发数据包。如果它没有更精确的路由,
数据包就会被丢弃。
在做出了适当的更改后,例 4-5 中展示出 10.0.0.0/8 和 10.1.1.0/24 网络已经被放入了 BGP
表中。
例 4-5 查看 R1 上的 BGP 路由
R1# show bgp ipv4 unicast
! Output omitted for brevity
Network Next Hop Metric LocPrf Weight Path
*> 10.0.0.0 0.0.0.0 0 32768 i
*> 10.1.1.0/24 0.0.0.0 0 32768 i
4.1.2 路由聚合问题
另一个常见的问题是与 BGP 路由聚合相关的问题。详见例 4-6,R1 上有多条 RIB 路由都
属于 10.1.0.0/16 这个网络范围,它希望在 BGP 中把这些路由聚合为单条 10.1.0.0/16 地址。注意
这时候工程师已经重新配置了 BGP 配置,只有 10.1.0.0/16 网络被定义为聚合前缀。
例 4-6 R1 的全局 RIB 表
R1# show ip route
! Output omitted for brevity
Gateway of last resort is not set
10.0.0.0/8 is variably subnetted, 6 subnets, 2 masks
C 10.1.12.0/24 is direct