一、 BGP 介绍
路由分为IGP内部路由协议和EGP外部路由协议,在EGP中引入了AS(自治系统),在IGP中没有AS,路由协议创建的是进程,只有BGP会用到AS。
二、 BGP作用
AS内IGP,AS间EGP:
AS间都是使用BGP联通,AS内部可以使用:OSPF、RIP、ISIS,AS之间无需感知,只需要知道在一个AS内。
三、路由协议发展史
四、AS自治系统
如:
五、BGP特点
RIP :UDP ,端口520 ,环境小,路由少,UDP快;
OSPF: UDP,端口 89。
六、BGP使用场景
七、BGP邻居概述
1、运行BGP的路由器都叫Speakers,建立邻居后称为BGP Peers。
2、OSPF是用组播或者单播三层直连方式建立邻居,但是BGP不一定需要直连,如下图RTB可以和RTD建立邻居:
3、但是如果非直连要跨连接建立邻居,就要通过IGP和静态路由来提供TCP连接的可达性:
A------B--------C ## A想跟C建立邻居就要通过IGP或静态
4、邻居必须手动指定:
BGP邻居建立由单播方式,必须指定邻居对象。
5、一台BGP路由只能运行在一个AS内:
一个运行BGP的路由器只能运行在一个AS内,并非根据接口定义AS
八、BGP邻居类型
IBGP,内部BGP邻居,一个AS内的邻居;
EBGP,外部BGP邻居,不同AS间的邻居。
八、BGP邻居配置命令
router-id ##不配置也可以,系统会自己选择,但是必须唯一,不可冲突。
邻居必须手动建立,所以要输入:
peer 邻居IP地址 as-number 邻居的AS号
BGP邻居包60s发送,180s失效。
通过TCP三次握手确认包保持Keepalive。
九、BGP邻居建立条件
1、 邻居地址可达,在直连环境中配上同网段地址肯定可达,如果不是直连的2台路由要建立BGP邻居,必须通过静态路由、动态(OSPF、RIP)建立可达才可以;
2、自身配置的邻居所在AS号必须=邻居配置中声明所在AS号:
RTE配置的BGP号为300,RTC在BGP与RTE建立邻居时,宣告的RTEBGP AS号必须为300
3、数据包源IP=对方配置的邻居IP(这个源IP也叫更新源,也将作为路由的下一跳IP):
在建立邻居的时候通常会用回环口,因为比物理口稳定,只要路由器有路可达就能保持畅通,但是一个路由的回环口发送数据包出口是路由的物理地址,但是回环口一般跟物理地址不在一个网段也不是一个IP地址,所以不符合此条件,要更改更新源。
整个条件建立过程如下图:
E1 要与 1-1建立邻居,根据条件1、判断邻居是否可达(10.1.1.1路由器会查看自己的路由表,发现去往10.1.1.0网段的路由是直连路由出口走S0/0/0);2、自身配置的邻居所在AS号必须=邻居配置中声明所在AS号;3、S0/0/0的出接口地址10.1.1.1就作为发包的源地址(三次握手的第一步)发送,对面接收到数据包后对比自己邻居列表里E1的信息是否与对方的发包源地址一致,一致建立。
下图是配置和邻居建立整个过程:
R3回环口(1.1.1.2)想与R1回环口(1.1.1.1) 建立邻居;
R1回环口(1.1.1.2)想与R3物理口(3.3.3.3)建立邻居;
双方交换邻居时发现双方的源出口IP地址与要建立的邻居地址不一致,所以TCP无法完成三次握手,无法完成建立,需要通过下图修改源地址的方式把R3出接口改成1.1.1.1。
九、BGP回环口邻居建立实验
为了让回环口满足第一个条件网络可达,先配置路由使网络通讯正常,这里使用OSPF:
看配置可以看出,我们想通过回环口1.1.1.1 与 回环口2.2.2.2 建立邻居,但是我们的直连物理口都是12.0.0.0段的地址,源地址跟目的地址不在一个网络内,无法通讯就无法完成TCP三次握手:
AR1想通过1.1.1.1与AR2的2.2.2.2彼此的回环口建立邻居,1.1.1.1与2.2.2.2发数据包各自寻找彼此,但是出接口确实通过12.0.0.1和12.0.0.2去寻找,整个握手包应该是1.1.1.1 --> 2.2.2.2 和2.2.2.2 --> 1.1.1.1:
首先排查BGP邻居建立第一个条件,网络可达:
再排查BGP邻居建立第二个条件,自身配置的邻居所在AS号=邻居配置中声明所在AS号:
最后排查BGP邻居建立第三个条件,数据包源IP=对方配置的邻居IP:
AR1的源地址是12.0.0.1,AR2配置的邻居IP是1.1.1.1,所以不一致无法建立TCP三次握手所以邻居建立失败,所以要用命令更改更新源:
下图中:RTC想与RTB建立邻居,除了要宣告他的IP地址和AS号外,还要指定RTB的更新源接口为回环口0,可以单边做:
切回我们的实验,把去往邻居的更新源端口指定为各自回环口:
验证我们上面说的(整个握手包应该是1.1.1.1 --> 2.2.2.2 和2.2.2.2 --> 1.1.1.1):
问:AR1与AR3两个AS之间这种外部BGP可以使用回环口建立邻居?测试一下看看:
首先路由可达,异AS之间,网络可达无法使用OSPF、RIP等,所以这里使用静态路由:
配置完毕,查看BGP状态:
抓包观察TCP三次握手状态:
通过bgp状态和抓包观察可得:邻居状态没有正常建立,抓包中三次握手没有成功建立而是反复发送重置包并且终止了邻居建立和关闭了三次握手。
通过抓包分析同AS和不同AS的TTL值:
同AS 的TTL为1; 不同AS的TTL为255。
AR2发送一个包给AR3,TTL=1,但是因为是回环口,经过一次路由减1所以TTL最终 1-1=0丢包了,所以有了多跳,我们现在属于EBGP建立,非直连必须修改TTL:
注:更改TTL只用在EBGP中做,如果ebgp-max-hop后面跟数字TTL就为对应数字,如果不打任何数字为255,必须两边都做,做下测试:
十、BGP身份验证
十、BGP 报文结构和类型
BGP所有报文都是单播
封装过程:
L2 二层数据链路层封装头部:以太网、PPP、SDLC等;
IP 三层网络层头部:网络协议号为6表示传输层为TCP; TCP
TCP 四层传输层头部:TCP端口为179表示为 BGP协议;
BGP 头部:
BGP头部中的类型:
Open包,建立邻居,只交互一次就不再发送;
Keeplive包,维护邻居关系;
Notification包,关闭BGP连接并记录事件;
Update包,路由更新路由属性:
Route-refresh:当路由策略发生变化时,可通过此命令刷新。
十一、BGP 报文状态和检验机制
重置BGP回到初始,查找路由是否有可达邻居路由:
接收到对方的Open包、最后完成建立:
Active(大部分错误):表示有配置配错:数据包源地址不匹配、AS号配置错误、对方邻居没有配置;
Connect:低级错误,没路由,少配置,路由不存在;
Idele:低级错误,没路由,少配置;
十二、BGP 数据库
dis bgp peer ## BG邻居表
dis bgp routing-table ## BGP路由表
Adj-RIB-In ## 有无入策略,经过策略筛选后才会装入路由表,才会根基选路原则列入IP路由表
Adj-RIB-Out ## 通过出方向策略处理后发送给出去
十三、BGP 路由宣告原则
IGP:通过network邻居建立和路由宣告是打包在一起的;
BGP:邻居建立是建立、路由宣告是宣告。
注:路由汇总前提是路由学习,路由学习要么宣告,要么引入。
精确:network 192.168.1.1 24 ,不可以输入192.168.0.0/16,必须在路由表中可以找到,不支持汇总。
*最优:不可用 >最右
IBGP学习到路由不会宣告给IBGP:为了防止环路
i 代表ibgp本地宣告,?代表引入宣告路由,除了import-route是?其他都是i
引入路由时一般配合路由策略:
十四、 BGP下一跳
“BGP的路由条目在同一个AS内的传递,是不会修改下一条地址”,这就造成你从EBGP学过来的路由条目,在除了其EBGP对等体外的,同一AS内的路由节点上传递,是无法加入路由表的!!
注:
IBGP传往EBGP或者EBGP传往IBGP是会更改下一跳为自己的地址,所以建议IBGP之间最好都配上next-hop-local,EBGP之间建议使用物理口建邻居
十五、 BGP防环机制
AS内(IBGP之间)防环:水平分割,从IBGP收到的更新不会发布给IBGP(IBGP更新只传一跳)。
解决1:要么IBGP邻居全互联,但是配置维护开销太大。
解决2:路由反射器(Route-Reflector)
解决3:联盟(Confederation)
AS间(EBGP之间)防环:AS_Path,BGP更新内的重要属性,代表该路由所经过的AS号,如果接受路由器发现AS号与本地AS号一致,丢弃。
十五、 BGP路由聚合
1、BGP静态路由聚合
通过配置静态路由汇总明细路由,再用network进行宣告
先用路由黑洞的方式生成一条静态路由,存放于路由表中,然后再用network宣告,直接宣告会报错,因为你路由表中没有。
2、BGP静态路由聚合实验
R1配置4条路由,宣告于BGP中:
BGP的邻居也会学习到这3条路由:
3、路由汇总1:静态聚合
直接汇总一条汇总后的路由: 17.17.0.0 /22,但是由于路由表中没有这一条,要先手动配置一条静态黑洞路由。
4、 路由汇总2:自动聚合
suppressed 表示抑制,把多条路由抑制成一条。
5、路由汇总3:手动聚合
LOOPBACK 2-5 引入路由,LOOPBACK 6-9为本地宣告路由
做手动汇总配置:
agggregate 17.17.4.0/22
在 R2上查看
如果不想要下面明细路由,后缀跟 aggregate 17.17.4.0 22 detail-suppressed
在AR2上查看
注:如果手动聚合和自动聚合同时存在冲突,手动聚合优先级大于自动聚合。
6、BG路由聚合问题
因为自己内部设备聚合,不代表别人也做聚合,因为某些条件只有单方面聚合。
AR3的路由在本地宣告后18.18.1.1-4.1的4个地址段路由没有做汇总;
AR2收到了18.18.1.1-4.1的4个段路由后做了一个路由汇总
然后查看R3的路由会发现,汇总的路由明明在AR3上,但是AR3的路由信息中显示给AR2:
这种情况会导致环路产生(AR3没有汇总,AR2汇总,AR2把AR3的汇总路由返给AR3后AR3还使用了,正常是不该使用。),AR中可以看到18.18的几个段路由路径都是AS3:
在AR3中这条18.18.0.0/22的路由汇总来自于AS 12,但这条路由的真实路径是从AR3过去AR1到AR2、再从AR2-AR1-AR3回来,就是说在AR1汇总后丢失了原来的AS号,如果没有丢失AS号根据防环规则如果接收后会丢弃。
针对此种情况,可以增加一条配置参数,保留原有明细路由的AS_PATH属性:
as-set
问题现象图:
问题处理:
所以完善上面的实验:
在AR2上汇总AR3路由时配置AS-SET
查看AR2的路由表会显示路径还是AS3:
注:明细路由跟汇总路由不在同一个路由器和AS区域时,就要配置as-set,不然会造成环路
十六、 BGP路由属性
1、BGP属性:
公认:能被所有BGP路由器都识别;
必循:必须存在;
任意:不是必须存在,有规则性。
可选:不一定能被所有BGP路由器识别;
过渡:如果无法识别,可以保留传递给邻居;
非过度:如果无法识别,则丢弃该属性。
达到目标所经过的AS数量越少路径越优先。
除了私有属性,本地优先级是第一个比较的属性。
用于影响别人怎么进入自己的AS区域
2、BGP选路原则
⑨路由最前面有i表示IBGP,空表示EBGP;
3、BGP可改属性
4、BGP路由控制
5、BGP属性实验
①、 根据下面的拓扑中BGP路由属性和选路的规则
检查R4和R1邻居建立:
在AR4和AR5中分别宣告4.4.4.4、5.5.5.5路由,追踪路由路径:
查看AR4是否学到AR5:
②、修改Prefval值
配置介绍:
实验配置: AR1中的4.4.4.4/32路由控制出口路由选择,可以把Prefval值改大(只对自己有效):
③ 、修改本地优先值
配置介绍:
实验配置:
AR1去往4.4.4.4有2个路径,一条3.3.3.3、一条2.2.2.2,把下一跳路径修改为3.3.3.3,所以在AR3中修改本地优先值为101(默认100),让自己最优先。(把自己学到的改成200,发出去也是200)
修改前:
修改本地优先值:
修改后:
④、修改Med值
只有EBGP会携带,在AS之间传递,默认0,影响别的路由进入自己AS时配置。
配置介绍:
实验配置: 在AR2上配置,AR4上验证
ENSP模拟此命令有BUG,真机有效。
⑤、修改as path值
配置指定邻居发过来的AS编号重复次数
十七、路由策略修改路由属性实验
1、配置Local-Preference:影响出站路由,影响RTD怎么出去,越大越优先。
2、配置Med:影响入站路由,越小越优先。
#进入设备前acl就起作用的设为import,进入设备后acl才起作用的设为export。
十八、BGP 路由过滤
1、在出方向过滤5.5.5.5/32:
在BGP出方向调用:
在AR1查看,5.5.5.5路由就被过滤了:
查看5.5.5.5路由转发情况:
没有做任何转发。
2、在出方向过滤6.6.6.6/32:
定义acl 6.6.6.6网段拒绝;
在BGP进程下调用filter-policy,但是这个调用对全部邻居生效。
十九 、 AS-Path-Filter
1、正则表达式符号详解
2、常用组合
3、案例详解
4、AS路径过滤控制BGP路由示例
二十 、 团体属性
在BGP中没有Tag标记属性,可以使用community团队属性做标记。
如果希望给邻居的流量带有团体属性就要配置 peer x.x.x.x advertise-community:
二十一、BGP复位操作
实际环境中,一定要反复确认!!!!
二十二、总结 BGP 配置命令介绍
as-number, 必须配置自己的as号;
connect-interface loopback 数字,使用回环口就要更改更新源为指定回环口,用于非直连网络建立邻居;
ebgp-max-hop 5,修改ebgp的下一跳TTL,不然会变0丢包;
next-hop-local,用于邻居更新,把下一跳属性设为自身的IP地址,适用范围:回环口IBGP;
password cipher,加密传输;
ip route-static 18.18.18.9.1 24 NULL0 ,配置静态路由黑洞,方便后续宣告;
summary automatic,自动路由聚合;
aggregate 18.18.1.0 24 ,手动路由聚合;
aggregate 17.17.4.0 22 detail-suppressed,手动聚合路由后隐藏明细路由只显示汇总的一条路由条目;
aggregate 18.18.1.0 24 as-set,手动聚合且保留原AS号;
一个AS内可以需改LocalPre本地优先级影响选路;
AS建可以修改MED影响选路;
团体属性4种:internet(向所有邻居宣告)、No_Advertise(不宣告任何人)、No_Export(不流出本AS内,不向任何人发送EBGP邻居宣告但可以向联盟内EBGP宣告)、No_Export_Subconfed (不会流出本AS内, 不向任何人发送EBGP邻居宣告)
在route-policy中 apply community 后跟团体属性
peer x.x.x.x advertise-community 配置允许邻居发送团体属性给邻居
ip community-filter 1 permit 配置一个名为1的团体属性过滤器,使用route-policy匹配团体属性过滤器