目录
1.使用直连接口IP地址建立EBGP对等体关系(对R1和R2间)
2.IBGP对等体关系建立(使用环回建立IBGP 对等体关系,R2-R3、R3-R4之间)
3.使用环回IP地址建立EBGP对等体关系(R4-R5之间,也可以用直连接口IP建立EBGP对等体关系)
解决方法:(建立全联,这里R2-R3-R4联了,但R2和R4没有联,所以在R2-R4建立IBGP对等体关系)
一、BGP基础配置
1.使用直连接口IP地址建立EBGP对等体关系(对R1和R2间)
1)启动BGP协议
[ri]bgp 100 ----该数字为AS号,而非进程号。
2)设置RID值
[r1-bgp]router-id 1.1.1.1 全网唯一
查看BGP邻居表,这会没有BGP 信息
3)配置BGP对等体,并指定对等体所在AS号
[r1-bgp]peer 12.0.0.2 as-number 200 ---BGP协议需要手工指定邻居,且需要指定邻居所在AS编号。
这会查看BGP邻居表,停留在connect的状态,因为对端邻居还没起BGP服务
对R2做以上同样的配置:
[R2]bgp 200
[R2-bgp]router-id 2.2.2.2
[R2-bgp]peer 12.0.0.1 as-number 100
再次查看BGP邻居表,R1、R2建邻状态都为Established,说明R1,R2邻居建立成功。
2.IBGP对等体关系建立(使用环回建立IBGP 对等体关系,R2-R3、R3-R4之间)
R2-R3之间:
[R2]bgp 200
[R2-bgp]peer 3.3.3.3 as-number 200
[R3]bgp 200
[R3-bgp]router-id 3.3.3.3
[R3-bgp]peer 2.2.2.2 as-number 200
查看BGP邻居表,这会的邻居状态为Idle,因为在建立IBGP全联时,我们先保证路由可达。所以我先配置且运行OSPF 协议使AS 200 内每台设备都能学到邻居路由信息。
配置OSPF :
查看BGP邻居表,这会的状态为Action,邻居建立失败;因为R2上peer邻居目的地址是3.3.3.3,而R3上接收的却是23.0.0.3,所以无法建立起邻居。
解决方法:
[r2-bgp]peer 3.3.3.3 connect-interface LoopBack 0
[r3-bgp]peer 2.2.2.2 connect-interface LoopBack 0
查看BGP邻居表,这会状态为Established,建邻成功;
R3-R4之间:
[R3]bgp 200
[R3-bgp]peer 4.4.4.4 as-number 200
[R3-bgp]peer 4.4.4.4 connect-interface LoopBack0
[R4]bgp 200
[R4-bgp]peer 3.3.3.3 as-number 200
[R4-bgp]peer 3.3.3.3 connect-interface LoopBack 0
查看BGP邻居表:
3.使用环回IP地址建立EBGP对等体关系(R4-R5之间,也可以用直连接口IP建立EBGP对等体关系)
[R4]bgp 200
[r4-bgp]peer 5.5.5.5 as-number 300
[r4-bgp]peer 5.5.5.5 connect-interface LoopBack 0
[r5]bgp 300
[r5-bgp]router-id 5.5.5 .5
[r5-bgp]peer 4.4.4.4 as-number 200
[r5-bgp]peer 4.4.4.4 connect-interface LoopBack 0
查看BGP邻居表,这会的邻居状态为Idle,因为R4、R5之间用EBGP建立对等体使用的是环回建立邻居,但双方没有对方的环回路由信息,所以建立不起来邻居。
解决方法:(双方分别配置去往对方的静态路由信息)
[r4]ip route-static 5.5.5.5 32 45.0.0.5--掩码为“32”,这里写成主机路由的形式。
[r5]ip route-static 4.4.4.4 32 45.0.0.4
查看BGP邻居表,这会的状态还是Idle。
因为在此时,邻居间会发生对等体震荡,原因在于双方已经建立了TCP连接,并建立了BGP会话,从而来到了establish状态,但在该状态中,因为TTL值为1,本地会感知此时不应该处于establish状态,故发送notification报文从而释放会话关系。
解决方法:(修改接口TTL值)
[r4-bgp]peer 5.5.5.5 ebgp-max-hop 2 ----这里TTL值改为2,根据需求修改。
[r5-bgp]peer 4.4.4.4 ebgp-max-hop 2
查看BGP邻居表,这会状态为Established。
二、BGP的路由发布过程(基于上面的拓扑,实验路由发布)
通过network命令发布路由
对于BGP而言,只要是路由表中存在的路由信息都可以通过该命令发布。
[r1-bgp]network 1.1.1.0 24 ----目标网络号和掩码信息,两个参数必须与全局路由表中的内容相同。
[r1]display bgp routing-table----查看BGP路由表
状态码含义:
- "*" --代表可用。 ------设备收到路由条目后,会根据下一跳属性中的参数来查找本地路由表,检测该条路由信息的可性,如果下一跳属性可达,则本条路由可用。---如果不可用,则该路由忽略。
- ">" --代表优选。 -------收到多条到达相同网段的路由信息时,并且都可用,则将依据属性在其中选择最优的路由作为优选者,优选路由可以加入到全局路由表并进行路由传递
- "i" --代表该路由是从IBGP对等体学习到的。
查看BGP路由表,这会R2学到了1.1.1.0 路由,“*>”可用且优选,路由进行加表。
查看R3的BGP路由表,这会的R3也学到1.1.1.0路由信息,"i" 表示该路由是从IBGP对等体学习到的。
因为AS-BY-AS规则,认为一个AS是一个整体,那么路由项在一个整体内部传递时,所有的路径属性都应该是相同的,否则就不是一个整体。而下一跳也是路径属性之一,默认情况下无法修改,故导致路由可用性校验失败。
解决方法:(把路径属性的下一跳改为本地)
[R2-bgp]peer 3.3.3.3 next-hop-local---将传递给3.3.3.3邻居的路由信息中的下一跳属性修改为本地。该命令仅在IBGP对等体关系中修改。
查看BGP路由表,这会的1.1.1.0路由可用且优选。
这会再查看R4的BGP路由表,发现没有学到关于1.1.1.0的路由信息。原因是IBGP水平分割,从IBGP对等体学习到某条BGP路由时,它将不能再把这条路由通告给任何IBGP对等体。
解决方法:(建立全联,这里R2-R3-R4联了,但R2和R4没有联,所以在R2-R4建立IBGP对等体关系)
[R2]bgp 200
[R2-bgp]peer 4.4.4.4 as-number 200
[R2-bgp]peer 4.4.4.4 connect-interface LoopBack 0
[R2-bgp]peer 4.4.4.4 next-hop-local ---并且下一跳属性改为本地
[R4]bgp 200
[R4-bgp]peer 2.2.2.2 as-number 200
[R4-bgp]peer 2.2.2.2 connect-interface LoopBack 0
查看BGP路由表,这会在R4、R5上也学到了1.1.1.0 的路由信息,且可用优选。
查看R4的路由表,这会的1.1.1.0路由是从R2学来的。
这会从R5ping去R1ping不通,因为R1上没有R5上的发布路由信息,所以我们还要重复以上的步骤从R5路由发布过去。
[R5-bgp]network 10.1.1.1 24
[R5-bgp]network 10.1.1.1 24
[R4-bgp]peer 2.2.2.2 next-hop-local
[R4-bgp]peer 3.3.3.3 next-hop-local