华为OSPF详解
OSPFv3
缩略语 |
英文全名 |
中文解释 |
OSPF |
Open Shortest Path First |
开放最短路径优先 |
OSPFv3 |
Open Shortest Path First version 3 |
开放最短路径优先版本3 |
IGP |
Interior Gateway Protocol |
内部网关协议 |
AS |
Autonomous System |
自治系统 |
ABR |
Area Border Router |
区域边界路由器 |
ASBR |
Autonomous System Border Router |
自治系统边界路由器 |
LSA |
Link Statement Advertisement |
链路状态通告 |
LSDB |
Link State Data Base |
链路状态数据库 |
DR |
Designated Router |
指定路由器 |
BDR |
Backup Designated Router |
备份指定路由器 |
DD |
Database Description |
数据库描述 |
LSR |
Link State Request |
链路状态请求 |
LSU |
Link State Update |
链路状态更新 |
LSAck |
Link State Acknowledgment |
链路状态确认 |
NBMA |
Non-Broadcast Multi-Access |
非广播多点可达网络 |
P2MP |
Point-to-MultiPoint |
点到多点 |
P2P |
Point-to-Point |
点到点 |
该表格来自新华三OSPFv3技术白皮书http://www.h3c.com/cn/d_200804/603579_30003_0.htm
本文所有试验围绕一下拓扑进行,实验设备为华为AR2200-S,版本为V200R009C00SPC500
以下是基本配置(全局使能IPv6,接口使能IPv6,配置IPv6地址):
RT1:
[RT1]ipv6
[RT1]interface g0/0/1
[RT1-GigabitEthernet0/0/1]ipv6 enable
[RT1-GigabitEthernet0/0/1]ipv6 address 2001::1/64
[RT1]interface LoopBack 1
[RT1-LoopBack1]ipv6 enable
[RT1-LoopBack1]ipv6 address 2010::1/64
[RT1]interface LoopBack 2
[RT1-LoopBack1]ipv6 enable
[RT1-LoopBack1]ipv6 address 2011::1/64
RT2:
[RT2]ipv6RT2]interface g0/0/1
[RT2-GigabitEthernet0/0/1]ipv6 enable
[RT2-GigabitEthernet0/0/1]ipv6 address 2001::2/64
[RT2]interface g0/0/2
[RT2-GigabitEthernet0/0/2]ipv6 enable
[RT2-GigabitEthernet0/0/2]ipv6 address 2002::2/64
RT3:
[RT3]ipv6[RT3]interface g0/0/2
[RT3-GigabitEthernet0/0/2]ipv6 enable
[RT3-GigabitEthernet0/0/2]ipv6 address 2002::3/64
[RT3]interface LoopBack 1
[RT3-LoopBack1]ipv6 enable
[RT3-LoopBack1]ipv6 address 2012::1/64
[RT3]interface LoopBack 2
[RT3-LoopBack1]ipv6 enable
[RT3-LoopBack1]ipv6 address 2013::1/64
以下是基本OSPFv3配置:
RT1:
[RT1]ospfv3 1
[RT1-ospfv3-1]router-id 1.1.1.1
[RT1]interface LoopBack 1
[RT1-LoopBack1]ospfv3 1 area 0
[RT1]interface LoopBack 2
[RT1-LoopBack2]ospfv3 1 area 0
[RT1-LoopBack2]in g0/0/1.
[RT1-GigabitEthernet0/0/1]ospfv3 1 area 0
RT2:
[RT2]ospfv3 1
[RT2-ospfv3-1]router-id 2.2.2.2
[RT2]interface g0/0/1
[RT2-GigabitEthernet0/0/1]ospfv3 1 area 0
[RT2]interface g0/0/2
[RT2-GigabitEthernet0/0/2]ospfv3 1 area 1
[RT2-GigabitEthernet0/0/2]quit
RT3:
[RT3]ospfv3 1
[RT3-ospfv3-1]router-id 3.3.3.3
[RT3]interface g0/0/2
[RT3-GigabitEthernet0/0/2]ospfv3 1 area 1
[RT3]interface LoopBack 1
[RT3-LoopBack1]ospfv3 1 area 1
[RT3-LoopBack1]interface LoopBack 2
[RT3-LoopBack2]ospfv3 1 area 1
以上就是OSPFv3的基本配置
接下来看一下OSPFv3的状态,先来说几道命令:
------------------------------------------------------------------------------------------------------------------------------------------
- 接着是OSPFv3接口时间周期功能配置
- 配置接口Hello interval
- 配置接口Hello包发送间隔(Hello interval)
- 配置相邻路由器失效时间(Dead interval)
- 配置邻接路由器重传LSA间隔
- 配置接口LSA传送延迟
- 配置接口轮询Hello包
1.配置接口Hello interval
[RT2]in g0/0/1
[RT2-GigabitEthernet0/0/1]ospfv3 timer hello <1-65535>s
##在默认情况下P2P,广播网,这种接口类型下,发送Hello包的间隔为10s,而P2MP,NMBA发送间隔为30s
2.配置相邻路由器失效时间(Dead interval)
[RT2]interface g0/0/1
[RT2-GigabitEthernet0/0/1]ospfv3 timer dead <1-65535>s
##需要注意的是,当你修改Hello包时间时,Dead周期会相应的变为4倍,但当你修改Dead周期时,Hello时间不会改变
3.配置邻接路由器重传LSA间隔
[RT2]interface g0/0/1
[RT2-GigabitEthernet0/0/1]ospfv3 timer retransmit <1-3600>s
##建议这个值不要设置的太小,以免造成不必要的重传,例如你的网络非常复杂,数据包需要2秒才能完成往返(LSU到对方,对方再发回LSAck),那么如果你设置成了一秒,这样就会让路由器误以为对方为接收到数据包,造成重传
4.配置接口LSA传送延迟
[RT2]interface g0/0/1
[RT2-GigabitEthernet0/0/1]ospfv3 trans-delay <1-800>s
#设置该值之后,当有LSA需要从这个接口发出时,将等待x秒再发送,x=你的设定
5.配置接口轮询Hello包
[RT2]interface g0/0/1
[RT2-GigabitEthernet0/0/1]ospfv3 timer poll <1-65535>s
##这类Hello包只有在NBMA网络中才会用到,当邻居失效时,会按照该周期发送轮询Hello包,建议轮询时间间隔至少为Hello周期的4倍
以上就是OSPFv3接口中各种时间周期的配置
------------------------------------------------------------------------------------------------------------------------------------------
配置OSPFv3的区域:
- Stub区域
- NSSA区域
- 虚链路
1.Stub区域:
[RT2]ospfv3 1
[RT2-ospfv3-1]area 1
[RT2-ospfv3-1-area-0.0.0.1]stub [ no-summary ]
[RT3]ospfv3 1
[RT3-ospfv3-1]area 1
[RT3-ospfv3-1-area-0.0.0.1]stub
##那么此时R2<--->R3的Area1,就配置成为了Stub区域,5类LSA不会被泛洪进来,但是三类依然会泛洪,那么如果你希望将Stub区域配置为一个Totally Stub区域(没有3类与5类LSA),那么就可以在stub后面加上no-summary,这样的话R3上只会有一条默认路由,如果你加上了这个参数,那么只需要在ABR上做就可以了,Stub区域中的成员路由器不需要打这条命令
以下是没有加no-summary,R3的路由表:
##可以从图中看到,R3上有3条IA的域间路由
以下是加了no-summary,R3的路由表:
##可以看到,R3上只有一条默认路由
以上就是Stub区域的配置
------------------------------------------------------------------------------------------------------------------------------------------
2. NSSA区域
##先不进行配置,先来看一下关于NSSA的各个命令(以下命令均在Area视图下执行):
nssa | 将当前区域配置为NSSA区域 |
nssa default-route-advertise |
向NSSA区域泛洪一条默认路由 |
nssa default-route-advertise cost <1-16777214> |
向NSSA区域泛洪默认路由时,将其cost修改为<cost> |
nssa default-route-advertise tag <0-4294967295> | 向NSSA区域泛洪默认路由时,将其tag值改为<tag> |
nssa default-route-advertise type <1-2> | 向NSSA区域泛洪默认路由时,将其类型修改为<type>,缺省为2类 |
nssa no-import-route | 当ABR同时也是ASBR时,这条命令可以使外部路由不向NSSA区域泛洪 |
nssa no-summary | 不会再向NSSA区域中,泛洪3类LSA |
nssa set-n-bit | 在DD报文中设置N-bit标志位 |
nssa suppress-forwarding-address | 将7类转成5类之后,设置FA地址为0.0.0.0 |
nssa translator-always | 设置转换路由器(将7类转换成5类) |
nssa translator-interval <1-120> | 设置转发路由器失效时间 |
以下是实验清单及拓扑:
- R2与R3之间启用NSSA区域
- R2向NSSA区域下发默认路由并将Cost值调为10,Tag为20,类型为1
- R2重分发直连Loopback,并将cost调整为20,tag调整为40,类型为1
- 当R2同时为ABR与ASBR时,不将外部路由引入NSSA区域
- R2不向NSSA区域引入3类LSA
- 设置DD报文N-bit位
- 指定转换路由器
- 设置指定路由器失效时间
------------------------------------------------------------------------------------------------------------------------------------------
1.R2与R3之间启用NSSA区域
[RT2]osfpv3
[RT2]ospfv3 1
[RT2-ospfv3-1]area 1
[RT2-ospfv3-1-area-0.0.0.1]nssa[RT3]osfpv3
[RT3]ospfv3 1
[RT3-ospfv3-1]area 1
[RT3-ospfv3-1-area-0.0.0.1]nssa##启NSSA区域,区域内所有路由器都要打,标志位不同,不起邻居
2.R2向NSSA区域下发默认路由并将Cost值调为10,Tag为20,类型为1
[RT2]ospfv3 1
[RT2-ospfv3-1]area 1
[RT2-ospfv3-1-area-0.0.0.1]nssa default-route-advertise cost 10 tag 20 type 1
##你只需要记住一点,nssa的参数后面还可以跟很多参数
3.R2重分发直连Loopback,并将cost调整为20,tag调整为40,类型为1
[RT2]ospfv3 1
[RT2-ospfv3-1]import-route direct cost 20 tag 40 type 1
##重分发之后R2就同时成为ABR与ASBR,这样就满足了下一个实验的条件
4. 当R2同时为ABR与ASBR时,不将外部路由引入NSSA区域
先来看一下R3的路由表,可以看到图中两条标记为N的路由条目:
那么如果你不希望R3收到这两条明细路由(因为有一条默认路由就可以实现互联),那么就可以进行如下配置:
[RT2]ospfv3 1
[RT2-ospfv3-1-area-0.0.0.1]nssa no-import-route
##这条命令,只有在路由器同时成为ABR与ASBR时,才满足条件,所以你在R3上重分发之后,在打上这条命令,是没用的,因为R3不是ABR
再看一下R3的路由表,发现明细路由没有下发:
5.R2不向NSSA区域引入3类LSA
上图就是当前的路由表,可以看到有一条IA的域间路由,那么如果你不希望NSSA区域中存在3类LSA,配置如下:
[RT3]ospfv3 1
[RT3-ospfv3-1-area-0.0.0.1]nssa no-summary
##这条命令只能在NSSA区域的ABR上面配置,在其他路由器上配置也没用
6.设置DD报文N-bit位
[RT3]ospfv3 1
[RT3-ospfv3-1-area-0.0.0.1]nssa set-n-bit
##在标准中,N-bit位必须志为0,但是有些厂商还是违背了,所以如果你的网络环境中有不同厂商的设备,需要留意N-bit志位,这条命令的目的就是与这些厂商兼容
7.指定转换路由器
完成这个实验需要4台路由器,以下是拓扑,:
基础配置(接口IP,进程,接口宣告)在这里就不说明了,直接进入OSPFv3的配置,现在R3重分发直连:
[R3]ospfv 1
[R3-ospfv3-1]import-route direct ##重分发在之后会详细说明,这里记一下就可以了
##重分发直连完成后在R2上,执行nssa translator-always
[R2]ospfv3 1
[R2-ospfv3-1]area 1
[R2-ospfv3-1-area-0.0.0.1]nssa translator-always
##执行完之后去R1上查看LSDB数据库
##可以看到最下面的两行,R3的两条直连Loopback口路由,只会从R2通告过来,正常情况是R4也会通告,随后在R1产生两条去往相同目的地的等价路由,但是这条命令就可以指定,由哪台路由器负责转换LSA,当R2--->R1链路Down时,R4会自动向Area0通告一条去往R3Loopback口的5类路由,这样可以形成弹性路由,但做不到等价路由
##这个实验需要等的时间非常长,我将上面的配置配完之后,去吃了个饭,回来才看到这些状态一开始还以为自己做错了
8.设置指定路由器失效时间
[R2]ospfv 1
[R2-ospfv3-1]area 1
[R2-ospfv3-1-area-0.0.0.1]nssa translator-interval <1-120>s
##这条命令一般和nssa translator-always一起打,单位为秒
以上就是NSSA的配置及讲解,下面是虚链路的配置
------------------------------------------------------------------------------------------------------------------------------------------
3.虚链路
以上是拓扑,R2与R3之间建立虚链路,使R4学到R1的Loopback路由,以下为配置步骤(接口IP,进程,端口宣告省略):
[R2]ospfv3 1
[R2-ospfv3-1]area 1
[R2-ospfv3-1-area-0.0.0.1]vlink-peer 3.3.3.3
[R3]ospfv3 1
[R3-ospfv3-1]area 1
[R3-ospfv3-1-area-0.0.0.1]vlink-peer 2.2.2.2
##虚链路在配置上没什么难度,你只需要知道在哪儿做就可以了
以上就是三种区域类型的配置及讲解
------------------------------------------------------------------------------------------------------------------------------------------
讲解完区域类型之后,现在再来看一下OSPFv3的路由属性配置:
- 配置OSPFv3的接口开销值
- 配置OSPFv3最大等价路由数量
1.配置OSPFv3的接口开销值
接着上一张虚链路的拓扑,在R3上查看路由表
##没有IA是因为虚链路到了Area0,传来的是域内路由,这里可以看到去往2010::/128,2011::/128的开销是2(Loopback口在OSPFv3中表现为128位),我们将它修改为5
配置如下:
[R2]interface g0/0/1
[R2-GigabitEthernet0/0/1]ospfv3 cost 4##关于接口cost值的调整,你需要知道的是,在哪调,调什么,cost值的计算是指去往目的网段路径上所有出接口cost相加,也就是说R3要去往R1的Loopback口,路径如下,R3_g0/0/1--->R2_g0/0/1--->R1_g0/0/1,所以说路径上有2条链路,所以cost就是将这两条链路的cost相加,就等于去往目的地的cost值,在带宽足够的情况下,cost都为1,所以R3去往2010::/128的cost是R2_g0/0/1的cost=1,R1_g0/0/1的cost=1,所以是1+1=2,那么现在将R2_g0/0/1调整为4,也就变成了4+1=5
2.配置OSPFv3最大等价路由数量
[R3]ospfv3 1
[R3-ospfv3-1]maximum load-balancing <1-8>
##最大为8条,按照需求来这个没什么好讲解的
以上就是路由属性的操作
------------------------------------------------------------------------------------------------------------------------------------------
控制OSPFv3的路由信息:
1.配置OSPFv3路由聚合
- 配置OSPFv3ABR路由聚合
- 配置OSPFv3ASBR路由聚合
- 配置OSPFv3对接收的路由过滤
- 配置OSPFv3对发送的路由过滤
- 配置OSPFv3引入外部路由
##路由聚合分两种,一种是ABR聚合,一种是ASBR聚合,这两种场景我将逐一演示
先来讲ABR聚合,拓扑如下:
##R3宣告两个Loopback,R2的两个Loopback口重分发进OSPFv3,将R3两个Loopback口汇总后发向Area 0
[R2-ospfv3-1]ospfv3 1
[R2-ospfv3-1]area 1
[R2-ospfv3-1-area-0.0.0.1] abr-summary 2011:1:1:: 48 [not-advertise|cost<cost>]
##这是汇总完毕后,R1的路由表,可以发现最下的一行已经有一条汇总路由了:
##这是没有经过汇总的路由表:
##先来对abr-summary 2011:1:1:: 48这条命令做讲解,最汇总时,你需要知道你在哪里做,你希望汇总的路由发向哪里,那么我们现在做的是ABR汇总,所以一定是在ABR上做,那么R2就是ABR,那么我们希望将2011:1:1:1::/64与2011:1:1:2::/64汇总,那么可以将掩码写作48位,所以汇总后的路由条目是2001:1:1::/48,那么你希望将哪个区域的路由汇总就在哪个区域做,所以这里是在Area1做
那么再说一下not-advertise参数的用法,如果你不希望R2将2011:1:1:1::/64,2011:1:1:2::/64网段通告Area 0,那么就可以通过汇总的方法,将两个网段汇总成一个网段,然后被这个网段包含的所有条目,都不会被通告Area0,以下是实例:
[R2]ospfv 1
[R2-ospfv3-1]area 1
[R2-ospfv3-1-area-0.0.0.1]abr-summary 2011:1:1:: 48 not-advertise
##这是R1的路由表,这两条明细路由已经被过滤:
最后是cost参数的用法,虽然在前文已经说过非常多次了,但这里还是说一下⑧,如果这条通告出去的汇总路由希望将他的Cost值修改为5,那么可以进行如下配置:
[R2]ospfv 1
[R2-ospfv3-1]area 1
[R2-ospfv3-1-area-0.0.0.1]abr-summary 2011:1:1:: 48 cost 4
##改为4是因为R1本身还有1点开销,算上累加,所以是4,以下是R1的路由表:
2.ASBR聚合
[R2]ospfv3 1
[R2-ospfv3-1]import-route direct ##在R2将两个Loopback接口用重分发直连的方式引入OSPFv3
##引入之后查看R1路由表:
[R2]ospfv3 1
[R2-ospfv3-1]asbr-summary 2010:1:1:: 48
##以下是汇总完毕的R1路由表:
[R2-ospfv3-1]asbr-summary 2010:1:1:: 48 [cost | distribute-delay | not-advertise | tag]
接下来将逐一针对这些参数进行讲解,Cost与Tag不说了:
[R2]ospfv3 1
[R2-ospfv3-1]asbr-summary 2010:1:1:: 48 distribute-delay <1-65535>s
##distribute-delay选项可以使你汇总的路由推迟通告
[R2]ospfv3 1
[R2-ospfv3-1]asbr-summary 2010:1:1:1:: 64 not-advertise
##你可以用这条命令来控制明细条目的引入,可以很灵活的运用,那么以下是R1的路由表:
3.配置OSPFv3对接收的路由过滤
[R1]acl ipv6 2000
[R1-acl6-basic-2000]rule 1 deny source 2010:1:1:2:: 64
[R1-acl6-basic-2000]rule 2 permit
[R1]ospfv3 1
[R1-ospfv3-1]filter-policy 2000 import
##这里的ACLv6起到的是决策的作用,并不是匹配流量,如果你的rule允许,则允许该条目进入,如果你的rule拒绝,则拒绝该条目进入,隐形拒绝所有,所以你需要在手动以上一条permit any,以放行其他所有条目
##以下是R1的路由表,D表明拒绝引入,但这只会去标志存在的条目:
4.配置OSPFv3对发送的路由过滤
##在R2上针对向Area0区域通告的R3的Loopback1做路由过滤
[R2]acl ipv6 2000[R2-acl6-basic-2000]rule 1 deny source 2010:1:1:1::/64
[R2-acl6-basic-2000]rule 2 permit
[R2]ospfv3 1
[R2-ospfv3-1]filter-policy 2000 export
##以下是R1的路由表:
##路由过滤的要点在于,你要想清楚条目流动的方向,想好在哪过滤,那个方向过滤,采用什么工具过滤
5.配置OSPFv3引入外部路由
##这里要说的是一种路由过滤与重分发结合的一种用法,R2引入本地直连路由,但过滤Loopback1
[R2]acl ipv 2000
[R2-acl6-basic-2000]rule 1 deny source 2010:1:1:1::1/64
[R2-acl6-basic-2000]rule 2 permit
[R2]ospfv3 1
[R2-ospfv3-1]import-route direct
[R2-ospfv3-1]filter-policy 2000 export direct
##以下是过滤完成后R1的路由表
##以下是为做过滤前R1的路由表
以上就是OSPFv3路由控制相关操作
------------------------------------------------------------------------------------------------------------------------------------------
OSPFv3网络调优:
- 配置SPF定时器
- 设置LSA频繁震荡时路由计算的延迟时间
- 配置接收LSA的时间间隔
- 抑制接口接收或发送OSPFv3报文
- 配置接口的DR优先级
- 配置Stub路由器
- 忽略DD报文中的MTU检查
1.配置SPF定时器
- 配置常用定时器
[R1]ospfv3 1
[R1-ospfv3-1]spf time <0-65535>s(Delay计时器)<0-65535>s(Hold计时器)
##当OSPFv3的链路发生变化时,LSDB就会相应的发生变化,这是就需要重新进行SPF计算,如果SPF计算间隔小,那么网络收敛的时间就会相应的加快,但同时也会占用更多的资源,那么如果网络频繁的发生变化,如果SPF计算间隔时间较大,会占用较少的资源,避免因为网络频繁的变动而导致带宽耗尽,但同时网络收敛速度也会相应的变慢,请酌情配置
- 配置SPF智能定时器
[R1]ospfv3 1
[R1-ospfv3-1]
spf-schedule-interval [intelligent-timer <Max interval> <Start-interval> <Hold-interval> | <delay time> <hold time>]
##智能定时器用法我也不知道=_=,在这里只能写出他的配置方法,没有应用场景
2.设置LSA频繁震荡时路由计算的延迟时间
[R1]ospfv3 1
[R1-ospfv3-1]maxage-lsa route-calculate-delay <0-65535>s
##当一个链路Down时,他会发出该条目的老化LSA,但是如果一段链路频繁的Down/Up(震荡),那么路由器会频繁的发出更新LSA与老化LSA,所以这同时浪费了带宽和路由器算力,所以我们可以通过这条命令,来延迟计算老化LSA,也就是说当一台路由器收到一个最大时间的老化LSA时,会延迟X秒再计算(从LSDB中删除),这就可以将震荡的损害降到最低,缺省情况下,老化LSA计算延迟为20s
3. 配置接收LSA的时间间隔
[R1]ospfv3 1
[R1-ospfv3-1]lsa-arrival-interval <1-10000>millisecond
##这条命令可以有效的避免路由震荡带来的麻烦,它规定了接收同一条LSA的时间间隔。缺省情况下,接收同一条LSA更新信息的时间间隔为1000毫秒(1秒)
4.抑制接口接收或发送OSPFv3报文
[R1]ospfv3 1
[R1-ospfv3-1]silent-interface g0/0/1
##配置之后,该接口不会发送OSPFv3报文,该接口不会建立OSPFv3邻居关系,但这条直连路由还是可以被Intra-Area-Prefix-LSA发布出去
5.配置接口的DR优先级
[R1]interface g0/0/1
[R1-GigabitEthernet0/0/1]ospfv3 dr-priority <0-255>
##接口优先级最好是在宣告接口前指定,因为如果你在宣告之后决定优先级,从接口发送出的Hello包中的优先级并不会改变,所以如果发生了这种情况,可以通过shutdown/undo shutdown命令重启接口,这样可以充值OSPFv3的接口状态机
6.配置Stub路由器
[R1]ospfv3 1
[R1-ospfv3-1]stub-router [ on-startup <interval> | <cr>]
##这里的Stub路由器与Stub区域中的成员路由器并没有关系,而是告知其他路由器不用改stub-router转发数据,但会拥有一条到达Stub路由器的路由,on-startup参数表示,仅在重启或故障时保持Stub路由器,保持时间由Interval决定,如果没有指定Interval,则默认时间为500秒
7.忽略DD报文中的MTU检查
[R1]ospfv 1
[R1-GigabitEthernet0/0/1]ospfv3 mtu-ignore
##如果MTU值不一样,邻居会停留在exstart阶段,所以MTU值如果不一样可以启用这个
https://blog.csdn.net/qq_40478570/article/details/89053603