一、BGP属性
1、BGP属性分类
1)公认必遵:
2)公认任意:
3)可选过渡:
4)可选非过渡:
2、公认必遵:
--所有BGP设备都要认识这一类属性,
--而且这类属性必须存在于Update报文中
--如果缺少这类属性,update报文不完整, 路由信息会出现错误
列举属性:
--Origin属性:起源属性,路由是通过network 注入的,还是通过import 注入的
--AS_path属性:这条路由是从哪里来的,从哪个AS号来的,经过了哪个AS号,
--Next_Hop:定义路由的下一跳信息
3、公认任意:
--所有BGP设备认识此类属性
--这类属性不要求必须存在于Update报文中(可以在,也可以不在)
--如果缺少这类属性,路由信息不会出现错误
列举属性:
Local_Pref属性
4、可选过渡
--所有BGP设备可以认识,也可以不认识此类属性
--如果不认识,但仍然会接收此类属性,并且会通告给邻居
列举属性:
Community:团体属性
5、可选非过渡
--所有BGP设备都可以认识,也可以不认识此类属性(可以认识,也可以不认识)
--如果不认识,会忽略此类属性,而且不会通告邻居
列举属性:
MED属性
二、BGP选路原则
BGP选路原则: 根据BGP属性来的,所以要先了解属性,在判断路由优选原则
第一个:丢弃下一跳不可达的路由
:这不是BGP选路原则(至少华为不是这么认为的),因为在任何路由协议中,我们都会认为下一跳不可达的路由是无效的
:(但是有其他厂商会把这条原则当做BGP选路原则的第一原则)
然后进行选路:
1、比较“协议首选值-pref-val”属性,数值越大越好,默认值是0,只在本设备生效,不会传递
2、比较“本地优先级-local_pref”属性,数值越大越好,默认值是100
3、比较“as-path” 属性-as号越短越好
4、比较“起源属性”-指的是已什么方式注入进BGP协议的
5、比较“MED”属性,指的是一个路由器去往一个BGP路由网段的距离,类似cost
三、BGP选路实验
1、基础配置实验

需求:
1)建立IBGP和EBGP邻居
配置步骤:
1)配置接口IP地址
2)在AS100内部配置OSPF
3)配置IBGP邻居和EBGP邻居
4)在R4中注入路由 10.10.4.4/32
5)下一跳不可达--验证
6)配置下一跳可达--验证
配置命令:
第一步:基础配置:配置接口IP地址, AS100内部配置OSPF R1的配置: [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 192.168.12.1 24 [R1-GigabitEthernet0/0/0]int g0/0/1 [R1-GigabitEthernet0/0/1]ip add 192.168.13.1 24 [R1-GigabitEthernet0/0/1]int lo0 [R1-LoopBack0]ip add 10.10.1.1 32 [R1-LoopBack0]quit [R1]ospf 1 router-id 1.1.1.1 [R1-ospf-1]area 0 [R1-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255 [R1-ospf-1-area-0.0.0.0]network 192.168.13.0 0.0.0.255 [R1-ospf-1-area-0.0.0.0] network 10.10.1.1 0.0.0.0 R2的配置: [R2]int g0/0/0 [R2-GigabitEthernet0/0/0]ip address 192.168.12.2 24 [R2-GigabitEthernet0/0/0]int g0/0/1 [R2-GigabitEthernet0/0/1]ip address 192.168.24.2 24 [R2-GigabitEthernet0/0/1]int lo0 [R2-LoopBack0]ip add 10.10.2.2 32 [R2-LoopBack0]q [R2]ospf 1 router-id 2.2.2.2 [R2-ospf-1]area 0 [R2-ospf-1-area-0.0.0.0]network 192.168.12.0 0.0.0.255 [R2-ospf-1-area-0.0.0.0]network 10.10.2.2 0.0.0.0 R3的配置: [R3]int g0/0/0 [R3-GigabitEthernet0/0/0]ip add 192.168.13.3 24 [R3-GigabitEthernet0/0/0]int g0/0/1 [R3-GigabitEthernet0/0/1]ip add 192.168.34.3 24 [R3-GigabitEthernet0/0/1]int lo0 [R3-LoopBack0]ip add 10.10.3.3 32 [R3-LoopBack0]q [R3]ospf 1 router-id 3.3.3.3 [R3-ospf-1]area 0 [R3-ospf-1-area-0.0.0.0]network 192.168.13.0 0.0.0.255 [R3-ospf-1-area-0.0.0.0]network 10.10.3.3 0.0.0.0 R4的基础配置 [R4]int g0/0/0 [R4-GigabitEthernet0/0/0]ip add 192.168.24.4 24 [R4-GigabitEthernet0/0/0]int g0/0/1 [R4-GigabitEthernet0/0/1]ip add 192.168.34.4 24 [R4-GigabitEthernet0/0/1]int lo0 [R4-LoopBack0]ip add 10.10.4.4 32 第二步:配置IBGP和EBGP邻居关系 R1的配置: [R1]bgp 100 [R1-bgp]router-id 1.1.1.1 [R1-bgp]peer 10.10.2.2 as 100 [R1-bgp]peer 10.10.2.2 connect-interface LoopBack 0 [R1-bgp]peer 10.10.3.3 as 100 [R1-bgp]peer 10.10.3.3 connect-interface LoopBack 0 [R2]bgp 100 [R2-bgp]router-id 2.2.2.2 [R2-bgp]peer 10.10.1.1 as 100 [R2-bgp]peer 10.10.1.1 connect-interface LoopBack 0 [R2-bgp]peer 192.168.24.4 as 200 [R3]bgp 100 [R3-bgp]router-id 3.3.3.3 [R3-bgp]peer 10.10.1.1 as 100 [R3-bgp]peer 10.10.1.1 connect-interface LoopBack 0 [R3-bgp]peer 192.168.34.4 as 200 [R4]bgp 200 [R4-bgp]router-id 4.4.4.4 [R4-bgp]peer 192.168.24.2 as 100 [R4-bgp]peer 192.168.34.3 as 100 第三步:验证邻居关系 display bgp peer
2、下一跳不可达的路由会被丢弃
需求:
1)下一跳不可达验证
配置:
第一步:在R4中注入路由 R4的配置: [R4]bgp 200 [R4-bgp]network 10.10.4.4 32 第二步:验证R4和R2和R3的邻居关系,邻居建立成功 <R4>display bgp peer Peer V AS MsgRcvd MsgSent OutQ Up/Down State PrefRcv 192.168.24.2 4 100 124 125 0 02:02:37 Established 0 192.168.34.3 4 100 124 125 0 02:02:23 Established 0 第三步:在R2和R3中验证BGP路由 [R2-bgp]display bgp routing-table Total Number of Routes: 1 Network NextHop MED LocPrf PrefVal Path/Ogn * > 10.10.4.4/32 192.168.24.4 0 0 200i 备注:在R2中,10.10.4.4/32的路由是最优的 [R3]display bgp routing-table Total Number of Routes: 1 Network NextHop MED LocPrf PrefVal Path/Ogn * > 10.10.4.4/32 192.168.34.4 0 0 200i 备注:在R3中,10.10.4.4/32的路由是最优的 第四步:在R1中验证BGP路由 [R1]display bgp routing-table Total Number of Routes: 2 Network NextHop MED LocPrf PrefVal Path/Ogn i 10.10.4.4/32 192.168.24.4 0 100 0 200i i 192.168.34.4 0 100 0 200i 备注:在R1中,学习到两条去往10.10.4.4/32的路由,分别是R2和R3通告给R1的 但是这两条路由都是无效的,为什么,因为下一跳不可达,所以目的地址也不可达,所以R1认为这两条路由无效 那么为什么下一跳不可达呢? 因为R2和R3在从外部邻居R4哪里学来路由,在传递给自己的内部邻居R1时, 默认不会修改路由的下一跳 第五步:在R1的IP核心路由表去验证,发现R1没有去往10.10.4.4 的路由 [R1]display ip routing-table 10.10.4.4 第六步:总结:丢弃下一跳不可达的路由 第七步:让R1中的路由可用 如果让下一跳可达呢,如果让R1中的路由生效且最优呢:需要在R2和R3在给R1传递路由的时候修改下一跳 R2的配置: [R2]bgp 100 [R2-bgp]peer 10.10.1.1 next-hop-local 修改下一跳 R3的配置: [R3]bgp 100 [R3-bgp]peer 10.10.1.1 next-hop-local 修改下一跳 第八步:再次验证R1的路由表 [R1]display bgp routing-table Total Number of Routes: 2 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 10.10.4.4/32 10.10.2.2 0 100 0 200i i 10.10.3.3 0 100 0 200i
3、验证:PrefVal属性:协议首选值
-preferred_value
-默认值0,数值越大越优先
-华为特定的私有属性
-只在本设备有效,不在网络中随路由传递
在R1中去验证路由表
第一步:证R1的路由表 [R1]display bgp routing-table Total Number of Routes: 2 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 10.10.4.4/32 10.10.2.2 0 100 0 200i i 10.10.3.3 0 100 0 200i 备注:R1中去往10.10.4.4的路由有两条,但是下一跳为10.10.2.2 的为最优, 为什么是10.10.2.2的为最优 因为,这是做的BGP选路,用的第10条选路规则 比较R2和R3的router-id , 由于R2的router-id 2.2.2.2 比R3的router-id 3.3.3.3 小 所以R2通告给R1的路由是最优的, 为什么用第10条选路规则,因为这两条路由的前9条规则,无法比较出来谁最优,所以使用第10条规则 如果你不相信我,你可以自己去测试 怎么测试呢? 将R2的router-id 改为9.9.9.9 大于R3的3.3.3.3 然后你就会发现在R1中去往10.10.4.4/32的路由,下一跳为10.10.3.3 变成最优了 具体操作命令: [R2]bgp 100 [R2-bgp]router-id 9.9.9.9 在R1中去验证路由表 <R1>dis bgp routing-table Total Number of Routes: 2 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 10.10.4.4/32 10.10.3.3 0 100 0 200i * i 10.10.2.2 0 100 0 200i !!!!记住验证完一定要在恢复默认,把R2的router-id 在改回2.2.2.2 [R2]bgp 100 [R2-bgp]router-id 2.2.2.2 在R1中去验证路由表-发现恢复默认 <R1>display bgp routing-table Total Number of Routes: 2 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 10.10.4.4/32 10.10.2.2 0 100 0 200i * i 10.10.3.3 0 100 0 200i 实验需求: 修改路由的PrefVal(协议首选值)属性值,让下一跳为10.10.3.3的那条路由成为最优的路由 配置步骤: 1)在R1中创建ip-prefix 抓取10.10.4.4的路由 2)在R1中使用router-policy修改路由的属性 3)在R1中BGP中,在R1和R3建立邻居的 入方向 去调用路由策略 备注:ip-prefix 是什么: 这个工具叫做地址前缀列表,专门用来抓取路由条目的 备注:router-policy 是什么: 这个工具叫做路由策略,用来控制路由,过滤路由,和修改路由属性的 配置命令: 第一步:在R1中要修改那条路由,我就去抓那条路由 在R1中使用ip-prefix 抓取10.10.4.4的路由 [R1]ip ip-prefix 3.3 permit 10.10.4.4 32 第二步:使用路由策略去修改路由10.10.4.4/32的属性 1)将抓到这条路由和路由策略绑定在一起 [R1]route-policy 3.3 permit node 10 //创建路由策略,命名为3.3 允许节点10 [R1-route-policy]if-match ip-prefix 3.3 //将抓到这条路由和路由策略绑定在一起 2)修改路由的属性值,把路由协议首选值的属性修改为123 [R1-route-policy]apply preferred-value 123 // 将协议首选值修改为123 第三步:在BGP中去调用这条路由策略,在R1和R3建立 邻居的入方向调用,为什么要在入方向调用 因为协议首选值,这个属性,只在我的本机起作用,不能在在网络中传递 [R1]bgp 100 [R1-bgp]peer 10.10.3.3 route-policy 3.3 import <R1>refresh bgp all import //返回到用户视图,重传路由刷新 第四步:在R1中验证结果 <R1>dis bgp routing-table Total Number of Routes: 2 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 10.10.4.4/32 10.10.3.3 0 100 123 200i * i 10.10.2.2 0 100 0 200i 备注:由于下一跳为10.10.3.3的这条路由的协议首选值该问123,所以下一跳为10.10.3.3的这条路由变为最优 验证: <R1>dis bgp routing-table 10.10.4.4 BGP local router ID : 1.1.1.1 Local AS number : 100 Paths: 2 available, 1 best, 1 select BGP routing table entry information of 10.10.4.4/32: From: 10.10.3.3 (3.3.3.3) Route Duration: 00h00m58s Relay IP Nexthop: 192.168.13.3 Relay IP Out-Interface: GigabitEthernet0/0/1 Original nexthop: 10.10.3.3 Qos information : 0x0 AS-path 200, origin igp, MED 0, localpref 100, pref-val 123, valid, internal, b est, select, active, pre 255, IGP cost 1 Not advertised to any peer yet BGP routing table entry information of 10.10.4.4/32: From: 10.10.2.2 (2.2.2.2) Route Duration: 00h00m58s Relay IP Nexthop: 192.168.12.2 Relay IP Out-Interface: GigabitEthernet0/0/0 Original nexthop: 10.10.2.2 Qos information : 0x0 AS-path 200, origin igp, MED 0, localpref 100, pref-val 0 , valid, internal, pre 255, IGP cost 1, not preferred for PreVal :败给协议首选值了 Not advertised to any peer yet
4、Local_pref属性:本地优先级
-local_preference
-默认情况下,在IBGP邻居间传递,不在EBGP邻居间传递,在EBGP传递update报文的时候默认不携带这个属性
-默认值100,数值越大越优先
-在AS内的IBGP邻居之间,出方向和入方向都可以修改该属性
第一步: 在R1中删除上一个实验的配置,恢复路由表默认状态 1)在R1中删除路由策略的调用 [R1]bgp 100 [R1-bgp]undo peer 10.10.3.3 route-policy 3.3 import 2)在R1中先删除原有的路由策略的配置,删除修改协议首选值 [R1]route-policy 3.3 permit node 10 //进入路由策略 [R1-route-policy]undo apply preferred-value //删除修改的协议首选值 第二步: 在R1中,重新进入路由策略,修改本地优先级属性值 [R1]route-policy 3.3 permit node 10 //进入路由策略3.3 [R1-route-policy]apply local-preference 300 //修改本地优先级为300 第三步:在R1中 做路由策略调用 [R1-bgp]peer 10.10.3.3 route-policy 3.3 import //在R1收到R3传来的路由的入方向修改路由属性 <R1>refresh bgp all import //重传路由 第四步:验证结果 <R1>display bgp routing-table Total Number of Routes: 2 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 10.10.4.4/32 10.10.3.3 0 300 0 200i * i 10.10.2.2 0 100 0 200i
5、AS_Path属性
-在AS-path 属性表里面,会记录路由信息经过的AS数 ,每经过一个AS ,都会按照顺序将AS号记录在列表里面
-最右侧的为起源AS号,最左侧的为邻居的AS号
-AS-path属性:AS号越短越优先(经过的AS号越少越优先)
-任何一个BGP路由,都必须携带这个属性
-该属性可以防止EBGP邻居之间的环路
-该属性可以做路径优选
第一步:在R1中删除路由策略的调用,恢复默认 [R1]bgp 100 [R1-bgp]undo peer 10.10.3.3 route-policy 3.3 import 第二步:验证R1的路由表: [R1]dis bgp routing-table Total Number of Routes: 2 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 10.10.4.4/32 10.10.2.2 0 100 0 200i * i 10.10.3.3 0 100 0 200i 第二步: 删除修改本地优先级, 配置修改AS-path 属性值 [R1]route-policy 3.3 permit node 10 //进入路由策略 [R1-route-policy]undo apply local-preference //删除apply (删除修改的本地优先级的属性值) [R1-route-policy]apply as-path 200 200 additive //修改路由的属性,添加AS号 第三步:在BGP中调用路由策略,在R1收到R2传递的路由的时候,给这个条路由修改AS-Path属性 [R1]bgp 100 [R1-bgp]peer 10.10.2.2 route-policy 3.3 import 第四步:验证结果 <R1>display bgp routing-table Total Number of Routes: 2 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 10.10.4.4/32 10.10.3.3 0 100 0 200i * i 10.10.2.2 0 100 0 200 200 200i 备注:为什么添加的as号都为200呢,是只能添加200吗? 不是,可以添加任意值的as号 只所以都添加200,不添加其他AS号仅仅是为了预防,因为AS_Path防止环路而导致路由无法传递 比如:如果我们添加了AS_path 500 ,如果我们要把路由传递给AS500的自制系统,就无法传递了 我们不清楚我们的前方会出现哪些AS号,所以我们尽量不要占用其他的AS号
6、比较“Origin-起源属性”--指的是已什么方式注入进BGP协议的
-Origin属性用来定义路由信息的来源:
Origin : i - IGP, e - EGP, ? - incomplete (优先级)
&:IGP:优先级高,通过network命令注入到BGP路由表的路由,其Origin属性为'i'。
&: e - EGP : 次优的,
&:Incomplete:优先级低,如:通过import-route注入的路由,其Origin属性为 '?'。
===============================在R1中做删除================================ 第一步: 删除路由策略调用 [R1]bgp 100 [R1-bgp]undo peer 10.10.2.2 route-policy 3.3 import 第二步:删除路由策略 [R1]undo route-policy 3.3 第三步:验证R1的路由表:检查是否恢复默认 [R1]dis bgp routing-table Total Number of Routes: 2 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 10.10.4.4/32 10.10.2.2 0 100 0 200i * i 10.10.3.3 0 100 0 200i =================================在R2上做实验了============================== 第四步:在R2上创建地址前缀列表 [R2]ip ip-prefix 4.4 permit 10.10.4.4 32 第五步:在R2上创建路由策略,匹配地址前缀列表,并且修改路由的属性 [R2]route-policy 4.4 permit node 10 [R2-route-policy]if-match ip-prefix 4.4 //路由策略匹配地址前缀列表抓到的路由 [R2-route-policy]apply origin incomplete //修改路由的起源属性,改为import注入 第六步:在R2的BGP上调用路由策略 [R2]bgp 100 [R2-bgp]peer 10.10.1.1 route-policy 4.4 export //R2给R1传递路由的出方向上,调用路由策略 第七步:验证结果 <R1>dis bgp routing-table Total Number of Routes: 2 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 10.10.4.4/32 10.10.3.3 0 100 0 200i * i 10.10.2.2 0 100 0 200 ?
7、MED属性:
-MED:多出口鉴别器,是可选非过渡属性,是一种度量值
--MED默认值是0,值越小越优先
--作用两个AS之间,收到MED属性的AS,默认不将这个属性通告给第三方AS
第一步:在 R2 中删除调用 [R2-bgp]undo peer 10.10.1.1 route-policy 4.4 export 第二步:验证 R1 的路由表:检查是否恢复默认 [R1]dis bgp routing-table Total Number of Routes: 2 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 10.10.4.4/32 10.10.2.2 0 100 0 200i * i 10.10.3.3 0 100 0 200i 第三步:在 R2 中-进入路由策略,删除修改的起源属性值 [R2]route-policy 4.4 permit node 10 [R2-route-policy]undo apply origin //删除修改的起源属性值,恢复默认 [R2-route-policy]apply cost 999 //修改路由的MED属性值为999 第四步:在 R2 中调用路由策略 [R2]bgp 100 [R2-bgp]peer 10.10.1.1 route-policy 4.4 export //R2在给R1发路由的时候,在出方向修改路由的MED值为999 第五步:验证结果 <R1>display bgp routing-table Total Number of Routes: 2 Network NextHop MED LocPrf PrefVal Path/Ogn *>i 10.10.4.4/32 10.10.3.3 0 100 0 200i * i 10.10.2.2 999 100 0 200i