Ip地址规划,例如:R1连R2,则R1路由器IP为12.1.1.1/24,R2路由器IP为12.1.1.2/24,其他路由器同上。
基础命令:
R1:
bgp 100
peer 12.1.1.2 as-number 200 #与AS区域号为200内的12.1.1.2路由器建立对等体
ipv4-family unicast
undo synchronization
network 15.1.1.0 255.255.255.0 #将15.1.1.0网段宣告出去,注:宣告的网段一定要在自己的路由表里
peer 12.1.1.2 enable
R1:
bgp 200
peer 3.3.3.3 as-number 200
peer 3.3.3.3 connect-interface LoopBack0 #与3.3.3.3建立对等体的时候使用LooBack0接口建立
peer 12.1.1.1 as-number 100
#
ipv4-family unicast
undo synchronization
peer 3.3.3.3 enable
peer 3.3.3.3 next-hop-local #将下一跳属性设为自身与对等体相连的接口地址
peer 12.1.1.1 enable
BGP路由优选属性(顺序比较)
0.路由下一跳必须可达,在R2上输入peer 3.3.3.3 next-hop-local,R4同理
1.首选值越大越优,默认值为0。
2.本地优先级越大越有,默认值为100。
3.本地始发。
4.AS-Path越短越优。
5.起源属性
6.MED值越小越优。
7.EBGP>IBGP。
8.去往下一跳的IGP Cost值越小越优。
9.Cluster-List越短越优。
10.发送者Router-ID越小越优,如果属性中携带Originator-ID,则直接比较Originator-ID,均为越小越优。
11.Peer邻居的IP地址越小越优。
当路由器将本地路由表中的IGP协议路由通过Network或者import-route两种发布到BGP时, 在BGP路由表中,Next_Hop属性为0.0.0.0。
我在R3上创建了条静态路由,指向Null0,并且把他Network
然后查看本地路由表会发现,下一跳地址是0.0.0.0的
如果下一跳是EBGP,下一跳接口就会改变
如果下一跳是IBGP,下一跳接口就会是本地出接口地址
R2当配置了上图的命令时,在R3上看到bgp路由表,就会看到下一跳改变了,变成了R2的更新源地址,因为是从EBGP发过来IBGP内,E->I不变,I->E变。如下图
为了证明E->I不变,I->E变,我们把命令undo掉,查看bgp路由表
在R4上看也并没有改变。
所以我们得出结论:
1、描述到达目的网段的下一跳地址,不一定时直连下一跳,因为有可能是非直连邻居。
2、当路由器将本地路由表中的IGP协议路由通过Network或者import-route两种发布到BGP时, 在BGP路由表中,Next_Hop属性为0.0.0.0。
3、当路由器将本地始发的BGP路由通告给IBGP邻居时,Next_Hop为这台路由器的更新源,一般 就是Loopback接口地址。
4、当路由器将路由通告给EBGP邻居时,不管是不是始发路由。Next_Hop为这台路由器的更新 源,一般就是建立邻居的直连接口地址。
5、即当路由传递给EBGP邻居时,Next_Hop会改变;当传递给IBGP邻居时,不会改变。
该值不是属性,无法随路由传递。在R3的入方向修改。举例:peer 4.4.4.4 preferred-value 1
注意:这个值只是在本地,不会随着路由传递
首先我们在R3上看到15.1.1.0/24网段的路由只有从2.2.2.2方向来的
为了体现BGP路由优选,我们在R5上将15.1.1.0/24位的网段引入
之后在R3上就可以看到去往15.1.1.0/24
现在是2.2.2.2最优,因为输在了RID上,RID是越小越优,所以R3去往15.1.1.0/24网段会选择2.2.2.2去
我们可以选择4.4.4.4为下一跳,首先将首选值更改为1
配置完之后,再来查看bgp路由表里面的15.1.1.0,我们就看到了2.2.2.2输在了PreVal属性
注意:路由优选是按顺序来执行的,如果我们这个首选值已经选了最优的了,那么就不会再有后面的选择,所以我们在进行下一项本地优先级之前,就需要删除首选值的命令
只传递给IBGP邻居,可随路由传递出去。在R3的入方向调用路由策略进行修改。
(1)配置命令
ip ip-prefix 15 index 10 permit 15.1.1.0 24 如果匹配15.1.1.0 24网段就允许过
route-policy LP permit node 10
if-match ip-prefix 15
apply local-preference 101
bgp 200
peer 4.4.4.4 route-policy LP import
我们要想修改本地优先级,那么首先就得需要抓取路由
修改完之后,就可以看到本地优先级已经被改为101了
手动汇总>自动汇总>Network>Import。在R1上观察现象,操作步骤如下:
(1)在R1上创建一条静态路由10.0.0.0/8,然后在BGP中进行network 10.0.0.0 24和import-route static。观察network和import两类路由。
首先先创建一个静态路由
然后就将他们引入直连还有network宣告
就可以看到bgp路由表有两个10.0.0.0/8网段的路由了
后面的“i”表示是network宣告进来的,“?”则表示import进来的
我们从上图可以看到,import比不过network的原因是路由类型,由这样可以得知,network进来的路由优先级是比import路由进来的优先级大的
(2)在R1上创建一个loopback1:10.1.1.0/24,然后在BGP中引入直连接口,随后输入summary automatic自动汇总命令。注意:自动聚合只对引入的路由进行聚合
在loopback1上创建一个10.1.1.0/24
然后在bgp上引入直连,并且再自动汇总
就可以看到多了一条路由进了BGP路由表
我们查看路由是怎么选取的
最优的路由是选取的自动聚合的路由,所以我们可以知道,Summary>Network>Import
(3)在R1上输入aggregate 10.0.0.0 255.0.0.0,生成一条手动汇总路由。
这时,我们再看BGP路由表,发现又多了一跳路由
我们依旧查看路由是怎么选的
由此又可以得出,手动聚合>自动聚合>Network>import
在R3的入方向调用路由策略修改。
(1)配置命令
ip ip-prefix 15 index 10 permit 15.1.1.0 24
route-policy AS-Path permit node 10
if-match ip-prefix 15
apply as-path 101 102 103 additive
bgp 200
peer 2.2.2.2 route-policy AS-Path import
我们在R3上配置好命令,并且将AS_path改为101,102,103
此时我们查看路由表
我们可以看到,导致2.2.2.2选不上的原因是因为AS_path太长了
IGP>EGP>Incomplete。
优于目前EGP协议已经淘汰,看不到起源属性为EGP的路由,所以只需要比较IGP(Network)>Incomplete(Import)即可。
Network(i)>EGP(E)>Import(?)
一开始,我是在R1和R5上使用Network将路由引入,所以他会提示是i
之后,我在R1上将Network改成Import,就会变成下图
这里我们可以看到,IGP的优先级是要比Import的优先级高的
在R3的入方向调用路由策略修改。
(1)配置命令
ip ip-prefix 15 index 10 permit 15.1.1.0 24
route-policy MED permit node 10
if-match ip-prefix 15
apply cost 1
bgp 200
compare-different-as-med---------使能比较不同区域路由的MED值,默认只比较相同区域的MED值
peer 2.2.2.2 route-policy MED import
按照上述配置之后,结果如下图
此时需要在R4上观察情况,让R3向R4发送一条路由:15.1.1.0/24,此时在R4上观察R3和R5各自发来的两条15.1.1.0/24的优选结果。
(1)首先在R3上创建一条静态路由:ip route-static 15.1.1.0 255.255.255.0 NULL0 description EBGP>IBGP。
(2)在R3的bgp视图下宣告15.1.1.0路由,让R3将该路由发送给R4。但是此时R3发送给R4的路由的AS-Path属性为空,在比较EBGP>IBGP之前会优先比较AS-Path。
这时候是因为AS_Path短,所以被优选
(3)此时需要将R3发送路由的AS-Path属性修改一下,长度修改为和R5发送的相同即可,R5发送的AS-Path属性中为一跳。
route-policy E>I permit node 10
if-match ip-prefix 15
apply as-path 111 additive
bgp 200
peer 4.4.4.4 route-policy E>I export
(4)此时在R4上观察路由优选结果
在R3的出接口修改OSPF的Cost值即可,将R3的G0/0/0接口Cost值改大,下一跳即会优选R4。
原本是2.2.2.2为最优选路,现在会变成4.4.4.4为最优选路
IGP的Cost值越小越优,所以4.4.4.4毫无疑问的当选为最优路径啦
若以上8条选路规则完全相同,则可以通过命令让路由负载。但是只在IP公共路由表进行负载,但是BGP还是会根据后面的规则继续优选,直到选出一条最优路由发出去。
(1)配置命令
bgp 200
maximum load-balancing ibgp 2-----------使能IBGP路由负载,如果最优路由为EBGP,则最后的参数修改为ebgp。即IBGP和EBGP不同同时进行负载。
我们先来看看ip路由表,只有一条路由,那我们接下来要进行负载
我们配置完后,发现是可以选取8条路由来进行负载,因为我们现在只有两台,那我们写个2
这时,我们再查看ip路由表,发现依旧还是只有一条路由。
为什么配置了负载命令之后还是不行呢?我们来看看形成BGP路由等价负载分担的条件是什么。
这时我们发现,原来,不仅要前8条相同,AS_Path的属性也要完全相同,所以我们当然进行不了负载啦。我们现在来修改一下AS_Path看看。
我们将从4.4.4.4来的AS_Path改成100,然后再查看ip路由表
这时候,我们可以看到负载成功了,但是这样会形成环路,因为AS_Path一样了,所以,不介意采用这种方式,我们可以采取忽略这个规则
load-balancing as-path-ignore-----------BGP路由负载时,AS-Path属性必须完全相同,不光是长度相同。所以这里需要忽略AS-Path的比较规则。
我们将之前的配置Undo之后,就回到原来的状态,并且配置好忽略命令后是一样可以负载的
该属性为路由反射器相关属性。
(1)此次在R2上观察现象,首先在R2和R4之间建立IBGP邻居关系。
(2)在R3宣告一条路由,让R4直接发送给R2.
(3)将R3配置成路由反射器,将R4配置为反射客户端。此时R4宣告的路由经过R3反射,会将同样的路由也反射给R2一份。反射过程中所有属性均不改变。
这时,在R2上会看到有两条44.44.44.44的路由
(4)在R2上观察两条路由的优选结果。直接发送给R2的路由没有经过反射,所有没有Cluster-List,长度为0;经过反射的路由会携带Cluster-List。