第十一天
BGP的路由黑洞
由于BGP协议可以非直连建邻,故可能出现BGP协议跨越未运行BGP协议的路由器;导致BGP路由传递后,控制层面显示可达,但数据层面,流量流经未运行BGP协议的路由器时,将无法通过,形成了路由黑洞。
避免路由黑洞的方式 --- BGP同步更新规则 --- 当一台路由器从自己的IBGP对等体学习到一条BGP路由时,它将不能使用该条路由或把这条路由信息通告给自己的EBGP对等体,除非它又从IGP协议学习到这条路由,也就是要求IBGP路由与IGP路由同步
在华为数通设备上,BGP同步更新规则缺省是被关闭的,而且华为不允许开启BGP同步规则
解决方案
1,可以直接让未运行BGP协议的设备运行BGP协议 --- 建立全连接的IBGP环境
2,物理或逻辑拓扑全联
3,可以让边界设备将BGP的路由信息重发布到IGP协议当中
4,MPLS --- 多标签标记交换
注:以上两种方法都不好,在真实的网络环境中绝对不能这么做。在模拟中使用第一种方法
为了避免BGP的路由黑洞,BGP提出了同步机制 --- 即当一台路由器从自己的IBGP对等体处学到一条BGP路由时,他不能发送给自己的EBGP对等体,除非他又从IGP(静态)协议中学到这条路由信息。相当于要求IBGP路由和IGP路由同步。
注:华为设备默认关闭同步机制
BGP的防环
BGP的防环机制 --- 水平分割
EBGP水平分割 --- 针对EBGP对等体之间可能出现的环路问题所提出的防环段。
AS_PATH --- BGP协议将在路由条目中记录所经过的AS的编号
当路由信息再一次传回本地AS时,路由器通过查看AS_PATH属性,可以知道该属性包含本地AS号,进而拒绝学习该路由信息
这个属性对应的是一张列表。 接受到BGP路由条目中如果包含本地的AS号,则将结束该路由,以防止路由回传,造成路由环路问题。
IBGP水平分割 --- 针对IBGP对等体之间可能出现的环路问题所提出的防环手段 --- 当一个路由器从一个IBGP对等体处学习到某条BGP路由时,他将不再把这条路由信息传递给他的其他IBGP对等体
因为BGP不存在开销,而是依据路由属性来进行选路的。但是,又因为BGP的AS-BY-AS的/规则,导致AS内部在默认情况下,因为要把整个AS看作是一个整体,所以传递的路由属性都是相同的,所以,IBGP之间想要防环无法通过属性防环。
IBGP水平分割确实可以防止IBGP对等之间的路由回传问题,但是, IBGP水平分割的规则相当于限制BGP路由在IBGP对等体间只能传递一跳。这样就可能造成BGP路由信息的传递障碍。
解决IBGP水平分割带来的通讯障碍
一、建立全连的IBGP对等体关系
[r2-bgp]peer 3.3.3.3 as-number 2
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0
在AS内部所有设备上配置这个命令
这种方法带来的问题
1,当AS内部设备数量巨大时,IBGP邻居关系会呈指数型增长,而非直连建邻之间传递的数据还是要依靠物理链路,所以全连接建邻会导致占据大量的链路资源,并且路由器维护大量的TCP和BGP会话连接,需要消耗大量的设备资源
2,造成网络的可扩展性变差。
BGP为了解决IBGP水平分割带来通讯障碍,专门设计了两个技术 --- 路由反射器和联邦
二、打破IBGP水平分割
1、联邦
2、路由反射器
BGP的基本配置
1,BGP对等体关系的建立
1)EBGP对等体之间使用直连接口IP的方法
1、启动BGP进程
[r1]bgp 1 --- 后面这个1不是进程号,而是路由器所在AS的AS号。一台BGP路由器只能启动一个BGP进程
2、配置RID
[r1-bgp]router-id 1.1.1.1
3、配置BGP对等体,并指定所在AS号。手工指定邻居关系
[r1-bgp]peer 12.0.0.2 as-number 2
[r1-bgp]display bgp peer --- 查看BGP邻居表
2)IBGP对等体之间环回建邻的方法
由于IBGP对等体同处于一个AS内部,正常一个AS内部将存在大量备份路径;若使用物理接口建立邻居关系,将浪费备份链路及负载均衡资源;故建议使用环回接口进行BGP邻居关系的建立
[r2-bgp]peer 3.3.3.3 as-number 2
手工建立邻居关系时,所指定的建邻的IP地址必须和收到的数据包中的源IP地址相同才能正常建立邻居关系。否则邻居关系建立失败
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0 --- 指定邻居发包时使用环回0接口对应的IP地址作为源IP发包
抓包后会发现一个问题,就是BGP此时仅建立了一次TCP连接,就完成了BGP会话的建立,意味着BGP会话的建立仅仅是依靠TCP会话,而并没有对这个TCP会话建立的方式有要求,该TCP会话是由谁发起的,谁是客户端,谁是服务端不影响BGP对等体的建立 --- 在BGP协议中,TCP会话建立两次是多余的,而建立两次的原因也是因为双方路由器均会指定对等体(均将自己看做是客户端),从而发起建立连接请求
而在当下场景中,R3作为TCP会话的服务端,已经认知到了自己本地已经有接口x.x.x.x,与自己本地配置的对等体有了连接,所以本地也不会再发送TCP连接建立请求
一般情况下,双方均要修改本地数据包的源IP地址
3)EBGP对等体之间环回建邻的方法
若EBGP对等体之间存在多条直连链路时,才可以使用环回建立对等体关系(因为不使用环回,会需要使用tcp维持多条链路,造成资源使用量过大)
1.首先,先得保证环回网段之间具备路由条件才行,一般建议使用静态路由
ip route-static A的环回 24 B接口
ip route-static B的环回 24 A接口
2.对等体配置
[r4]bgp 200
[r4-bgp]peer 5.5.5.5 as-number 300
[r4-bgp]peer 5.5.5.5 connect-interface loopback 0
[r5]bgp 300
[r5-bgp]peer 4.4.4.4 as-number 200
[r5-bgp]peer 4.4.4.4 connect-interface loopback 0
因为EBGP之间的
EBGP对等体之间为了保证使用直连建邻,所以会将TTL值设置为1,可以正常建立TCP和BGP会话,但是路由器认为该连接和会话存在异常,在BGP对等体建立完成后,发送notification报文断开连接,从而产生一个现象---状态机震荡;如果需要非直连建邻,则必须将TTL值改大才行
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2 --- 将和5.5.5.5建邻的数据包中的TTL值改为2
[r5-bgp]peer 4.4.4.4 ebgp-max-hop --- 后面不加数字,则代表将TTL值改为255
注: 建议EBGP对等体关系建立使用第一种方法,IBGP对等体关系建立使用第二种方法,且两边均要修改,不然无法建立对等体关系,并会存在状态机震荡
发布路由
1)通过Network命令来发布路由
BGP可以通过network命令将路由表中只要是存在的路由进行发布。
[r1-bgp]network 1.1.1.0 24 --- network后面跟目标网段及掩码信息,目标网段及掩码信息必须和路由表中完全相同(如果路由表中的是1.1.1.1 32,则命令为network 1.1.1.1 32)
[r1-bgp]display bgp routing-table --- 查看BGP表
在BGP表中,除第一列network字段外,剩余后面的字段都属于BGP属性,包括下一跳字段, 谁发送的路由信息,下一跳就写谁。如果是自己本地发布的路由信息,则下一跳就写0.0.0.0
在路由信息最前方所存在的符号 --- 状态码
*--- 代表可用 --- 设备收到一条路由信息,首先先会检查其下一跳的可达性,如果可达,则代表该路由信息可用,如果不可达, 则代表该路由信息不可用。
>--- 代表优选 --- 当设备收到到达相同网段多条可用的路由信息时,则BGP将在其中选择最优一条前面增加这个标志。只有最优的路由信息可以传递并且加入到路由表中
当设备从EBGP对等体处学来一条路由信息后,并且该信息可用且优,则将会加载到路由表中,其协议字段为 --- EBGP,默认优先级为255
i --- 当一条路由信息是从IBGP对等体学来的,则状态码将添加 i 标识
因为AS-BY-AS的规则,所以,一个AS内部的路由信息的属性默认情况下是不会发生变化的,包括下一跳属性
[r2-bgp]peer 3.3.3.3 next-hop-local --- 给3.3.3.3发路由信息时将下一跳改为本地的IP地址
1.1.1.0/24 IBGP 255 0 RID 2.2.2.2
GigabitEthernet 0/0/0
当设备从IBGP对等体处学来一条路由信息后,并且该信息可用且优,则将会加载到路由表中,其协议字段为 --- IBGP,默认优先级为255。
总结
1、完成所有路由器的IGP配置
2、使用直连接口建立EBGP对等体关系
3、使用环回接口建立IBGP对等体关系
4、使用connect-interface命令修改IBGP建邻源IP地址,双方均修改
5、使用next-hop-local命令修改路由传递的下一跳属性
6、若存在使用环回接口建立EBGP对等体关系,则需要建立通讯条件,并且使用ebgp-max-hop命令修改TTL值
2)通过重发布进行批量发布路由
[r2-bgp]import-route ospf 1
OGN --- 起源码 --- 标识BGP路由的来源
1,i --- 代表这条路由信息起源于AS内部通过NETWORK命令发布出来的路由信息 --- 表明这些路由都是起源于IGP(包含静态和直连)协议。
2,e --- 通过EGP协议(EGP指的是BGP之前使用的外部网关协议EGP)发布的路由信息
3,?--- 通过除了以上两种方法学到的路由 --- 重发布的路由起源码就是?
BGP路由通告原则
当一条BGP路由器发现了多条可以到达同一地址的路由条目,该设备会通过一个路由选择过程在这些路由条目中选择一条最优的路由,将这条路由加入到全局路由表中,并且在向其他BGP对等体通过该路由条目时,也只会通过最优的路由
通常情况下,路由器只会将最优的路由加载到路由表中,除了激活了负载均衡情况外
当一台路由器从EBGP邻居学习到了BGP路由时,缺省情况下,会将该条路由条目通告给所有IBGP对等体以及EBGP对等体
当一台路由器从自己的IBGP学习到BGP路由,缺省情况下,不会将该条路由条目通告给所有IBGP对等体 --- 因为IBGP水平分割原则
当一台路由器从自己的IBGP学习到BGP路由时,如果同步规则被激活,只有从IGP协议也学习到该路由条目后,才会将BGP路由激活,并学习到本地以及通告到EBGP对等体。如果同步规则被关闭,即使没有从IGP学习到该路由也会将BGP路由通告给EBGP对等体。