实验拓扑:
要求:
R1、R2是EBGP关系,R2、R4是IBGP关系,R4、R5是EBGP邻居关系
R1与R5的环回可以通信
1、配置IP地址
2、BGP承载与IGP之上,所以给AS 2 启用IGP协议--OSPF
给AS 2 内配置OSPF 环境,R2连接R1,R4连接R5的接口不宣告到OSPF里。
配置完成后,检查IGP环境是不是可以通信的,用R2的环回Ping R4的环回进行测试:
3、配置BGP:手动指定邻居:
1)R1、R2建立EBGP邻居:
在R1上,指定R2为邻居:
[R1]bgp 1
[R1-bgp]peer 12.1.1.2 as-number 2
在R2上,也需要指定R1为邻居
[R2]bgp 2
[R2-bgp]peer 12.1.1.1 as-number 1
此时,R1与R2的邻居关系已经建立,查看:
2)R2、R4建立IBGP邻居:
在R2上,指定R4为邻居:
[R2]bgp 2
[R2-bgp]peer 34.1.1.4 as-number 2
在R4上,指定R2为邻居:
[R4]bgp 2
[R4-bgp]peer 23.1.1.2 as-number 2
此时,R2、R4邻居关系已经建立
3)R4、R5建立邻居关系:
R4、R5建立邻居关系的话,如果按照前面的方式,就需要写所有接口,如果实际链路不止两条,就会很麻烦,所以可以让两边的环回建立邻居,这样中间的链路都可以走,也就是负载均衡的。
让R4、R5的环回建立邻居:
R4、R5环回必须先可以通信,才可以建邻。
此时R4、R5的环回无法通信,通过写静态路由使其实现通信:
在R4上:
在R5上:
测试:
环回可以通信之后,通过手动指定建立R4、R5环回为邻居:
此时,邻居关系一直停在Active状态
原因:此时是R4、R5的环回在建立邻居,路由器默认出接口发包,所以R4发包时会以出接口的源地址发给R5,那么R5回包的时候,就会回到R4的出接口,并没有回包到环回接口,所以导致建邻失败。
解决:将发包的源地址改为环回接口的地址:
在R4上:
[R4]bgp 2
[R4-bgp]peer 5.5.5.5 connect-interface LoopBack 1
在R5上:
[R5]bgp 3
[R5-bgp]peer 4.4.4.4 connect-interface LoopBack 1
此时,邻居关系又停在Idle状态
原因:查看BGP邻居表显示包发不出去,BGP默认EBGP间所有的BGP数据包的TTL值为1,而用环回建邻跳数为2,所以包到达不了对面,导致建邻失败
解决:修改EGP的多跳
在R4上:
[R4]bgp 2
[R4-bgp]peer 5.5.5.5 ebgp-max-hop 2
在R5上:
[R5]bgp 3
[R5-bgp]peer 4.4.4.4 ebgp-max-hop 2
此时,R4、R5的环回建邻成功:
4、宣告:
注意:宣告时 ,掩码必须和路由表里保持一致
BGP协议本身不计算生成路由条目;负责转发从其他BGP邻居传递过来的路由条目;
同时可以将本地路由表中任意路由宣告到BGP协议中来;
BGP宣告配置时,只能宣告本地路由表中的路由条目,且宣告配置中网络号的掩码必须和路由表中的记录完全一致
在R1上:
[R1]bgp 1
[R1-bgp]network 1.1.1.0 24
查看BGP表:(BGP表内容:路由+属性)
当BGP设备进行宣告配置后,本地生成BGP表:装载本地发出及接收到所有BGP路由
状态:
* 表示可用
> 表示条目优秀—可以加表,可以传递(共享给本地的其他邻居)
状态处的i表示该条目通过IBGP邻居关系学习
不优的原因:1、下一跳不可达(因为AS-BY-AS)
加表:查看路由表:
优先级取值为0-255,当优先级为255的时候,就算有可达路径,也不选择这条路
EBGP默认优先级为255
此时,R4上查看路由表,发现去往R1换回的下一跳是R1的接口,但真实路由是从R2传到R1的,因为在同一个AS内,属性不变,所以下一跳没有变。
下一跳没有变,R4就无法学到R1,所以R2要将流量传到R4中去,下一跳应该是R2自己的接口
修改下一跳接口为本地接口:
[R2]bgp 2
[R2-bgp]peer 34.1.1.4 next-hop-local
此时,查看R5的路由表:
下一跳为R4,因为R4和R5是EBGP关系,属性会改变,此时,假如去1.1.1.1,就是先经过R4,再到R2,最后到R1。
此时,在R5上pingR1环回,通不了,因为R5知道R1在哪,R1不知道R5在哪
解决:将R5的环回宣告到BGP中
[R5]bgp 3
[R5-bgp]network 5.5.5.0 24
有R5环回,但是不加表,查看路由表,去往R5环回走静态,但是静态优先级比IBGP高,所以不会学IBGP
解决:
先删掉原来写的静态路由
然后写上环回32位的路由,学24和32位不冲突
此时,R5环回变为可以加表的优秀路径
因为在同一个AS里属性不变,所以在R2上去R5环回不是优秀路径,需要修改下一跳
所以在R4上修改下一跳为本地接口:
[R4]bgp 2
[R4-bgp]peer 23.1.1.2 next-hop-local
此时,查看R4路由表,发现R5的环回通过EBGP学到的,并且学到的是24位
在R2上查看:此时,变成了可加表的优秀路径,下一跳也是R4本地接口
此时,R1上的路由也是优的
此时检测R1环回pingR5环回,发现通不了。
原因:BGP路由黑洞,控制层面可达,数据层面不可达
详细解释:
R1环回pingR5环回,流量到R2上,查寻路由表,去R5环回的路由下一跳为34.1.1.4
所以R2要先去34.1.1.4,就要查询路由表看看34网段怎么走:
查询完路由表发现R2要去34.1.1.4的下一跳是23.1.1.3, 而23.1.1.3在R3上。
但是目标是R5的环回,R3的路由表里并没有R5的环回,就会将此包丢弃。
因此产生了BGP的路由黑洞
解决方法:
1、物理全连,
2、重发布
3、全部设备配置BGP
4、MPLS
所以给R3也配置BGP协议:
在R3上:
[R3]bgp 2
[R3-bgp]router-id 3.3.3.3
[R3-bgp]peer 23.1.1.2 as-number 2
[R3-bgp]peer 34.1.1.4 as-number 2
在R2上:手动指定R3为邻居
[R2]bgp 2
[R2-bgp]peer 23.1.1.3 as-number 2
在R4上:手动指定R3为邻居
[R4]bgp 2
[R4-bgp]peer 34.1.1.3 as-number 2
查看BGP邻居表,邻居关系已经建立
此时,R3上学到的路由都不是最优的,还是要需要修改下一跳为本地
在R2、R4上修改下一跳为本地接口:
在R2上:
[R2]bgp 2
[R2-bgp]peer 23.1.1.3 next-hop-local
在R4上:
[R4]bgp 2
[R4-bgp]peer 34.1.1.3 next-hop-local
在R3上查看BGP邻居:此时都变成了可加表的优秀路由
此时,R1、R5可以通信:
手机扫一扫
移动阅读更方便
你可能感兴趣的文章