⼀、BGP 属性
1.BGP 属性分类
- 公认必遵
- 公认任意
- 可选过渡
- 可选⾮过渡
2、公认必遵
-所有 BGP 设备都要认识这⼀类属性
-⽽且这类属性必须存在于 Update 报⽂中
-如果缺少这类属性,update 报⽂不完整, 路由信息会出现错误列举属性
-Origin 属性:起源属性,标识以什么方式变成BGP属性的
-AS_path 属性:对路径进行记录(怎么到达某个路由,经过了哪里)
-Next_Hop:明确标识BGP的下一条怎么走
3、公认任意
-所有 BGP 设备认识此类属性
-这类属性不要求必须存在于 Update 报⽂中(可以在,也可以不在)
-如果缺少这类属性,路由信息不会出现错误
列举属性:
Local_Pref 属性 :本地优先级,表示该条路由的优先级,在AS内部使用
Atomic_aggregate属性 :原子聚合属性,当路由器对路由进行聚合后会相当产生了一条新的路由。变成新的路由以后,以前的路由属性可能就会出现消失,从而可能出现环路的可能,从而打上原子聚合属性,标记该条路由是被聚合过的在使用的时候需要注意。
4、可选过渡
-所有 BGP 设备可以认识,也可以不认识此类属性
-如果不认识,但仍然会接收此类属性,并且会通告给邻居
列举属性:
Aggregator属性:聚合者,表示这条路由是哪一台设备做的聚合
Community团体属性:团体属性, 类似于tag,bgp路由不像ospf、isis,bgp不可以tag。
5、可选⾮过渡
-所有 BGP 设备都可以认识,也可以不认识此类属性(可以认识,也可以不认识)
-如果不认识,会忽略此类属性,⽽且不会通告邻居
列举属性:
MED 属性 :出口鉴别器,可以直接理解为cost。在EBGP使用,在as之间比较。
Cluster-List:
Originator-ID
⼆、BGP 选路原则
BGP 选路原则
- 根据 BGP 属性来的,所以要先了解属性,在判断路由优选原则
第⼀个:丢弃下⼀跳不可达的路由
-这不是 BGP 选路原则(⾄少华为不是这么认为的),因为在任何路由协议中,我们都会认为下⼀跳不可达的路由是⽆效的
-但是有其他⼚商会把这条原则当做 BGP 选路原则的第⼀原则,比如:思科
下一步→进⾏选路:
0、丢弃下一跳不可达的路由 (这一跳华为不作为选路规则中的一条,这个本身就是一个前提);
1、⽐较“协议⾸选值preferred-Value属性,数值越⼤越好,默认值是 0,只在本设备⽣效,不会传递 (华为私有属性);
2、⽐较“本地优先级local_preferred属性,数值越⼤越好,默认值是 100;
3、本地始发的BGP路由优于从其他对等体学习到的路由,本地始发的路由优先级:优选手动聚合>自动聚合>network>import>从对等体学到的;
4、⽐较“as-path” 属性 AS 号越短越好 ;
5、⽐较“起源属性” 指的是已什么⽅式注⼊进 BGP 协议的,Origin属性值按优先级从高到低的排列是:IGP、EGP及Incomplete;
6、⽐较“MED”属性,指的是⼀个路由器去往⼀个 BGP 路由⽹段的距离,类似 cost;
7、优选从EBGP对等体学来的路由(EBGP学来的路由优先于IBGP路由);
8、比较Next-hop的IGP度量值,越小越优先;
当前8条属性完全相同的时候,可以形成路由负载分担;
9、比较 Cluster_List ,越短越优先;
10、比较Router ID,越小越优先;
11、优选具有最小IP地址的对等体通告的路由;
三、实验BGP选路原则
拓扑:
-
实验配置:
1.配置IP地址
2.配置ospf互通
3.配置bgp全互联 -
配置命令:
R1:
#
sysname R1
#
undo info-center enable
#
interface GigabitEthernet0/0/0
ip address 12.1.1.1 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 13.1.1.1 255.255.255.0
#
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
#
bgp 100
peer 2.2.2.2 as-number 100
peer 2.2.2.2 connect-interface LoopBack0
peer 3.3.3.3 as-number 100
peer 3.3.3.3 connect-interface LoopBack0
#
peer 2.2.2.2 enable
peer 3.3.3.3 enable
#
ospf 1 router-id 1.1.1.1
area 0.0.0.0
network 1.1.1.1 0.0.0.0
network 12.1.1.0 0.0.0.255
network 13.1.1.0 0.0.0.255
#
R2:
#
sysname R2
#
undo info-center enable
#
interface GigabitEthernet0/0/0
ip address 12.1.1.2 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 24.1.1.2 255.255.255.0
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
#
bgp 100
peer 1.1.1.1 as-number 100
peer 1.1.1.1 connect-interface LoopBack0
peer 24.1.1.4 as-number 200
#
ospf 1 router-id 2.2.2.2
area 0.0.0.0
network 2.2.2.2 0.0.0.0
network 12.1.1.0 0.0.0.255
network 24.1.1.0 0.0.0.255
#
R3:
#
sysname R3
#
undo info-center enable
#
interface GigabitEthernet0/0/0
ip address 34.1.1.3 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 13.1.1.3 255.255.255.0
#
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
#
bgp 100
peer 1.1.1.1 as-number 100
peer 1.1.1.1 connect-interface LoopBack0
peer 34.1.1.4 as-number 200
#
ospf 1 router-id 3.3.3.3
area 0.0.0.0
network 3.3.3.3 0.0.0.0
network 13.1.1.0 0.0.0.255
network 34.1.1.0 0.0.0.255
#
R4:
#
sysname R4
#
undo info-center enable
#
interface GigabitEthernet0/0/0
ip address 34.1.1.4 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 24.1.1.4 255.255.255.0
#
interface LoopBack0
ip address 4.4.4.4 255.255.255.255
#
bgp 200
peer 24.1.1.2 as-number 100
peer 34.1.1.3 as-number 100
#
ospf 1 router-id 4.4.4.4
area 0.0.0.0
network 4.4.4.4 0.0.0.0
network 24.1.1.0 0.0.0.255
network 34.1.1.0 0.0.0.255
#
1、(第8条后一条) 当前8条属性完全相同的时候,可以形成路由负载分担;
R1命令:
#
interface LoopBack11
ip address 11.11.11.11 255.255.255.255
#
network 11.11.11.11 255.255.255.255
在R4上路由查看BGP路由,这里的最优路由经过R2。
查看没有被优选的原因是因为R2的router id更优(10.比较Router ID,越小越优先);
在这里出现了一个问题,为什么没有形成路由负载分担?
原因是因为设备默认的是一条路由负载(默认没有开路由负载)
配置命令:
[R4-bgp]maximum load-balancing 2 //修改负载数量,最大为8
开启路由负载为2以后,bgp的路由表里面依然会选择一条最优的路由出来,这里系统的认为是人为把一条不优的路由加入到路由表里面,R4在传递的时候,依然只传递最优的路由。对于R4 来说,会使用那条不优的路由,但是不会传递。
2、比较Next-hop的IGP度量值,越小越优先;
在R4中引入一条路由,配置命令:
[R4]int l1
[R4-LoopBack1]ip a 44.44.44.44 32
[R4-LoopBack1]bgp 200
[R4-bgp]net 44.44.44.44 32
同时在R2,R3中需要修改下一条地址为本地IP,原因看上图(下一条不可达),命令如下:
[R2]bgp 100
[R2-bgp]peer 1.1.1.1 next-hop-local
<R2>refresh bgp all export
[R3]bgp 100
[R3-bgp]peer 1.1.1.1 next-hop-local
<R3>refresh bgp all export
<R1>refresh bgp all import
这里优选R2的原因和上面说的一样
这里我们通过修改cost值然后路由走R3,配置命令:
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]ospf cost 50
3、优选从EBGP对等体学来的路由(EBGP学来的路由优先于IBGP路由);
这个实验通过R2、R3建立BGP邻居来实现,这样R2路由和R3路由会把通过EBGP获取的R4路由相互传递给对方。
配置命令如下:
[R2]bgp 100
[R2-bgp]peer 3.3.3.3 as-number 100
[R2-bgp]peer 3.3.3.3 connect-interface LoopBack0
[R2-bgp]peer 3.3.3.3 next-hop-local
[R3]bgp 100
[R3-bgp]peer 2.2.2.2 as-number 100
[R3-bgp]peer 2.2.2.2 connect-interface LoopBack0
[R3-bgp]peer 2.2.2.2 next-hop-local
查看R2、R3邻居:
之后在R2、R3看44.44.44.44的路由:
这里为啥会优先选择EBGP 邻居获取的路由,看路由明细,可以知道是EBGP获取的路由优先于IBGP获取的
这里配置结论出来后先解除R2、R3的BGP邻居。
[R2]bgp 100
[R2-bgp]un peer 3.3.3.3
[R3]bgp 100
[R3-bgp]un peer 2.2.2.2
4.⽐较“MED”属性,指的是⼀个路由器去往⼀个 BGP 路由⽹段的距离,类似 cost,在有效EBGP邻居使用;
这里看路由,优先选择走R2
通过修改MED让路由优先选择走R3,配置命令:
[R2]route-policy med permit node 10
[R2]apply cost 100
[R2]bgp 100
[R2-bgp]peer 24.1.1.4 route-policy med export //在R2出方向配置,也可以在R4入方向配置;
查看结果
查看路由明细,R2不优先的原因是MED值
5、⽐较“起源属性” 指的是已什么⽅式注⼊进 BGP 协议的,Origin属性值按优先级从高到低的排列是:IGP、EGP及Incomplete;
这里通过在R1上创建一个环回口引入ospf,然后在R2 BGP中引入ospf,在R3 BGP中network, 在R4上查看验证
配置命令:
[R1]int l111
[R1-LoopBack111]ip address 111.1.1.1 255.255.255.255
[R1-LoopBack111]ospf enable 1 area 0
[R2]bgp 100
[R2-bgp]import-route ospf 1
[R3]bgp 100
[R3-bgp]network 111.1.1.1 32
在R4上查看验证:
得出结论:network>import
6、⽐较“as-path” 属性 AS 号越短越好 ;
这个实验基清除上一个实验配置的路由引入,然后查看R4的BGP路由表可以看到路由优先经过R3,这里我通过修该as属性走R2,配置命令如下:
先清楚引入的配置,然后看R4路由表:
[R2]bgp 100
[R2-bgp]un import-route ospf 1
[R3]bgp 100
[R3-bgp]un network 111.1.1.1
在R3上手动追加as300,然后在R4在次看配置结果:
[R3]route-policy as permit node 10
[R3-route-policy]apply as-path 300 300 300 additive //这里可以对as进行重写,追加,或者清空。我这里配置的是追加
[R3]bgp 100
[R3-bgp] peer 34.1.1.4 route-policy as export //在出口方向上引入
7、本地始发的BGP路由优于从其他对等体学习到的路由,本地始发的路由优先级:优选手动聚合>自动聚合>network>import>从对等体学到的;
这里对这一条路选路原则单独做一个实验
拓扑:
基础配置命令:
R1:
#
sysname R1
#
interface GigabitEthernet0/0/0
ip address 12.1.1.1 255.255.255.0
#
bgp 100
router-id 1.1.1.1
peer 12.1.1.2 as-number 200
#
ip route-static 10.1.1.0 255.255.255.252 NULL0
ip route-static 10.1.1.8 255.255.255.252 NULL0
ip route-static 10.1.1.12 255.255.255.252 NULL0
#
R2:
#
sysname R2
#
interface GigabitEthernet0/0/0
ip address 12.1.1.2 255.255.255.0
#
bgp 200
router-id 2.2.2.2
peer 12.1.1.1 as-number 100
#
这里反着顺序实验:import<network<自动聚合<手动聚合
7.1 通过import引入静态路由:
[R1-bgp]import-route static
这有三条最优路由
7.2 通过Network引入:
[R1-bgp] network 10.1.1.0 255.255.255.252
检查路由表:
7.3 自动聚合:
[R1-bgp]summary automatic
这里的10.0.0.0 是因为自动聚合自动聚合成一个网段,比如:192.168.1.1/24 是C类IP地址,自动聚合以后会默认聚合成192.168.1.0/24 A类、B类也是如此
7.4 使用手动聚合:
[R1-bgp]aggregate 10.0.0.0 8
检查路由:
注:这里的手动聚合还有一个点是,抑制明细路由命令如下;
[R1-bgp]aggregate 10.0.0.0 255.0.0.0 detail-suppressed //就是在路由后面加上detail-suppressed
在R2上查看
然后在R2的BGP路由表最终聚合成1条路由,同时以前路由的明细和配置的属性也会丢失,就会可能出现环路的可能。但是在10.0.0.0路由明细里面可以看到多了一个Atomic-aggregate(聚合者),可以知道是哪个路由聚合的,集合者ID多少。为了避免环路还可以在后面加上 as-set ,这样会把聚合的路由的as号加上。
8、⽐较“本地优先级local_preferred属性,数值越⼤越好,默认值是 100。AS内部有效;
这里的的话我们先看看R1上的BGP路由,44.44.44.44优先是R2,我们通过改下R2的local_pre值,让优先走R3。
配置命令:
[R2]route-policy lp permit node 10
[R2-route-policy]apply local-preference 50
[R2]bgp 100
[R2-bgp]peer 1.1.1.1route-policy lp export
在R1上再看路由:
9、⽐较“协议⾸选值preferred-Value属性,数值越⼤越好,默认值是 0,只在本设备⽣效,不会传递 (华为私有属性);
这个实验接上一个实验的配置,因为Pre_val只能本地生效,直接在R1如方向配置,让路由优先经过R2。
配置命令如下:
[R1]route-policy pv permit node 10
[R1-route-policy]apply preferred-value 50
[R1]bgp 100
[R1-bgp]peer 2.2.2.2 route-policy pv import
这里在分享一个BGP属性熟记小方法,记住:漂亮老男人 PL LAO MEN
P:preferred-Value
L:local_preferred
L:本地始发
A:AS_path
O:Origin
M:MED
E:EBGP>IBGP
N:Next-hop