BGP选路之Local Preference

原理概述

当一台BGP路由器中存在多条去往同一目标网络的BGP路由时,BGP协议会对这些BGP路由的属性进行比较,以确定去往该目标网络的最优BGP路由。BGP首先比较的是路由信息的首选值(PrefVal),如果 PrefVal相同,就会比较本地优先级(LocalPreference,缩写为LocPrf)属性。

Local Preference属性可以用于选择流量离开AS时的最佳路由,也就是控制流量从哪个出口离开AS。当BGP路由器通过不同的IBGP对等体接收到目标网络相同但下一跳不同的多条路由时,将优先选择Local Preference值较高的路由。

Local Preference只在 IBGP对等体之间进行通告,EBGP对等体之间传递BGP路由时,不携带Local Preference属性。默认情况下,本地使用network命令通告或者import命令引入到BGP中的路由的Local Preference值为空。当从 IBGP对等体接收到的路由的LocalPreference值为空时,接收路由器会使用100作为这条路由的Local Preference默认值,当从IBGP对等体接收到的路由的Local Preference值不为空时,接收路由器默认不做修改。

Local Preference值是一个32比特的整数,取值范围为0~4294967295。

实验目的

理解Local Preference属性的概念与作用·

掌握修改Local Preference属性的方法实验内容

AS 100为运营商网络,AS 200为公司网络,R1的Loopback 0与Loopback 1接口用来分别模拟向公司提供服务的服务器A和服务器B,R4的 Loopback 1接口用来模拟公司的内部网络。R1属于AS 100,R2、R3和R4属于AS 200,R1与R2和R3采用直连物理接口建立EBGP邻居关系,R2、R3、R4之间采用各自的Loopback 0接口来建立IBGP邻居关系,同时R2.R3、R4运行OSPF;通过修改Local Preference值,使得公司的内部网络访问服务器A时将使用R2作为出口,访问服务器B时将使用R3作为出口。

复制代码
1、基本配置
R1:
sys
sysname R1
int loop 0
ip add 10.0.1.1 32
int loop 1
ip add 10.0.100.2 32
int g0/0/0
ip add 10.0.12.1 24
int g0/0/1
ip add 10.0.13.1 24
q

R2:
sys
sysname R2
int loop 0
ip add 10.0.2.2 32
int g0/0/0
ip add 10.0.12.2 24
int g0/0/1
ip add 10.0.24.2 24
q
ospf 1
 area 0.0.0.0
  network 10.0.24.0 0.0.0.255
  network 10.0.2.2 0.0.0.0

R3:
sys
sysname R3
int loop 0
ip add 10.0.3.3 32
int g0/0/1
ip add 10.0.13.3 24
int g0/0/0
ip add 10.0.34.3 24
q
ospf 1
 area 0.0.0.0
  network 10.0.34.0 0.0.0.255
  network 10.0.3.3 0.0.0.0


R4:
sys
sysname R4
int loop 0
ip add 10.0.4.4 32
int loop 1
ip add 10.0.100.4 32
int g0/0/1
ip add 10.0.24.4 24
int g0/0/0
ip add 10.0.34.4 24
q
ospf 1
 area 0.0.0.0
  network 10.0.24.0 0.0.0.255
  network 10.0.34.0 0.0.0.255
  network 10.0.4.4 0.0.0.0

配置完成后,在R4上使用display ospf peer命令查看OSPF邻居关系。

复制代码
r1:
bgp 100
 router-id 10.0.1.1
 peer 10.0.12.2 as-number 200
 peer 10.0.13.3 as-number 200
 #
 ipv4-family unicast
  undo synchronization
  network 10.0.1.1 255.255.255.255
  network 10.0.100.2 255.255.255.255
  peer 10.0.12.2 enable
  peer 10.0.13.3 enable
r2:
bgp 200
 router-id 10.0.2.2
 peer 10.0.3.3 as-number 200
 peer 10.0.3.3 connect-interface LoopBack0
 peer 10.0.4.4 as-number 200
 peer 10.0.4.4 connect-interface LoopBack0
 peer 10.0.12.1 as-number 100
 #
 ipv4-family unicast
  undo synchronization
  peer 10.0.3.3 enable
  peer 10.0.3.3 next-hop-local
  peer 10.0.4.4 enable
  peer 10.0.4.4 next-hop-local
  peer 10.0.12.1 enable
r3:
bgp 200
 router-id 10.0.3.3
 peer 10.0.2.2 as-number 200
 peer 10.0.2.2 connect-interface LoopBack0
 peer 10.0.4.4 as-number 200
 peer 10.0.4.4 connect-interface LoopBack0
 peer 10.0.13.1 as-number 100
 #
 ipv4-family unicast
  undo synchronization
  peer 10.0.2.2 enable
  peer 10.0.2.2 next-hop-local
  peer 10.0.4.4 enable
  peer 10.0.4.4 next-hop-local
  peer 10.0.13.1 enable
r4:
bgp 200
 peer 10.0.2.2 as-number 200
 peer 10.0.2.2 connect-interface LoopBack0
 peer 10.0.3.3 as-number 200
 peer 10.0.3.3 connect-interface LoopBack0
 #
 ipv4-family unicast
  undo synchronization
  peer 10.0.2.2 enable
  peer 10.0.3.3 enable

在r4观察BGP路由信息的Local Preference属性

可以看到,R4的 BGP路由表中存在两条去往10.0.1.1/32网络的路由,下一跳分别为R2与R3,以及两条去往10.0.100.2/32网络的路由,下一跳还是分别为R2与R3,这些路由信息的Local Preference值均为默认值100.R4自己通告的10.0.100.4/32网络的路由信息的Local Preference值为空。

可以看到,R2从EBGP对等体R1接收到的10.0.1.1/32的路由信息的Local Preference值为空,而从IBGP对等体R3接收到的10.0.1.1/32的路由信息的Local Preference值为100。

由此可见,Local Preference属性不会通告给EBGP对等体,仅在AS内传递时才会通告。当从IBGP对等体接收到的路由的Local Preference值为空时,接收路由器会使用100作为这条路由的Local Preference默认值。
修改Local Preference值

从上面的实验内容已经看到,当从IBGP对等体接收到的路由的Local Preference值为空时,接收路由器会使用100作为这条路由的Local Preference默认值。接下来,我们将对Local Preference值进行修改,使得公司的内部网络发送数据到服务器B时以R3为出口。

先在R3上使用display default-parameter bgp命令查看BGP协议的默认参数。

可以看到,对于目的网络10.0.100.2/32,R4 选择了下一跳为10.0.2.2的路由作为最佳路由,这是由于R4在对下一跳为10.0.2.2与10.0.3.3的路由信息进行比较时,二者的Preferred Value属性、Local Preference属性、路由生成方式、AS_Path 属性、Origin 属性、MED属性、BGP对等体类型等都是相同的,于是R4最终选择了Router-ID较小的路由器R2发布的路由作为最佳路由。

为了使公司内部网络去往10.0.100.2/32的数据使用R3作为出口,可以在R3的BGP视图下使用default local-preference命令将R3的 BGP默认Local Preference值修改为200。

从上面两个BGP路由表可以看到,R4去往10.0.1.1/32与10.0.100.2/32网络时,使用的是下一跳为R3(10.0.3.3)的路由,Local Preference值为200;R4 的BGP路由表中不再有下一跳为R2 (10.0.2.2)的去往10.0.1.1/32与10.0.100.2/32的路由。

在R3上修改了Local Preference值后,R1把关于10.0.1.1/32 与10.0.100.2/32的路由传递给EBGP对等体R2时,Local Preference值为空,R3把关于10.0.1.1/32与10.0.100.2/32的路由传递给IBGP对等体R2时,Local Preference值为200,于是R2会选择下一跳为R3 (10.0.3.3)的路由作为自己去往10.0.1.1/32与10.0.100.2/32的最佳路由。BGP协议在向BGP对等体传递路由时只传递最佳路由,同时,由于IBGP的防环机制,BGP路由器不会将从IBGP对等体那里学到的路由再传递给别的IBGP对等体,因此,R2就不会再向R4传递关于10.0.1.1/32与10.0.100.2/32的路由了,最后的结果是,R4的BGP路由表中最终只存在去往10.0.1.1/32与10.0.100.2/32的下一跳为R3(10.0.3.3)的路由。

可以看到,公司内部网络发送数据到服务器A时也是以R3为出口的。为实现流量分担,现在使用Route-Policy对特定路由的Local Preference值进行修改,从而使得公司内部网络去往服务器A ( 10.0.1.1)的报文选择R2为出口。

复制代码
r2:
bgp 200
  peer 10.0.12.1 route-policy 1 import

#
route-policy 1 permit node 10
 if-match ip-prefix 1
 apply local-preference 400
#
route-policy 1 permit node 20
#
ip ip-prefix 1 index 10 permit 10.0.1.1 32
相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1235 天前
matlab画图工具
开发语言·matlab
dustcell.5 天前
haproxy七层代理
java·开发语言·前端