文章目录
- 一、路由器BGP路由的处理过程
- 控制平面和转发平面
- 选路工具
- 二、BGP的选路顺序
- 选路的前提
- 选路顺序
- 三、AS-Path属性选路原则
- AS-Path属性特性
- AS-Path管进还是管出呢?
- 使用AS-Path对进本AS的路由进行选路
- 验证AS-Path不接收带本AS号的路由
- 四、BGP邻居建立配置
一、路由器BGP路由的处理过程
路由器对BGP路由的处理过程,简单来说就是BGP中的选路过程
控制平面和转发平面
一、控制平面 :是从起点到目的地所使用的IGP,BGP等路由协议从而控制产生路由表,VPNV4路由表,标签转发表等,由这些表去控制我们的FIB表,也就是数据转发表
二、转发平面 :也叫做数据平面,根据刚刚产生的路由表,VPNV4路由表,标签转发表从而产生一个数据转发表(FIB表)去进行数据的从起点到目的地的转发,
如图1-1,
选路工具
在 BGP 选路中有两个重要的概念:
一、策略机 : 相当于route-map,能够对属性值进行修改,影响路由表的生成(在控制平面上:是一个过程),从而影响用户的数据转发
①输入策略机:路由进入本地时的route-map,我们可以理解为 in 方向,会影响自身和下游的路由器
②输出策略机:路由离开本地时的route-map,我们可以理解为 out 方向,只会影响下游的路由器,不会影响自身
二、路由决策 : 根据刚刚的策略机(route-map)选择出最佳的路径,并且将最佳的路径添加到路由表中,简单来说就是去哪里,哪条路比较方便或近
如图1-2,就是BGP路由的处理过程
二、BGP的选路顺序
选路的场景主要面对同一个目的网络存在多种去的方式
如图2-1,对于R3来说,去往192.168.10.0/24有去往R1或R2两条路可以选
选路的前提
我们选路的前提是路由的下一跳可达,如果说路由的下一跳不可达的话,那么选路将不具有任何意义
选路顺序
-
我们之前学过的那么多个BGP属性都是能够应用到BGP路由的选路当中的,但是也是存在依照属性进行选路的顺序的,并且如果较为前的属性已经选出最佳路径,那么后面的属性将不会影响到属性
-
例如:路由器已经依照Local Preference选出了最佳的路径,而MED值无论在怎么进行修改都是无济于事的
选路顺序如下
- 优选Weight值较高的;
- 优选Local Preference值较高的;
- 优选AS-Path长度较短的;
- 按照Origin属性为IGP、EGP、Incomplete类型的路由进行选路;(IGP > EGP > Incomplete)
- 优选MED值较小的路由
- 按照EBGP路由,接着是联盟EBGP路由,最后是IBGP路由的顺序
- 优越最近的IGP邻居通告的路由
- 执行等价负载均衡(默认是没有开启等价负载均衡的)
- 优选BGP Router-ID 小的 Peer 通告的路由
- 优选Cluster-list长度较短的路由
- 优选较小的 Peer 地址路由器通告的路由
这么多一串顺序我们将会逐一进行讲解,本文章所分享的是排位第三个的属性,AS-Path属性,该属性即可进行选路们还具有防环的作用
讲解Weight属性的文章:【路由交换方向IE认证】BGP选路原则之Weight属性-CSDN博客
讲解AS-Path属性的文章:【路由交换方向IE认证】BGP选路原则之Local Preference属性-CSDN博客
三、AS-Path属性选路原则
AS-Path属性特性
AS-Path优选原则,AS-Path长度越短越优先,在AS-Path选路当中,我们的策略机依然是使用route-map
如图3-1,由于AS-Path属性的不只含有选路这一个属性,还可以进行路由的防环
所以我们在调整AS-Path属性长度进行选路的时候,尽量地不要去减少AS-Path的长度,这样就产生了AS-Path的第一个调整原则,①:只增不减
除此之外,AS-Path的route-map在使用时,in方向或是out方向,都会对结果造成不同
如图3-2,当route-map使用在in方向的时候,则 AS 号添加到原始AS号的左侧;当route-map使用在out方向的时候,则 AS 号添加到原始AS号的右侧
由于AS-Path的来源是经过的各个AS-Path,所以对于IBGP Peer和EBGP Peer之间传递的AS-Path是否发生改变是不一样的
结论是:IBGP Peer 之间传递路由的时候,由于AS-Path没有发生了变化,AS-Path值并不会发生改变;EBGP Peer 之间传递路由的时候,由于AS-Path发生了变化,所以相对应的AS-Path也会发生变化
如图3-3,当R1传递给R2路由时,由于是EBGP Peer 关系,所以路由中的AS-Path属性会发生变化;当R2传递路由给R4时,由于是IBGP Peer关系,所以传递的路由中AS-Path属性不会发生变化
在特殊的情况下,我们不想让AS-Path属性进行选路,而是只让其发挥防环的作用,可以通过下述命令来使AS-Path属性不参加选路
R1>en
R1#conf
R1(config)#router bgp 100
R1(config-router)#bgp bestpath as-path ignore //使得AS-Path不参与选路
R1(config-router)#ex
AS-Path管进还是管出呢?
我们所说的管进还是管出,是相对于本AS来说的,仔细回想起来,我们的AS-Path属性是公认必遵属性,可以传播到BGP网络中的任意一个角落,相比于Local Preference,不需要考虑跨AS能否传递的问题,所以我们AS-Path属性是能够管进也能管出的
如图3-4与图3-5,分别是AS-Path进入本公司和AS-Path出本公司的选路示意图
使用AS-Path对进本AS的路由进行选路
在实际的生产环境中,由于我们能进行配置的只有本公司的设备,所以无法在R1上进行配置,我们的AS-Path选路需要在R2或者R3上进行
使用AS-Path进行选路需求:① 控制R1进本公司的选路;② 控制R1访问4.4.3.4走R3,控制R1访问4.4.4.4走R2(奇数走奇数,偶数走偶数);
思路:根据AS-Path长度越小越优先的原则,我们要让R3发出4.4.4.4路由中的AS-Path属性更长,让R2发出4.4.3.4路由中的AS-Path属性更长,如图3-7,调整AS-Path值如图所示
但我们回过头来一想,4.4.4.4是默认走的就是R2这条路径,所以,我们并不是非常低有必要去更改R2对于4.4.4.4向R1发出的AS-Path值,如图3-8
这就极大的减少了我们配置的工作量,现在只需要在R2上对于4.4.3.4向R1发出的 AS-Path值进行修改
如图3-9,prepend表示对整个路由的AS-Path值的增加,replace表示对整个路由的AS-Path值的替换
在R2上进行配置操作
R2(config)#access-li 10 per 4.4.4.4 0.0.0.0
R2(config)#route-map AS-P per 10
R2(config-route-map)#mat ip add 10
R2(config-route-map)#set as-path prepend 200
R2(config-route-map)#ex
R2(config)#route-map AS-P per 20
R2(config-route-map)#ex
R2(config)#router bgp 200
R2(config-router)#nei 12.1.1.1 route-map AS-P out
R2(config-router)#ex
如图3-10,在R1上执行show ip bgp的命令,可以发现选路情况已经发生了变化,并且已经达到了预期;在标注处也显示AS-Path的长度修改成功
验证AS-Path不接收带本AS号的路由
如图3-11,我们可以在route-map中设置发出路由的AS 号中增加 AS 100,在R1上观察BGP路由表会发生什么变化
在R2上的配置如下
R2>en
R2#conf
R2(config)#route-map AS-P per 10
R2(config-route-map)#set as-path prepend 100
R2(config-route-map)#ex
在R1上执行show ip bgp的命令,观察BGP路由表,如图3-12,发现对于4.4.4.4这条路由来说,已经中断了与R2的邻居关系
四、BGP邻居建立配置
附上配置过程
R1
Router(config)#hos R1
R1(config)#int g0/0
R1(config-if-GigabitEthernet 0/0)#ip add 12.1.1.1 24
R1(config-if-GigabitEthernet 0/0)#ex
R1(config)#int g0/1
R1(config-if-GigabitEthernet 0/1)#ip add 12.1.2.1 24
R1(config-if-GigabitEthernet 0/1)#ex
R1(config)#int lo0
R1(config-if-Loopback 0)#ip add 1.1.1.1 32
R1(config-if-Loopback 0)#ex
R1(config)#int lo1
R1(config-if-Loopback 1)#ip add 1.1.2.1 32
R1(config-if-Loopback 1)#ip add 1.1.2.1 32
R1(config-if-Loopback 1)#ex
R1(config)#router bgp 100
R1(config-router)#bgp router-id 1.1.1.1
R1(config-router)#nei 12.1.1.2 remote-as 200
R1(config-router)#nei 12.1.2.3 remote-as 200
R1(config-router)#netw 1.1.1.1 mask 255.255.255.255
R1(config-router)#netw 1.1.2.1 mask 255.255.255.255
R1(config-router)#ex
R2
R2>en
R2#conf
R2(config)#hos R2
R2(config)#int g0/0
R2(config-if-GigabitEthernet 0/0)#ip add 12.1.1.2 24
R2(config-if-GigabitEthernet 0/0)#ex
R2(config)#int g0/1
R2(config-if-GigabitEthernet 0/1)#ip add 12.1.3.2 24
R2(config-if-GigabitEthernet 0/1)#ex
R2(config)#int lo0
R2(config-if-Loopback 0)#ip add 2.2.2.2 32
R2(config-if-Loopback 0)#ex
R2(config)#router ospf 10
R2(config-router)#rou 2.2.2.2
Change router-id and update OSPF process! [yes/no]:yes
R2(config-router)#netw 2.2.2.2 0.0.0.0 area 0
R2(config-router)#netw 12.1.3.0 0.0.0.255 area 0
R2(config-router)#ex
R2(config)#router bgp 200
R2(config-router)#bgp router-id 2.2.2.2
R2(config-router)#nei 12.1.1.1 remote-as 100
R2(config-router)#nei 4.4.4.4 remote-as 200
R2(config-router)#nei 4.4.4.4 update-sou lo0
R2(config-router)#nei 4.4.4.4 next-hop-self
R2(config-router)#ex
R3
Router>en
Router#conf
Router(config)#hos R3
R3(config)#int g0/0
R3(config-if-GigabitEthernet 0/0)#ip add 12.1.2.3 24
R3(config-if-GigabitEthernet 0/0)#ex
R3(config)#int g0/1
R3(config-if-GigabitEthernet 0/1)#ip add 12.1.4.3 24
R3(config-if-GigabitEthernet 0/1)#ex
R3(config)#int lo0
R3(config-if-Loopback 0)#ip add 3.3.3.3 32
R3(config-if-Loopback 0)#ex
R3(config)#router ospf 10
R3(config-router)#rou 3.3.3.3
Change router-id and update OSPF process! [yes/no]:yes
R3(config-router)#netw 3.3.3.3 0.0.0.0 area 0
R3(config-router)#netw 12.1.4.0 0.0.0.255 area 0
R3(config-router)#ex
R3(config)#router bgp 200
R3(config-router)#bgp router-id 3.3.3.3
R3(config-router)#nei 12.1.2.1 remote-as 100
R3(config-router)#nei 4.4.4.4 remote-as 200
R3(config-router)#nei 4.4.4.4 update-sou lo0
R3(config-router)#nei 4.4.4.4 next-hop-self
R3(config-router)#ex
R4
R4>en
R4#conf
R4(config)#hos R4
R4(config)#int g0/0
R4(config-if-GigabitEthernet 0/0)#ip add 12.1.3.4 24
R4(config-if-GigabitEthernet 0/0)#ex
R4(config)#int g0/1
R4(config-if-GigabitEthernet 0/1)#ip add 12.1.4.4 24
R4(config-if-GigabitEthernet 0/1)#ex
R4(config)#int lo0
R4(config-if-Loopback 0)#ip add 4.4.4.4 32
R4(config-if-Loopback 0)#ex
R4(config)#int lo1
R4(config-if-Loopback 1)#ip add 4.4.3.4 32
R4(config-if-Loopback 1)#ex
R4(config)#router ospf 10
R4(config-router)#rou 4.4.4.4
Change router-id and update OSPF process! [yes/no]:yes
R4(config-router)#netw 4.4.4.4 0.0.0.0 area 0
R4(config-router)#netw 12.1.3.0 0.0.0.255 area 0
R4(config-router)#netw 12.1.4.0 0.0.0.255 area 0
R4(config-router)#ex
R4(config)#router bgp 200
R4(config-router)#nei 2.2.2.2 remote-as 200
R4(config-router)#nei 2.2.2.2 update-sou lo0
R4(config-router)#nei 3.3.3.3 remote-as 200
R4(config-router)#nei 3.3.3.3 update-sou lo0
R4(config-router)#netw 4.4.4.4 mask 255.255.255.255
R4(config-router)#net 4.4.3.4 mask 255.255.255.255
R4(config-router)#ex