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
相关推荐
lzb_kkk1 分钟前
【JavaEE】JUC的常见类
java·开发语言·java-ee
SEEONTIME1 分钟前
python-24-一篇文章彻底掌握Python HTTP库Requests
开发语言·python·http·http库requests
起名字真南20 分钟前
【OJ题解】C++实现字符串大数相乘:无BigInteger库的字符串乘积解决方案
开发语言·c++·leetcode
tyler_download31 分钟前
golang 实现比特币内核:实现基于椭圆曲线的数字签名和验证
开发语言·数据库·golang
小小小~31 分钟前
qt5将程序打包并使用
开发语言·qt
hlsd#32 分钟前
go mod 依赖管理
开发语言·后端·golang
小春学渗透33 分钟前
Day107:代码审计-PHP模型开发篇&MVC层&RCE执行&文件对比法&1day分析&0day验证
开发语言·安全·web安全·php·mvc
杜杜的man36 分钟前
【go从零单排】迭代器(Iterators)
开发语言·算法·golang
亦世凡华、36 分钟前
【启程Golang之旅】从零开始构建可扩展的微服务架构
开发语言·经验分享·后端·golang
测试界的酸菜鱼1 小时前
C# NUnit 框架:高效使用指南
开发语言·c#·log4j