Seamless mpls(无缝的),是mpls 的高级特性。在同一个as内用到多个igp协议或进程做到互通,就把一个as划分为多个igp域,这多个域之间没有重分发,在这种场景中想要实现3层vpn,就需要用到seamless
bgp主要用在两个as互联上,as no已经由2B(1-65535)升级为4B
as-path:所以bgp称为路径矢量
cisco里有私有的属性:ebgp路由的老化时间(so到这里cisco是13条路由属性,而华为是12条)//bgp路由还有老化?check?
后续还有aigp属性
bgp的路由在bgp的路由表中不存在老化时间,这点和igp不同
Keep alive是tcp的报文,并不是bgp的原生报文。建立bgp peer只需要open和keep alive
update:用于通告+撤销路由
notification主要是针对open和update报文的校验。判断这俩报文有问题,则发送notification报文,接收方会断开邻居并重新建立。后续通过reset的方式重置bgp nei也会发送notification报文
Route-refresh:用来请求要刷新的路由条目。需要双方支持route-refresh功能。orf出方向路由过滤也会用到route-refresh
keepalive每隔60s发送一次,Timeout 180s(如果双方的timeout不一致,则双方协商使用最小值)
open报文
4B as no是在可选参数里进行通告的,而不是在open报文中的 as no字段中-格式已经固定好了。
bgp的router-id先选择逻辑口大的,没有逻辑口则选用物理口大的
keepalive报文是tcp的-为了保证tcp会话的保活
update
路由的属性是通过path attribute携带
撤销的路由是不会携带路径属性的
nlri会传递私网标签,rd值。不同的协议会有不同的nlri
bgp路由必须要携带的路由属性:as path,next hop, origin(i,e,?),缺一即非法路由
在bgp中如果多跳路由条目的属性相同,则这些路由条目可以合并发送-在一个报文中通告多条路由//那再bgp初始通告路由时,不得通告好多update报文?check
reset进程也可以触发发送no报文
针对前缀做了策略之后,需要请求对应的前缀信息,让对方重新通告,策略才能生效-本质原因是bgp是触发更新的,而不是周期性更新。
afi 有两大类ipv4和ipv6,二层vpn也是afi
ldp会话,是ip地址大的发起;msdp会话是看ip地址小的。bgp会话默认情况下bgp peer同时是发起者(connect)和监听者(listener)
在connect状态下发起tcp会话的建立/在发送open报文前,需要先建立tcp的会话 。会话建立后进入open-sent状态,发送open报文-携带自己支持的功能,as no,r-id等。对方接收并确认了open报文,状态会进行pen-confirm,并回复keepalive。对端接收到keepalive报文,就说明对方已经接收并确认了你发送的open报文,本地状态也会有open-sent变为open-confirm。在open-sent状态接收到keepalive报文能直接跳到established状态。
open和keepalive报文就能完成bgp peer的建立
该重传计时器会同时维护connect和active两个状态。每次connect-retry超时就会退到connect状态
Connect-retry 默认为32s。
connect状态下发起一次tcp会话的建立,connect将定时器刷新为32s,然后进入active状态。在active状态下不断发起tcp连接。定时器超时后,active状态将定时器重置为32s,重新进入connect状态。
connect和active状态都会进入到idle状态,cisco中存在idle定时器,会成系数增长。第一次等待60s去尝试建立tcp会话,第二次就是60*2
connect和active是用于tcp会话的建立,在会话建立成功后,进入open-sent状态才会发送open报文
idle状态-tcp会话没有建立:
2.ebgp建立peer发起的ip 的ttl为1。ebgp使用非直连建立peer,可以如上2种配置。关闭直连检查后(只适用于直连设备间使用loop接口建立ebgp peer 的场景),在建立ebgp peer时就不会检查目标ip地址是否为直连网段地址,Ttl-1后虽然为0,但目标ip正好是本地的ip,可以正常处理。只有需要被继续转发的ip报文才会被丢弃掉。
3.tcp会话的特点:一次建联,双向转发。tcp的会话的发起者。双方均配置为listen模式,没有主动发起端。这条的状态应该是处于active或者connect状态。
4.idle状态存在等待定时器,在定时器内时不会重新建立连接的。idle等待间隔的时间,存在idle惩罚期,第一次60s,第二次120s。有时间自动建立peer慢,就clear下手动触发。
5.
双方通过默认路由到达bgp peer,虽然两端可以ping通,但不能建立tcp的会话,因到达peer不存在明细路由而是通过默认路由到达的。cisco中不能建立邻居关系,在华为中能建立bgp邻居关系,但通告的路由不是最有路由。华为的check一下。这样做的目的是防止流量环路-因为默认路由容易出现环路
发起了tcp会话的建立,但失败了:
bgp的认证使用tcp的md5选项进行认证的
As no在open报文里。如果本端通告的as no和邻居通告的as no不一致,会通告notification报文//报错,断开tcp会话重新建联,是可以在瞬时看到open-sent状态的。只不过对方马上回复notification报文,本端需要马上断开tcp会话重新建立,但大部分看到邻居状态是connect和active,这种情况就可能以为tcp会话没有建立,但实际是open报文导致的,此时可以开debug查看
r-id冲突,open报文会通告本端 的r-id,无法建立bgp的 nei,但会导致tcp会话的重新建立。
ip源检查,tcp的syn报文的发送源和我指定的bgp peer地址不一致
bgp的数据库
Adj-in/out是临时表项,无法查看的
从这看改入方向路由策略,不能直接生效-需要对端重新给我传一次路由,需要重启bgp peer 。解决方案:route-refresh报文,让peer重新通告路由-重新过一次策略引擎
出方向路由策略,本端会重新通告一次路由条目,可以立即生效。
路由软刷新就是基于route-refresh报文的
A发送route-refresh报文,而B需要支持route-refresh功能
network是把路由宣告进bgp(要和rib中一样),ospf是把符合network网段的接口宣告进ospf。
华为是聚合优于net、重分发。
nlri下面的子属性,addtional path属性-类似用三层vpn的rd:让设备可以同时通告来自于不同peer通告的相同的前缀。默认bgp在通告路由时只能将最优的路由通告给peer 。而addtional path属性可以通告多条路由-在通告的路由前缀的前面追加add path属性。则peer在接收到前缀后会将add path+前缀结合进行判断(类似于l3vpn传递的vpn路由 rd+前缀,来自不同设备的私网路由在经过rr时能够全部被反射而不会优选)。该属性用于bgp的frr。一条前缀的主路径down,仍存在备份路径,能够实现流量的快速切换,切换延时小于50ms。
IBGP通过水平分割的方式防止路由环路的问题:从一个ibgp peer学到的路由条目,不会在传递给其他的ibgp peer。而ebgp是通过as path防环。
如果下一跳不可达,则该路由是无效路由(在cisco里是非优路由,check bgp非优路由场景)。开启igp同步,可能导致无效路由;下一跳不存在lsp也是无效路由
RTB在通告ebgp路由给ebgp peer会自动更改nh为rtb,而通告给ibgp peer则默认不更改nh
以上行为是为了避免次优路径的问题,见下图:C可以通过igp直接到达B,那由A更改下一跳为自己后,就出现次优路径了。(但是本质来说,igp的优先级要大于bgp,不会出问题,check ebgp为20,ibgp为200)
以下情况可以配置:不更改下一跳;ebgp的机制:第三方下一跳:我收到的路由条目的下一跳地址,和我peer的地址是否在同一个网段,如果在则默认不更改nh,否则更改。
ibgp的水平分割
解决水平分割无法接收ibgp路由的问题:1全互联;2.rr;3.联盟
rr为了防环,增加了cluster-list和originator id属性
as内可以划分多个联盟,联盟间建立ebgp peer,通告路由时不会更改nh(因为联盟是在通一个igp内,路由可达,更改下一跳可能出现次优路径的场景),会追加联盟的as no-但选路时当长度为0处理
正常情况下,2不会把从1学到的ibgp(起源ebgp)路由传递给3
解决方案:在AS100内创建两个联盟。当前网络中联盟用的少,基本用到的都是rr来破ibgp的水平分割。
有路由只代表控制层面没问题,转发层面要另看。
igp的同步: 通过igp的同步,影响控制层面的路由通告,来间接影响转发层面的问题(因为只是通过间接的方式避免该问题,没啥实际意义,现在已经取消该配置了)。如在E开启igp和bgp的同步,会查看我接收的bgp路由在igp路由中是否也存在,存在才能在本地标识为有效进行优选;如果不存在,就是无效路由,就不能参与选路,也就不能通告给peer。
解决方案:1.将bgp引入到igp,但isis不开扩展的话最多就只能通告3万条路由
2.ibgp全互联
真正解决上图问题的方案:mpls。流量在E上封装到达B的标签,流量到 e就ok了
-----------------------------------------------------
2023-01-17 22:02
视频2
路由阻尼是为了防止路由震荡的机制
路由被惩罚后可以重新启用的条件:
1.计算后的惩罚值小于重用门限,路由就可以被使用
2.经过4次半衰期,惩罚值都没有小于750,而该路由条目最大的抑制时间就是60m,超过60m后就可以被正常使用
路由首次震荡,赋予1000的惩罚值,第二次震荡+1000,达到抑制门限(不能再加了),该路由不可使用。经历第一个半衰期,惩罚值减半降低为1000,但仍超过重用门限,不能使用…
路由前有d,代表damping。这个仅是bgp针对不可靠路由的处理方式(eigrp也有)
路由条目之前被惩罚过,前缀前会有h。d是指该路由条目处在惩罚阶段
3种方式通告默认路由
方案3,重分发默认路由,需要加参数
1.network :起源于igp(要精确宣告前缀和掩码长度,保持和路由表中完全一致。相比igp中也可以通过network的方式宣告if,可以把在这个范围内的所有接口都宣告进igp;而bgp中network的是宣告的路由);import :路由引入。
可以将引入的外部路由进行自动聚合为主类路由,而network的路由不能自动聚合
前三条为公认毕遵
as-path在ibgp之间传递也携带,只不过as no为空
ebgp之间传递路由默认不携带local-preference值,但接收方会默认为100
6.就是打一个标记,标识这条路由是聚合路由,提示路由属性会有丢失
7.标识该路由是由哪台设备聚合的 r-id,聚合路由来自哪个as no
8.community类似于igp的tag。存在公认的团体属性,其作用就类似于公认的路由属性
9/10可以避免反射路由环路的问题
13 l3vpn rt值;igp的参数;bgp的soo属性。evpn也会用到扩展团体属性
14 在同一个igp的区域里,配置了多个bgp的as,在as间建立bgp的peer,在传递路由时为避免次优路径可以使用aigp属性
4在选择1.1.1.1/32的路由时,会优选3的
cisco里bgp选路原则,
1比较weight值,默认都是32768,且weight只是本地有意义,比如4针对peer 2或3设置的。//华为里是prefer value
2比较loacl pre 默认为100。在ebgp之间不传递local pre属性,ebgp路由里看不到这个值,但是ebgp peer会默认该值为100
3.比较本地起源路由
4.as path
5。起源属性,1上network通告的。network和聚合的路由路由起源属性都是i
6.1在network 该路由时指定的med值
7 ebgp优于ibgp
8 到达bgp下一跳igp cost值小的
14 aigp:在上图2和3上开启aigp属性后,2和3在通告bgp路由给4时会通告到达目标前缀的igp cost值,4接收到会进行累计计算-可以计算到达1完整的cost值,从而避免次优路径。本质就是在通告路由时,增加peer到达目标前缀的igp cost值。aigp优先级排序在as path之前。
注aigp:
15 pmsi 提供组播服务接口(用于转发组播流量)。数据帧的概念:bum帧(广播帧、未知单播帧、组播帧),uc帧(单播帧)。
组播vpn,二层vpn、evpn。
在二层vpn和evpn中是把帧打标签转发。针对bum帧如何转发?在sw的转发原理中针对bum帧的转发方式是泛洪。而在二层vpn或evpn里,pe设备间建立2层vpn和evpn的 peer,如何在peer间通告使用何种方式转发bum帧-通过pmsi属性传递。
现在在二层vpn或evpn里是通过ir(本地复制)的方式转发bum帧,在下一代组播vpn里中通过mldp(Multipoint extensions for LDP 多点ldp)的方式转发组播帧,还有mte。而基于什么样的方式转发组播帧需要在pmsi的属性中通告给对方。本质就是告诉peer用什么样的方式转发bum帧。
as path属性。当bgp路由被传出本as,会追加as no 。bgp中的as path,起到了类似rip的跳数作用
As no 在ebgp中起到防环作用
Cisco和华为从ibgp peer学到包含本端as no的路由条目,可正常接收;但juniper不行
通告追加as no影响选路
As seq:有序as,就是路由经过是有顺序的。但是当路由汇总时不会携带明细路由的as path属性,就可能出现环路,解决方案:在汇总路由后面设置as set参数,就可以在汇总路由里追加明细路由的as no ,会使用()代表是无序的,()中的as no在进行as path计算是累计为1
nh属性中特殊的场景:ebgp第三方下一跳。设备A、C、D在同一个广播域,a-c ebgp ,c-d ebgp peer,a把路由通告给c,c会修改nh 为self再通告给d。此时d访问a就出现了次优路径。
解决次优的方式会由ebgp自动去实现:第三方下一跳。通告路由的设备C在将路由通告给D时,会判断路由的nh是否和D在同一个网段,在同一个网段,则C在向d通告路由时不更改nh。
xr新增团体属性
bgp进程重启,rp板主备倒换,保证转发层面没有问题
---------------------------------------------------
2023-01-18 15:03
Bgp 视频3
在xr之间配置ebgp peer时,需要配置如上策略:pass。如果不配置则邻居关系正常建立但不能通告和接收路由。asr设备(用的ios)需要确认
在cisco中通过network方式在bgp中宣告一条igp的路由,生成bgp路由的nh会引用igp的nh-这样可以避免次优路径,本身就是igp可达//3通过ospf和bgp学到1.1.1.1/32,通过改ad值,让其优选bgp,则就出现次优路径了。
本地宣告直连和重分发的以及聚合路由,nh会设置为0.0.0.0,告知peer把包交给我才能到达目的地。但华为不是上述原则
r是指该bgp路由被抑制了,rib优选了其他路由协议的路由
------------------------------
2023-01-18 21:11
第18个video
橙线为建立的bgp peer关系。在PE2通告路由1.1.1.1/32,rr会收到abr1和abr2通告的这条路由。Abr1/2也是rr-因为在同一个大as内。因为metro侧rr只会将最优路由通告给peer,所以经过两级反射后pe1只能接收到1条到达1.1.1.1/32的路由。由于rr是旁挂的方式进行部署,只反射了abr1通告的路由(更优)。当abr1-pe1之间链路中断,流量会从abr2绕行abr1再去1.1.1.1-因为pe1只能收到rr反射的abr1通告的路由
frr在isp网络中很重要,isp需要保证我到达目标前缀,如果主链路down,需要实现50ms快速收敛。需要提前对目标前缀计算出备份路径,并将其写入到fib中,一旦主路径down可以马上把流量切换到备份路径。
Bgp frr的前提,针对同一个前缀存在多个nh。为了让pe1能同时收到abr1和2通告的bgp路由,从而实现frr,引出additional path属性。该属性类似于l3vpn中的rd属性,通告rd+prefix实现前缀的复用。但rd只能用于私网路由,而additional path可以用于任何路由。so可以在abr1和2上通告bgp路由时携带add path,则rr会认为这是两条不同的前缀,分开选路,然后全部反射给pe1。Pe1收到两条可以到达1.1.1.1/32的bgp路由,so可在pe1上配置bgp的 frr
在nlri中新增一个add path id 的值
首先peer间会在open报文里会进行能力协商,add path会区分发送或接收者
Path id不需要配置,启用功能后会自动生成
让xr1开启add path(可以配置为send),为每个前缀打上不同的path id,并将3条路由都通告给xr2(可以配置为receive)
Set 注意一下
如果不配置additional path xx就不能识别打path id 的前缀,会忽略path id,识别为普通前缀。
Xr2上也需要开启add path功能(receive即可)
Add path功能会在open报文中协商,如果对方不支持add path功能(即,在建立邻居之前,需要进行能力协商),则xr1在通告路由时不会通告path id的值。 check:如果对方不支持add path功能,那为何通告的路由还会携带add path属性?
Xr1上show,能看到从三台R转发的bgp路由
这样配置之后在本地形成ecmp,结果如下图
默认只会将最优的路由加入到路由表里,该命令可以将次优路由也加入到路由表里
lab拓扑:
在metro侧,使用lo0来建立peer关系,在core侧使用loo1来建立peer关系。Metro-rr,core-rr,abr-rr,因为在同一个as,需要部署rr来传递ibgp 路由
rr使用group简化配置
cisco不支持将一个接口同时宣告进多个igp进程(不贴合实际)
Show bgp ipv4 un summ
-a/是华为的带源ping
cisco上看这两条路由还是有效的,能参与选路;但在华为上测试,就是无效的,因为nh不可达。需在abr上更改路由nh为self
xr更改nh为self未生效的问题。
----------------------------------------------------
2023-01-19 9:32
视频 19
bgp路由属性
As set
AS3上进行手动聚合后,明细路由的路由属性会丢失(本质就是聚合路由会丢失明细路由的属性值)。As3会将汇总路由通告给as1/2/4,因为明细路由属性丢失,as1和2会接收汇总路由-问题:汇总路由被通告回始发路由器。
问题:当AS1上1.1.1.0/24的明细没了,AS1会认为到达该前缀可以走汇总,流量发到AS3.在bgp收敛完成前,在AS1和AS3之间形成环路。
为了避免汇总路由被始发路由器接收到,可以在汇总路由时加as set参数,即汇总路由会携带明细路由的as path属性,是无序的。
As path属性包含两种类型的as no:有序as seq和无序as set,用()表示。选路时,针对汇总后无序的as no,总计为1 。
但是自动聚合就不能配置额外的参数
上述是私有顺序,每个厂商不同
cisco中针对引入的外部路由进行了优化,非0下一跳也可能是源于本地的。需要检查非0 nh是不是也是igp的nh,如果也是的话,这条路由也是源于本地路由。
将静态路由引入bgp ,nh为0.0.0.0
将igp通过network或import的方式引入到bgp,bgp的nh为igp的nh,避免次优
修改ibgp ad值从200变为109,小于ospf 的110。则3会通过ospf和ibgp同时学到到达1.1.1.1/32的路由,并根据ad优选ibgp路由,造成次优
1-2,2-3之间都建立ebgp peer,就可以使用ebgp的第三方nh避免次优。ebgp默认会更改路由的nh,router在通告路由时,会判断bgp路由的nh和要通告给peer的地址是否在同一个网段,在同一个网段则不更改bgp路由的nh。
但华为针对此场景还是使用0.0.0.0 or 127.0.0.1(就是华为的ebgp没有第三方下一跳优化)
network和import都会携带med值,但汇总不会携带med(丢失明细路由的属性,汇总了本来也没法在携带med)。默认只会比较来自同一个as 路由条目的med值。med属性举例:
默认只比较源自同一个as的bgp路由的med属性
针对源自不同as的bgp路由,需要在as1上开启针对源自不同as的bgp路由的med
med是可选非过渡属性,使用场景
场景1:2收到1.1.1.1/32会携带med=10的属性。如果这条路由条目并不是始发自己的,则在ebgp peer间传递路由条目时,并不会携带med属性,即2在传递路由给3时会将 med属性剥离。
场景2:1.1.1.1/32通告者变为2,则2向1和3通告路由时都会携带med属性(因为2是路由的始发者)
场景3:路由通告者变为3,则3向2通告路由时会携带med属性。同时由于2和1是ibgp peer关系,则2在向1通告的bgp路由能携带med属性(ibgp peer间可以通告非本as的 med)
Ebgp 的ad值为20,ibgp的ad值为200
11条在ecmp之后,cisco私有。Ebgp 路由的uptime时间
路由黑洞解决方案1,2,3是联盟
rr反射路由时的非非不传,不改变路由属性,只增加cluster list和origin id用于防环:来自非客户端的路由,不会传递给非客户端。
rr本质上就是破坏了ibgp的水平分割,通过反射的方式把ibgp路由反射给其他ibgp peer。由于打破了ibgp防环的水平分割机制,引入cluster-list和origial id来防止环路
在反射的bgp路由里增加cluster-list(追加cluster id)和original id属性。通过cluster-list可以防止rr之间反射bgp路由的环路问题
由客户端始发的路由经过多次反射后又回到了客户端,需要使用original id来进行防环
aigp属性
属性的由来:同一个igp区域内有100台router,但这样部署的问题:1.igp能否支持这样的网络。如果使用ospf的话,当网络出现震荡时,ospf 的spf算法计算范围大,会造成设备压力大,收敛慢-设备间计算不同步,产生转发微环。
so当前在运营商的网络中不会把大量设备放进同一个igp区域内,会把igp做一个分割,使用不同的igp进程或者不同的igp协议
将大的igp区域划分为3段小的igp区域
把大的网络划分到小的igp的区域,在区域内缩小router的数量,这样便于维护同时减小igp的计算压力实现快速收敛。但存在以下问题
isp网络中提到新的场景Seamless
上图,3台router都在as 100内,但在不同igp区域(isis or ospf)/进程中。两端pe间想建立bgp的peer,如果是在同一个igp区域内直接建立bgp peer没有任何问题-pe1-2之间igp路由可达 。但此时由于pe1/2在不同的igp区域里,他俩是不通的-中间abr设备上没有做路由引入。上述组网称为seamless。
为了最终在pe1-2之间建立bgp peer/将不同的igp区域连到一起,需要pe1-abr以及pe2-rr都建立ibgp peer,然后abr作为rr使用。pe就能通过bgp学到对端pe的路由。后续想实现端到端的l3vpn,可以在pe上通告一条用于建立l3vpn/mpbgp的路由,两端可以通过bgp路由建立mpbgp peer关系。一般会在pe和abr之间部署多台设备,so pe-abr之间要启用lsp,先把流量交给abr转发。所以seamless网络又称为seamless mpls。
由于pe1-2之间使用bgp路由建立端到端的bgp邻居。ce间如何通信?流量到达pe1,会给流量封装2层标签,内层为vpn label,外层为lsp label。但此场景两层标签不通,因外层lsp标签是到abr的,内层私网标签是pe2分配的,abr不认。现象为控制层面peer关系能建立但是流量不通。
解决思路,将两个分段的igp区域连接到一起-使用bgp的lu路由进行关联/bgp label unicast。本质就是bgp也可以分配标签,这里就是利用bgp的标签将两个igp的区域关联到一起,此时流量转发时有三层标签,内层标签为vpn标签,中间为bgp lu标签用于关联过渡,外层为lsp标签
Seamless mpls是现网中使用很多的客户首选方案,可以减少igp区域的设备数量,设备数量太多在isp网络中也不现实。将大的igp区域划分为小的igp区域,在小igp区域间的abr设备上配置bgp,通过bgp lu标签来关联不同的igp区域 ,实现端到端的流量互通。但是存在问题如下:
rr在传递路由时不更改任何的路由属性(只追加两个防环属性,cluster list和original id),so pe1接收到两条bgp路由的nh都是pe2,这样这两条路由就不是有效路由的-因为pe1和2不在同一个igp区域,nh不可达。so在seamless的场景中,需要在rr上更改nh为自我。此时优选路由时比到第九条原则,比较bgp nh的igpcost值小的,但这也只是比较到abr这一段的,不是到达pe2整个端到端的cost,这样选出来可能就不是最优路径。引出aigp(累计的内部网关协议),让bgp在选路时看到端到端累计的cost值。
aigp指设备在通告路由条目时,同时会追加aigp属性,添加我到达目标前缀的本igp区域的cost值(可以理解为bgp or igp到达目标前缀的cost,因为这俩种路由的cost相同,只不过ad值不同)。即abr在向pe1通告1.1.1.1/32路由时,会同时通过aigp属性通告我到达1.1.1.1/32的cost,则pe1就能计算出完整的端到端累计cost,然后就优选累计值小的为最优路由。
目前客户网络中会部署seamless,在seamless中就需要考虑bgp的优选问题,需要开启aigp。在mpls中还需要考虑lsp的关联性
在多个as,也可以通过通告aigp实现端到端cost的累计计算。因为abr和两端都是igp可达的,就能计算每段端到端的cost,累加就能计算出完整的端到端的cost值
红色:通过bgp lu的路由条目关联不同的igp区域实现端到端的lsp
med有很多的限制,端到端只能使用aigp
aigp是真正的属性,而不是在其他属性中添加的标识
aigp属性不仅要把开关打开,还需要配置route-map/只支持通过策略的方式设置aigp的值
3支持aigp,但2不支持。解决方案1,可以将aigp属性转换为扩展团体属性在传递给peer
方案2,将aigp属性转换为med值
----------------------------------------------------------------------------
2023-01-20 11:18
Video 20
最基础理念:同一个as内应该运行同一个igp的区域。ospf虽然可以通过划分多区域,但会生成多种不同类型的lsa,造成设备计算压力。
为了减少同一个igp区域中的设备数量,引出新技术-seamless:在同一个as内使用多个igp的进程进行分割。如果在abr上做路由引入,1增加设备的负担,2不安全。so在现网中不会这样做。
rr是旁挂方式部署,在现网中应该部署两台rr,避免一台出现故障。旁挂部署rr,需要让metro侧rr不要优选,简单的把所有路由都通告给metro pe,1.首先避免流量走单边。2.避免这条路由对rr来说是最优的,但对metro pe是次优的。假如metro-rr只通告最优的通过abr1的路由,当metro-pe到abr1中断,metro-pe就不知道可以通过abr2到达ce2,因为metro-pe到达rr已经断了。
现网中有fallover测试,会模拟各种故障。 目的是测试流量的切换,集采和厂商测试都会测试 。语音和视频这种实时应用的延时和丢包有很大的依赖性,如果丢包和延时大于50ms,语音和视频就不能用了。So isp要求切换小于50ms,技术方案为frr。
故障的恢复时间=故障的感知时间(可通过bfd实现ms级故障检测,bfd会话down,通知上层协议down)+协议收敛时间+把最优路由重新下发到fib中-写表时间。
开启frr后,bfd会话down,会马上通知协议层和fib表(bfd可以同时联动协议和fib表,联动fib表是通过port(pst)来实现的。计算后的主备路径都会绑定port),会把fib表中主路径的出接口设置为down,由于提前以及计算出了备份路径,就可以直接把流量切换过来 。可以在拓扑上的metro-pe开启bgp frr功能,以abr1为主,abr2为备。cisco中称bgp frr为bgp pic(前缀独立收敛,就是用于bgp frr计算的)。在网络中bgp路由可能达到100w级别,就造成fallover切换时设备资源占用率很高。check 现网isis和bgp路由情况
aigp属性和ospf 的3类lsa(区域间路由)很相似,3类lsa会通告abr到达目标前缀的cost值。终端设备在接收到3类lsa后,会将到达abr的距离+abr到达目标前缀的距离,计算出完整的距离,从而实现不同区域端到端的选路。
------------------------------------------------------------------
2023-01-21 20:04
视频23
Bgp 安全特性
bgp是基于tcp连接的,易于收到攻击。常见的攻击如:tcp的半连接攻击-只攻击一台设备,也会导致这台设备瘫痪 。
全连接攻击:
客户端仅仅“连接”到服务器,然后再也不发送任何数据,直到服务器超时处理或者耗尽服务器的处理进程。
为何不发送任何数据呢? 因为一旦发送了数据,服务器检测到数据不合法后就可能断开此次连接;如果不发送数据的话,很多服务器只能阻塞在recv或者read调用上。
半连接攻击是耗尽全局的内存;全连接攻击耗尽的是主机的处理进程和连接数量。
提高bgp的可靠性:
1.认证:通过tcp的认证,实现针对bgp邻居的认证。
tcp是支持option的,即说明tcp是可扩展协议,长度在20-60B。常用的option就是md5和mss(最大段大小,用于实现tcp分段的)
2.防范bgp报文传递过程中被篡改,需要保证报文的完整性。flowspec可以避免设备受到dos和ddos攻击
3.邻居接收到路由前缀,如何验证前缀的有效性。使用到rpki技术-是否从正确的as收到了该前缀
bgp可能受到的攻击:
bgp会话劫持:设备上开启179端口号,很可能被劫持。攻击者只发送syn的报文,但不会发送ack报文-tcp的半连接攻击。
ddos攻击(分布式拒绝服务),通过达到设备发包的上限,把这台设备deny掉,后续流量全部deny。但如果是不同的设备或ip向你发发起连接,很可能每个ip只向你发1个包 ,数量很大的情况下(比如100w节点同时发1个包 )也难避免。ddos攻击是目前难防御的一种攻击。
12306过节时访问server很卡,这种不是黑客的恶意攻击,而是瞬时访问服务器的量激增,这样就需要建立不同的集群,把会话分到不同的服务器进行响应,从而保证网站是正常的。ddos攻击可怕的地方在于无法区分是正常的访问还是攻击。
dos攻击是1个ip在不断的发起请求,这种可以通过报文上限的方式进行防御。超过一定数量的报文就认为是攻击,deny掉
禁用as,是一种攻击的手段
dns攻击,就是dns欺骗
1.可以使用认证和loop接口建立邻居关系(和tcp报文中的源ip地址不一样)。本质就是tcp在建立会话时要进行ip源的检查。
使用直连接口建立peer关系,由于黑客发送的tcp的ip报文的源ip地址就是2设置的peer,就可以建立会话关系。此时在1上telnet 12.1.1.2:179,能成功。bgp没建立-因为没有发送open报文,但tcp会话已经建立起来。
gtsm机制(bgp和ospf都有-只存在于通过单播建立邻居关系的shamlink场景),通过ttl的跳数来防止中间人攻击
ibgp场景:比如3针对peer1开启gtms功能,指定gtsm为254,则接收到报文会检查ip ttl是否大于等于254,如果小于254(经过的跳数过多),则认为可能存在攻击,丢弃。
ebgp场景:ebgp多跳和gtms功能是冲突的,这俩参数都会修改ttl值。如果针对ebgp peer开启gtms功能后,则ebgp的ip ttl值会变为255,然后可以设置有效的范围值。相比配置多跳,无法针对ttl值进行验证。
可以通过ipsec来保证报文的完整性的。在两台设备上配置ipsec的tunnel,针对tunnel的端口配置bgp 的peer,对两边应用bgp的报文进行加密,都走ipsec的tunnel
前缀被劫持的场景
通过as path影响bgp的选路,实现黑客劫持访问服务器的流量
例2
比如黑客通告 /25位的,更精确。
劫持举例:巴基斯坦电信通告了一条更精确的路由-该路由之前被youtube使用,导致访问youtube的流量被转到了巴基斯坦。isp配置时很容易出现这种故障
解决方案:对通告的前缀进行源检查,这个as通告的前缀是否有效的,验证通过后才接收。引出rpki
cisco还有自己的解决方案,rpki(s-bgp和sobgp看一下就得了,都是通过证书的机制来验证邻居关系,并通过第三方来验证通告的前缀和as关系是否正常)。因为cisco不支持上述这俩,华为也是,因为前两种方案需要对现有bgp进行扩展,用的少。公网上可以看rpki的服务器
如何验证邻居给我通告的路由是否有效?是1通告的1.1.1.0/24还是2通告的有效?
应该存在第三方被认可的机构(类似银行的记账功能)。iana存在as和ip地址的对应关系(iana同时也负责ipv4地址和ipv6地址的分配)。我在接收到前缀后就和iana提供的as和前缀的对应关系进行对比就可以验证是否有效了(访问iana提供的具有as和前缀关系的服务器来实现 )
三种方案主要是实现方式不一样,但都会采用第三方的信任机构,才能知道前缀和as的对应关系是否正确
Rpki
Rir=iana。iana只对接运营商和商业客户。再下面的客户有isp去对接
roa就是前缀和as的对应关系列表
秘钥管理平台。Pki 公钥管理平台 Public Key Infrastructure
rpki路由信息管理平台,会保留所有的roa信息。平台有iana提供
router可以使用rpki协议和平台建立邻居关系,然后通过rpki协议获取roa信息。后续在接收到ebgp路由会去在roa中进行查找,是否有效。
默认情况下,只会ebgp邻居通告的路由进行源检查,ibgp peer通告的路由不会这样做,因为在同一个as内,就是在同一个isp内,不会存在路由劫持问题。来自as外部的路由,因为不信任其可靠性,需要进行源检查
将前缀和as no绑定生成签名
三种状态valid invalid unknown
前缀一样,但来源的as和roa不一致,才会将该路由标识为invalid;A 10.1.2/24应该也是invalid状态
B 30.1.1/24应该也是invalid
上面是ebgp peer
Invalid 路由是无效的,不能参与选路。
rpki最优路由计算,只是使用valid和unknown路由进行选路计算(xr上的计算结果不会影响选路,可以配置命令不考虑状态来始终影响选路)
unknown路由只能说明这条路由不在rpki database中,并不能说明是无效路由。so可以参加选路。
为减少验证的次数,一般只在边界设备上开启源检查(对接收到的ebgp路由进行源检查)
1已经对ebgp路由进行了源检查,然后会继续通过ebgp通告给2,浪费2的性能。这样在1通告给2 路由时,告知其我已经进行源检查,通过扩展团体属性传递(通告的是这三种状态valid invalid unknown),2就没必要再进行源检查.而针对unknown的路由,会在本地重新进行rpki检查。
从而避免每台设备都进行rpki检查
需要部署rpki的server,而router作为客户端,和server建立rpki连接,从server上下载所有roa的信息本地保存。后续接收到ebgp路由,就使用roa信息进行比对,验证是否合法。
-------------------------------------
2023-01-26 20:16
Video 24
aigp和addition path lab实验
现在运营商的网络会将一个大的as划分为多个小的igp的区域
isp通常会使用多链路或多节点来提升网络的可靠性。isis的lfa属于ip frr机制-针对前缀的。想使用快速切换,就需要用到frr
控制层面可以理解为协议的层面-在设备上就表现为主控板,负责控制层面的计算
rib表是基于RP表的,fib表是基于lc板
网络改为seamless的原因:单igp区域过大,导致区域内的node和link过多,导致后续收敛时间变长。为了减小故障域的范围,缩短spf算法的时间,出现seamless。
cisco和华为在推销的时候,提的是自己是解决方案的提供商,提出解决方案,然后才附带产品。而不会只提自己是产品提供商。重点在于服务,而非产品
rs中,接入、汇聚-核心都会采用口字型或日子型的部署(因为在同一机房内,设备可以任意连接),如下:
而isp就不会这样做,因为设备间距离较远,直接进行设备间的互联造成成本过高,so节约成本同要时保证一条链路故障后可以切换到另一条链路去,不会形成单点故障点,通常会采用以下口字型或环形的网络部署
但以上环路在开启frr可能会造成环路
在1 的接口下配置了remote lfa,那对于所有以该接口为出接口的前缀。都需要计算备份下一跳,计算当链路down之后有哪些设备可以成为这些前缀的备份nh,p、q空间由头节点进行计算:本质就是到达哪些邻居不经过故障链路的
Ip frr是针对前缀的
当前有三种可以实现ip frr的机制,lfa、remote lfa、 ti lfa(拓扑独立lfa,基于sr)。如果当前的网络是使用ldp来进行标签分发的,只能使用lfa或remote-lfa(r能覆盖90%的场景),能够最大限度的实现前缀的备份保护。Remote-lfa会先计算lfa,如果计算不出来才会计算remote-lfa
Remote-lfa存在环路的问题
1-4之间建立remote-ldp用于后续封装流量
step1 主路径1-3故障,将流量切换到备份路径
step2 1完成收敛,计算出新的最优路由,然后将流量切换到新的下一跳,产生临时环路。比如1/2上的isis(igp的收敛)收敛不一致,可能1已经计算了新的最优路径从2到达3,而2还认为走1,就会形成回切到新的主路径时的1-2间的转发微环。
在isp的环网中,设备越多,igp收敛不一致的现象会更加明显
回切转发微环的解决方案:
1.igp的前缀优先级,仅在本地有意义,报文中不会携带-在众多路由条目中需要先收敛哪条路由。比如让下游设备配置针对某些前缀提前收敛的方案(不太靠谱):2根据前缀优先级先去计算到达3.3.3.3/32的路由(针对指定的目标前缀),先完成收敛先写入fib,这就解决了1和2之间igp收敛不同步的问题。即便是几万条路由,当前igp的收敛时间也能达到ms,但瓶颈依然是要写到fib中。
2.在1上配置延迟回切到nm的时间,比如10s,在10s内流量都是交给pq节点的,这样就给下游设备更多的时间完成收敛-对应命令行micro-loop delay
Isp和idc和企业网不同,在isp中存在环的话,一定要保证流量切换的延迟。而idc和企业网出现环路对业务不会有太大影响。
isp集采设备的时候,需要同时看设备的性能和fallover的时间,可靠性-长期满负荷工作
--------------------------------------------------
2023-01-27 22:17
Vodeo 25
bgp的安全机制
bgp路由源认证:as和prefix的关系 ,RPKI
rpki是cisco和华为解决源认证的方案,在isp的网络中,一定会存在一台rpki服务器,且数据会实时的更新,而router也会定期去和服务器去同步数据(增量同步)。roueter的内存限制,不可能把所有的bgp明细路由(百万条级别)都down下来,所以rpki上roa保存的是汇总路由。
dos攻击:攻击者针对被攻击者发起大量的连接,导致服务器or网络设备性能达到上限,挂掉。dos攻击的特点是攻击源固定。攻击者的发包速率和建立的连接已经超过了上限,so防范的时候将这个ip地址deny就可以-可以利用ip黑名单。
ddos攻击:分布式。考验的是服务器并发处理能力,参照春节时12306的之前的问题。解决方案:1.限制服务器的处理能力,比如只让其每秒处理100个并发,超过上限的全部丢弃,先保证服务器能整个工作。2.增加服务器来提升集群处理的性能。ddos攻击的防御难点在于如何判断是正常的访问还是攻击。
bgp是基于tcp的,那针对一台设备的bgp发起攻击,可以使用多台肉鸡或多个ip同时对这台设备的tcp 179端口号(ip 6是tcp)发起连接。如何防范这种分布式攻击?引出bgp flowspect-该流说明是通过bgp来传递的(那意思也可以通过其他来传递,check,非网络的呢?可以通过其他信息传递flowspec么),该功能防止ddos攻击同时简化网络配置。
bgp流说明,只是通过bgp来传递流的动作和明细的,因为bgp的扩展性更强,同时可以跨域设备取传递。isis的扩展性也强,但只是针对直连设备的,必须一跳一跳的传递(直连建立isis peer)。而bgp是非直连的(非直连建立peer关系),可以只在需要部署的设备上应用就ok,很多扩展功能都是通过bgp来实现的。bgp的扩展性太强了,不光可以传递路由信息,还可以传递igp的参数信息,流的参数信息等,实现时只需要针对这些信息增加新的nlri。流的策略信息通过bgp传递给每一个peer。
在qos上中针对一个流限速,首先要抓取流,然后针对流做动作,是针对流来实现的,可理解为流的策略,在qos中需要在每一台设备上都配置相同的策略。反应出qos的配置量大,需要端到端的配置。
现在有了bgp flowspec可以把流的信息通过bgp来进行传递,peer收到流信息后可以实现本地应用,应用方式是在本地的每一个接口上都进行部署。后续在收到流量,并且流量匹配了策略,就会执行相应的动作。Bgp flowspec是针对流的,只不过流的策略信息通过bgp进行传递。
流匹配时可以match all-所有rule全部匹配才算匹配上;match any-只要匹配一条规则就算匹配上。
Step1:将流量交给清洗设备,过滤一下
bgp flowspec工作原理:Pe1(网络边界设备)上开启flowspec机制,router本身不具备分析非法流量功能,但网络中会存在ddos分析设备,pe先将流量交给ddos分析设备,让其发现攻击流量,然后ddos分析设备会通知security server-ss和pe1之间建立了flowspec 的bgp的peer。ss会将这部分攻击流量变为策略,策略就是针对攻击流量做deny,该策略信息通过flowspec(bgp的nlri)传递给pe。通过bgp的nlri将策略的明细信息传递给每一个flowspec peer。peer在收到后会在每一个接口上应用该策略。后续从接口上接收到流量,就会先去匹配策略,如果能匹配上在pe端就会丢弃该流量(流量在入设备就被丢弃,不会到达服务器)。
在这里用到了netflow:流分析协议。
pe设备不会将所有流量都重定向到ddos分析设备的,因为流量会很大,ddos设备是旁挂设备,如果把骨干网或业务网的所有流量都重定向到ddos设备,肯定hold不住,那可以在本地开启netflow功能(那在初始阶段pe设备如何判断需要将什么样的流量发给ddos分析设备,check)。netflow只负责流的采集而不负责分析,本地开启netflow后,会定期去采集经过我的流,采集流后会将流信息做成模板,模板中会定义很多流的字段,如:流的源目的ip地址,流来自哪个应用、协议,流量有多大等-模板由netflow提供,不同的版本模板时不一样的,当前是v9版本,v9的模板是基于tlv的,可以 扩展。把流量汇总之后 ,将流量信息通过netflow报文发送给分析设备,分析设备会根据这些信息去匹配本地的攻击数据库,匹配上的话就判定为攻击流量,会将这部分攻击流量的信息发送给serurity server,security server会根据攻击的流量信息生成policy,policy里去匹配流量,rule,匹配之后是针对流量进行的动作:限速、丢弃还是重定向-根据流量攻击配置方案不同采取不同的动作。如drop,security server会生成流信息,流信息中就包含匹配流的信息,和动作。将流信息通过bgp传递给每一个pe设备,pe设备收到后,如果本地开启flowspec,就会将策略信息应用到每一个if上,后续从接口上上收到流量,就会去匹配策略,执行动作。这种就是防御ddos的一种方法。
Bgp flowspec也可以用在限速,就不需要在每台设备上都进行配置,只需要在边界设备(接收流量的设备)上进行配置(多个pe不是都需要配置么?如何去选择controller端,check),只需要在controller端配置,client端会自动应用。
NLRI会包含两个参数:AFI和SAFI。会为策略信息生成新的safi,后续比如要传递云计算的信息,同样只需要新增safi就可以实现了。So bgp传递的不止是路由信息,flowspec传递的就是策略信息。
flowspec可以针对多个地址族实现,通过不同的type信息来标识不同信息,这些信息组成不同的rule
动作
本质就是将qos中学到的class map和policy map通过bgp来传递
现网配置举例
https://img2023.cnblogs.com/blog/2924805/202301/2924805-20230128142138211-200202997.png
在controller配置策略,然后目标是将策略下发到每一台bgp nei/client,ios xr可同时充当controller和client,而ios是不能作为controller ,只能接收并应用策略,但不能创建策略
Prx/rcd为0,是因为当前没有在controller端配置具体的策略,so不会通告具体的策略信息。如果配置完策略信息后,这块就应该有计数。
在controller端配置策略:一共4 step
1.通告class-map来匹配流量(在xr的qos中是通过class-map来抓取流量的,可以匹配acl),class-map在配置时可以指定针对后面的rule是match(比如创建了10条rule,10条rule全匹配那才算匹配上)还是match any(匹配一条即可),
2.在policy-map中针对class-map做动作(关联class-map,并选择动作)
3.在flowspec进程下去调用这个policy
4.客户端需要敲loca-install interface-all(用在ios上,将策略写到所有if上)
图片3和4的顺序弄反了
----------------------------------------------------------------------------------
2023-01-28 16:01
Video 26
pbr和路由策略
策略路由是针对流量的(配置转发nh和出if,及打标签),路由策略是针对收到和发出路由的策略。
上图的policy-map type为pbr,说明该policy用于pbr。client收到策略,会将策略下发到if-相当于为每个接口都配置了pbr。(本质就是利用bgp flowspec实现自动化的qos部署)
在policy-map中通过class来匹配class-map,drop为动作。
第二个class-default为默认的permit
以上policy-map没有去match协议,而是直接match的流量。
在controller端的flowspec进程下绑定该policy-map,在对应的地址族下配置service-policy。配置完,会触发bgp去通告具体的策略。
客户端的配置只需要配置在ios设备上,xr设备不需要配置
统计的是1,但这里显示的不一定是路由,这里就是策略信息。想看动作的话,需要追加关键字detail
限速到0,就相当于drop了
如果flowspec有问题,可以使用show flowspec client进行debug
bgp只要开发相应的nlri,就可以通告任何信息,不止传递路由信息。evpn通告的是mac和ip的信息
Sp lab举例
因为不知道是tcp还是udp,需要同时匹配udp和tcp
动作:针对不同地址族,匹配流量时的不同动作
前提是需要先建立bgp flowspec 的nei关系
controller端配置
匹配所有rule,就采用的match-all
在flowspec下进入到vrf,在针对地址族调用policy-应用到ipv4 vpn。通过flowspec的nlri传递给client端
针对不同地址族的bgp nei,配flowspec
客户端配置
xr做客户端只需要配置bgp peer就可以了,不需要配置local-install interface-all。因xr是硬件独立的,不需要将策略下发到硬件上(check,xr是会自动应用?比如写表?)