HCNP Routing&Switching之BGP邻居建立条件优化和认证
Posted 1874
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HCNP Routing&Switching之BGP邻居建立条件优化和认证相关的知识,希望对你有一定的参考价值。
前文我们了解了BGP相关概念、AS相关概念以及BGP邻居类型、基础配置等,相关回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15370838.html;今天我们来聊一聊BGP建立邻居的条件和优化相关话题;
BGP建立邻居条件
我们知道动态路由协议能够学习到路由,最基础的就是建立邻居;对于BGP来说,它工作在七层应用层,TCP179端口,所以两个路由器要想建立BGP邻居,首先满足对应两端的网络可达;即邻居地址可达;
其次,我们配置的邻居地址所在AS号必须是邻居配置中声明的AS号;即本端配置邻居AS号一定是对端邻居所在AS号;
最后,也是BGP建立邻居中最重要的一点,数据包源ip必须等于对方配置的邻居ip,这个源IP也叫更新源,也将作为路由的下一条IP;即配置邻居的ip地址,必须是邻居发送三次握手的源ip地址;
提示:如上图所示,本端配置邻居ip地址10.1.1.2,首先本端会根据路由表查找去往10.1.1.2所在网络的路由,这也是配置邻居指定的ip地址,必须可达的原因;在路由表查找到对应路由的出接口后,对应路由器就会封装报文,把出接口的ip地址封装成对应数据包的源ip,把配置邻居ip地址作为目标ip进行封装,然后再从对应接口发送出去;在对端收到本端发送到TCP三次握手,只有三次握手成功以后,后续才会发送open包,keepalived包,这样邻居才能正常建立;
BGP使用回环口建立邻居
提示:如上图所示,R3想要本端的3.3.3.3和R1的1.1.1.1建立邻居,首先R3和R1之间3.3.3.3和1.1.1.1的路由要通,在路由通畅的情况下,R3会根据配置,将对应发送tcp三次握手的源ip更改为对应3.3.3.3接口,即更改更新源;然后封装报文从对应物理接口发送出去;在对端收到对应报文以后,首先检查该报文的源ip是不是本地配置的邻居ip地址,如果不是,对应三次握手的报文会被R1拒绝;如果是,那么对应三次握手就会进行下去;只有建立起TCP三次握手以后,对应才会发送BGP open包,对应open包中会封装ASN(as号码),这个号码就是指本端所在AS,即也是对端配置邻居所在AS号;
实验:如下拓扑,配置bgp使用回环口建立邻居
分析:根据BGP邻居建立条件,再结合上图,R1和R2通过bgp建立ibgp类型邻居,R2和R3建立ebgp类型邻居;要想R1和R2建立起邻居,首先R1的1.1.1.1的路由和R2的2.2.2.2的路由首先要互通,我们可以通过内部跑一个IGP路由协议(因为R1和R2在同一个AS内,可以使用IGP路由协议,互相学习对方的路由),让R1和R2的路由互通;对于R2和R3,他们各属于不同AS,通常情况下R2和R3要想建立邻居,首先也是R2要有去往3.3.3.3的路由,R3也有去往2.2.2.2的路由,因为他们不属于同一AS,所以不能跑IGP路由协议来学习路由;此时我们只能手动配置静态路由,让R2的2.2.2.2和R3的3.3.3.3互通即可;
R1的配置
sys sys R1 int g0/0/0 ip add 12.0.0.1 24 int lo 1 ip add 1.1.1.1 32 ospf 1 router-id 1.1.1.1 area 0 net 12.0.0.1 0.0.0.0 net 1.1.1.1 0.0.0.0 bgp 12 peer 2.2.2.2 as 12
R2的配置
sys sys R2 int g0/0/0 ip add 12.0.0.2 24 int g0/0/1 ip add 23.0.0.2 24 int lo 2 ip add 2.2.2.2 32 ospf 1 router-id 2.2.2.2 area 0 net 12.0.0.2 0.0.0.0 net 2.2.2.2 0.0.0.0 ip route-s 3.3.3.3 32 23.0.0.3 bgp 12 peer 1.1.1.1 as 12 peer 3.3.3.3 as 3
验证:在R1上验证ospf邻居和路由
提示:可以看到R1上ospf和R2的ospf建立起邻居,对应邻居关系为full状态,并且在ip路由表中也学习到R2宣告的2.2.2.2的路由,说明R1有去往2.2.2.2的路由;
验证:在R2上查看ospf邻居和ospf路由
提示:可以看到R2和R1也建立起ospf邻居,对应邻居状态为full,R2也能正常学习到R1的1.1.1.1的路由,说明R1和R2上跑的ospf配置正常;
验证:查看R1或R2上bgp邻居是否正常建立?
提示:可以看到R1上bgp邻居2.2.2.2状态是active,并非established,说明邻居关系没有建立起来;
在R1上抓包
提示:可以看到当R1向R2发起tcp三次握手时,R2的2.2.2.2拒绝了R1的请求;其实这是因为R1发送tcp三次握手的源ip地址不是R2配置的邻居ip地址,所以R2收到12.0.0.1发来的三次握手请求,R2查看对应邻居列表中并没有配置和12.0.0.1是邻居,所以拒绝了R1的请求;同样的道理R2向R1发起三次握手时,源地址为12.0.0.2,R1收到此类请求,查看自己的邻居列表中没有12.0.0.2,所以也拒绝了R2的请求;
BGP更改更新源
在R1上更改发送tcp三次握手的源ip地址为lo1的接口地址
提示:上述命令表示和2.2.2.2建立邻居使用回环接口1的ip地址作为源ip地址,进行tcp三次握手包封装;
验证: 在R1上抓包,看看对应源ip地址是否更改为lo1 的接口地址1.1.1.1了呢?
提示:可以看到R1此时发送tcp三次握手的源ip地址为lo1接口的ip地址,对应三次握手也正常通过;其实在一端配置更新源以后,对应bgp邻居就会正常建立;一般情况建议两边都更改更新源;
验证:查看R1或R2上bgp邻居是否正常建立?
在R2上配置更改更新源
提示:如果之前建立起邻居,配置更改更新源,会导致邻居断掉;其原因是R2此时会以新的更新源封装tcp三次握手包的源ip;如下所示
提示:可以看到R2配置上更新源以后,对应R2会以lo2接口ip地址作为源ip发送tcp三次握手包,然后再次重新建立邻居;
通过上述实验可以看到,更新源必须等于对端配置的邻居ip地址,如果两者不相同,这邻居建立不起来;使用回环口建立邻居,需要将更新源更改为对应回环接口ip地址;更改一段即可建立起bgp邻居,但通常建议两端都更改更新源;
R3的配置
sys sys R3 int g0/0/0 ip add 23.0.0.3 24 int lo 3 ip add 3.3.3.3 32 ip route-s 2.2.2.2 32 23.0.0.2 bgp 3 peer 2.2.2.2 as 12
验证:在R2、R3上查看是否有去往对端回环接口ip路由?
提示:可以看到R2上有去往3.3.3.3的路由,R3上也有去往2.2.2.2的路由;
在R2上更改更新源
在R3上更改更新源
验证:在R2上或R3上查看bgp邻居是否正常建立?
提示:在R3上查看bgp邻居,对应和2.2.2.2邻居关系为idle,为什么不是established呢?
在R2上查看bgp邻居
提示:在R2上查看对应邻居关系也是idle;
在R2或R3上抓包
提示:在R2的g0/0/1口可以抓到对应源ip为2.2.2.2向3.3.3.3发起三次握手请求,对应三次握手也是通过了,对应3.3.3.3、2.2.2.2也发送了open包,心跳包为什么邻居关系建立不起来呢?对比之前我们抓到的正常邻居关系包里,我们可以看到在心跳包后面多了notification包,然后后续就tcp4次挥手,断掉了;
提示:从上面的抓包内容中可以看到,不管是R2还是R3在发送的心跳包,open包,对应ttl值为1;之所以R2和R3建立起邻居以后,马上就断了,其原因就是因为R2发送到包ttl为1;我们知道TTL的值是每经过一次路由以后,对应值减1;在R2的g0/0/1收到R3发送到TTL值为1 的报文,对应报文经过R2路由以后,对应R2的回环口收到此包的TTL就变为0;对于TTL为0的报文,路由器会认为该包无效,所以邻居马上断掉;同样的道理R2向R3发送到包也是经过R3路由以后,对应Rf3的lo3收到的包,对应TTL也为0,所以R3也会发送notification包,然后对应邻居马上断掉;
BGP多跳技术
为了解决BGP使用回环口建立ebgp类型邻居,我们可以修改对应报文的TTL值实现邻居关系的建立;
在R2上修改TTL值为2,看看对应邻居是否正常建立?
在R2上抓包验证,看看对应发送到包是否TTL值修改为2 了?
提示:可以看到此时R2发送的open包对应TTL值为我们指定的值;但是邻居还是没有建立;
提示:在R2的终端中,我们一会就会收到说对应邻居状态从established转变为idle;说明我们的邻居关系非常的不稳定;这里的原因是R3发送的包中TTL值为1,到R2的lo2接口对应TTL值变为0导致邻居关系一会建立,一会断掉;
在R3上更改TTL值为255
提示:默认命令后面不跟任何数字,默认就是将对应TTL修改为255;
验证:在R3上抓包查看,对应发送的报文TTL值是否修改为255?
提示:可以看到对应R2发送的包TTL值为2,R3发送的包TTL值为255;
验证:查看bgp邻居是否正常建立?
提示:可以看到邻居关系现在为稳定状态established;
通过上述实验可以看到不同AS之间使用非直连网络建立邻居需要修改对应报文的TTL值,原因是不同AS之间建立邻居发送包的TTL值为1,如果不是直连,对应非直连经过路由以后,对应报文的TTL值会减为0,对端收到TTL值为0的包,会认为该包无效,所以会导致邻居关系建立不起来;如果一段修改了TTL值,另一端未修改,那么会导致邻居关系非常不稳定,一会建立,一会断开;通常情况下我们建议ibgp类型邻居使用回环口建立邻居,ebgp使用物理口建立邻居;用回环口建立邻居有一个好处就是对应回环口只要ip地址不变,它几乎都是up的,也就是说在同一as内,推荐使用回环口建立邻居,因为回环口非常稳定;
BGP身份认证
在R1上配置认证
提示:BGP配置认证以后,对应发送的所有包都会启用,即bgp认证是在TCP上做的,并非在专有BGP报文上;
在R1上抓包
提示:可以看到R1发送的包对应tcp上会有可选项,对应R2发送的包里没有可选项;我们在R1上配置上认证以后,对应邻居不会马上断掉,它会经过3个keepalived包周期,对应邻居才会断掉;
在R2上配置bgp认证
验证邻居关系
提示:可以看到在R2上配置好认证以后,对应bgp邻居就恢复正常;
HCNP Routing&Switching之OSPF特殊区域
前文我们了解了OSPF LSA更新规则以及路由汇总相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15231880.html;今天我们来聊一聊OSPF的特殊区域相关话题;
OSPF的特殊区域,主要目的是屏蔽相关LSA,从而到达精简LSDB数据库和路由条目的目的;它和路由汇总都是优化技术,但和路由汇总又有差别,路由汇总是将多个子网合并成一个子网,但本质上该有的3类、4类、5类LSA也会有;对于ospf特殊区域来讲,它主要是屏蔽3、4、5类LSA,通过一条缺省路由来实现和区域间或外部网络通信;
如上图所示,全网分为4个部分,分别是区域1,区域0,区域2和外部网络;对于ospf各区域来说,主要分传输区域和末端区域;所谓传输区域就是骨干区域,它除了承载本区域发起的流量和访问本域的流量外,还承载了源ip和目标IP不属于本区域的流量;末端区域是指,只承担本区域发起的流量和访问本区域的流量;对于末端区域来说,它去访问外部网络或者访问非本区域的其他区域网络,它的流量都会经过abr;即访问外部网络和区域间的网络流量路径只有一条;此时我们应该考虑末端区域是否有保存达到其他区域明细路由的必要性,同时考虑末端区域设备性能;即如何精简LSDB数据库、路由表条目,从而实现提高路由器性能;我们知道ospf的路由,是通过收集网络中大量的LSA计算出来的;大量的LSA会占用LSDB存储空间;所以为了优化,在不影响正常路由的情况下减少LSA数量,从而减少LSDB存储空间,提高路由器的性能;
Stub区域
提示:Stub区域的ABR不向stub区域内传播它接受到的外部路由,即屏蔽4类、5类LSA,stub区域中路由器的LSDB、路由表规模都会大大减小;为了保证stub区域能够和外部网络通信,stub区域的abr将生成一条缺省路由(对应3类LSA),并发布给stub区域中的其他路由;此时stub区域中的路由器到达外部网络或非本区域其他区域网络,都会通过这条默认的缺省路由,进行数据的转发;stub区域是一种可选的配置属性,但并不建议将每个区域都配置成stub区域;通常情况stub区域位于自制系统的末梢,是那些只有一个abr的非骨干区域;
配置stub区域需注意事项
1、骨干区域不能配置为stub区域;
2、如果要将一个区域配置成stub区域,则该区域中的所有路由器必须都要配置成stub路由;
3、stub区域不能存在ASBR,因为外部路由在stub区域不能传播(stub屏蔽了4类和5类LSA);
4、stub区域不能配置虚连接;即虚连接不能在stub区域建立;
实验:如下拓扑,配置ospf
R1的配置
sys sys R1 int g0/0/0 ip add 12.0.0.1 24 ospf 1 router-id 1.1.1.1 area 1 net 12.0.0.1 0.0.0.0
R2的配置
sys sys R2 int g0/0/0 ip add 12.0.0.2 24 int g0/0/1 ip add 23.0.0.2 24 ospf 1 router-id 2.2.2.2 area 0 net 23.0.0.2 0.0.0.0 area 1 net 12.0.0.2 0.0.0.0
R3的配置
sys sys R3 int g0/0/0 ip add 23.0.0.3 24 int g0/0/1 ip add 34.0.0.3 24 ospf 1 router-id 3.3.3.3 area 0 net 23.0.0.3 0.0.0.0 area 2 net 34.0.0.3 0.0.0.0
R4的配置
sys sys R4 int g0/0/0 ip add 34.0.0.4 24 int lo 1 ip add 1.1.1.1 32 int lo 2 ip add 2.2.2.2 32 int lo 3 ip add 3.3.3.3 32 int lo 4 ip add 4.4.4.4 32 ospf 1 router-id 4.4.4.4 area 2 net 34.0.0.4 0.0.0.0 q import-route dir
在未配置stub区域,查看R1ospf lsdb和路由表
提示:在未配置stub区域时,对应区域中路由器的ospf lsdb数据库和路由表条目较多;
在R1的ospf 区域1中配置stub区域
提示:可以看到我们在R1的区域1上配置stub区域以后,对应邻居就down掉了;这其实是因为R1和R2发送的hello包中的options字段信息不一致导致的;
在R2的ospf区域1中配置stub区域
提示:可以看到在R2上ospf 区域1上配置stub区域以后,对应ospf邻居就建立起来;因为R1和R2在同一个区域中都配置了stub区域,所以hello包里的options字段信息一致,所以邻居就建立起来了;
验证:在R1上查看ospf lsdb数据库和路由表,看看有什么变化?
提示:可以看到在R1上对应ospf lsdb中原有的4类、5类LSA没有了,对应多了一条三类缺省LSA;路由表中原来外部网络的明细路由也随之被删除,多了一条缺省路由;
总结:stub区域屏蔽4类和5类LSA,区域内不能有ASBR,不能是区域0,不能有虚连接;stub区域中ABR路由器回向该区域发送一条3类缺省路由;
Totally Stub区域
提示:Totally stub区域除了不能传播4类、5类LSA之外,它还不允许3类LSA在本区域内传播(除abr产生的默认三类LSA路由);即完全末梢区域屏蔽了3类(除ABR产生的默认三类LSA路由)、4类、5类LSA;完全末梢区域内的路由器通过abr产生的默认三类LSA路由,和非本区域、外部网络进行通信;
实验:配置上述拓扑,区域1为完全末梢区域(Totally Stub)
在R2(abr)上更改stub为totally stub
提示:配置完全末梢区域,只需要在abr上配置为stub no-summary,其他路由器上配置stub即可;
验证:在R1上查看ospf lsdb和路由表,看看有什么变化?
提示:可以看到R1的ospf lsdb中除了一条三类默认路由LSA外,其余明细的三类LSA也没了;对应路由表中区域间的路由也没有了;
总结:完全末梢区域,屏蔽了3类(除abr产生的默认路由的三类LSA)、4类、5类LSA,该区域内的路由器访问外部网络和区域间网络,通过默认路由实现;它和stub区域的区域区别是stub没有屏蔽三类LSA,而totally stub屏蔽了三类LSA;
虽然stub、totally stub解决了末端区域维护过大LSDB带来的问题,但对于某些特定场景,stub 、totally stub并不是最佳解决方案;
stub区域、totally stub区域存在的问题
提示:如上拓扑,对于RTD来说,因为区域1配置了stub或totally stub,导致区域1里无法传播4类和5类LSA;这意味着RTD无法引入外部路由;此时只能由RTA引入外部路由;这样一来RTD访问外部网络就走默认路由,RTD-->RTB-->RTA--外部网络;很明显这是一条次优路径;对于这种既需要引入外部路由有要避免外部路由带来的资源消耗的场景,stub/totally stub区域就不能满足需求了;
NSSA区域和Totally NSSA区域
提示:NSSA/Totally NSSA区域有stub/totally stub区域的所有特性,它既能屏蔽3类、4类、5类LSA;同时也能引入外部路由,允许存在ASBR;我们知道外部路由引入就会产生5类LSA,但NSSA/totally NSSA区域规定不允许存在5类LSA;为了能够引入外部路由的同时屏蔽4、5类LSA;在NSSA/totally NSSA区域对应外部路由就不再由5类LSA进行传播,而是把原有的5类LSA用7类LSA的格式进行发送;7类LSA是为了支持NSSA区域而新增的一种LSA类型,主要用于描述NSSA区域引入外部路由信息;我们可以理解为它和原有5类LSA作用一样,专用于NSSA区域的引入外部路由;7类LSA有NSSA区域的ASBR产生,其传播范围仅限于ASBR所在的NSSA区域;缺省路由也通过7类LSA来产生,用于指导流量流向其他区域;NSSA区域的ABR收到7类LSA是,会有选择地将其转换为5类LSA,这样做的主要目的是为了让外部其他路由器能够通过OSPF学习到NSSA区域导入的外部路由;对应5类LSA在向其他区域传播时,和NSSA区域ABR所在区域的ABR同时会生成4类LSA,目的是找到NSSA区域的abr(此时对于RTC来说,它会把RTB当作ASBR,因为RTB发送5类LSA);
实验:配置上述实验拓扑区域1为NSSA区域
在R1上创建lo1接口,其ip地址为5.5.5.5 32来模拟外部网络
在R1上删除原有stub配置
在R2上删除原有stub配置
在R1上ospf区域1配置NSSA区域
在R2上ospf区域1里配置NSSA区域
在R1上引入直连路由
验证:查看R1的ospf lsdb数据库和路由表
提示:可以看到R1的ospf lsdb中多了三条7类的LSA,有前两条7类LSA是导入直连路由时产生的,最后一条是abr(R2)产生的默认路由,其目的是告诉NSSA区域其他路由器和外部网络通信默认流量走向;
验证:在区域2里查看对应路由器是否学习到5.5.5.5的路由?
提示:对于区域2里的R4来说,它学习到的5.5.5.5路由是外部路由,其宣告者是R2;这意味着R2发送的是5类LSA;
总结:NSSA区域屏蔽了4类、5类LSA,同时允许有ASBR,允许引入外部路由(打破了末梢区域的规则),因此为了传递外部路由,该区域使用7类LSA代替5类LSA,到其他正常区域再转换成5类LSA;配置NSSA区域ABR会产生一条7类缺省路由,其目的是告诉NSSA区域的路由器去往其他外部网络的默认路由;
Totally NSSA区域配置
提示:配置完全NSSA区域和配置完全stub区域一样,都是在abr上追加no-summary参数;
验证:查看R1的ospf LSDB,看看有什么不同?
提示:可以看到在NSSA的abr上追加no-summary参数以后,对应NSSA区域的路由器ospf lsdb数据库中三类LSA也被屏蔽掉了(除abr产生的一条三类LSA默认路由);
总结:Totally NSSA区域不允许三、四、五类LSA在本区域泛洪;配置完全NSSA区域后,对应abr会自动产生一条三类默认路由;完全NSSA区域和NSSA区域的区别在于,NSSA区域不屏蔽三类LSA,完全NSSA区域屏蔽三类LSA;
以上是关于HCNP Routing&Switching之BGP邻居建立条件优化和认证的主要内容,如果未能解决你的问题,请参考以下文章
HCNP Routing&Switching之OSPF LSA更新规则和路由汇总
HCNP Routing&Switching之IS-IS路由聚合和认证