【路由器】路由器系统类异常,即CPU利用率高,导致设备CLI响应慢、ping设备丢包或延迟大、协议振荡、设备转发异常
【路由器】路由器系统类异常,即CPU利用率高,导致设备CLI响应慢、ping设备丢包或延迟大、协议振荡、设备转发异常
1、故障现象
1) show cpu是日常维护中最常用的查看设备状态的一个命令,show cpu高(超过30%)就要引起注意。
2) 当发现 设备CLI响应慢、ping设备丢包或延迟大、协议振荡、设备转发异常等现象时,首先需要通过show cpu命令确认设备状态。
例如:
Ruijie>show cpu
=======================================
CPU Using Rate Information
CPU utilization in five seconds: 89%
CPU utilization in one minute : 42%
CPU utilization in five minutes: 50%
NO 5Sec 1Min 5Min Process
0 0.01% 0.01% 0.01% LISR INT
1 0.00% 0.00% 0.00% HISR INT
...........
2、故障可能原因
1) show run/debug 等操作,会打印大量信息,短时间内CPU会飙高
2) 快转(IP REF)功能没打开,导致设备运行在进程模式,完全依赖CPU转发
3) 路由协议/STP协议/VRRP/BFD等邻居协议频繁震荡,协议重新计算消耗CPU资源
4) 网络攻击
5) 某进程在执行过程中耗费较多CPU资源无法释放。(例如SNMP读取设备相关MIB,设备打印大量Syslog,telnet进程挂死)
3.故障处理流程
4.处理故障
4.1 检查CPU进程信息,查看是否存在特殊进程占用导致CPU利用率增高。
方法:
执行命令show cpu, 连续3次获取CPU利用率信息(间隔5S执行一次)。
Ruijie#sho cpu
=======================================
CPU Using Rate Information
CPU utilization in five seconds: 0%
CPU utilization in one minute : 0%
CPU utilization in five minutes: 0%
NO 5Sec 1Min 5Min Process
0 0% 0% 0% LISR INT
1 0% 0% 0% HISR INT
2 0% 0% 0% ktimer
3 0% 0% 0% atimer
4 0% 0% 0% printk_task
5 0% 0% 0% waitqueue_process
6 0% 0% 0% tasklet_task
7 0% 0% 0% kevents
8 0% 0% 0% __ef_event_grp_TASK
9 0% 0% 0% snmpd
10 0% 0% 0% snmp_trapd
......(中间省略)
96 0% 0% 0% rl_con
97 100% 100% 100% idle
下面则是具体的CPU利用率分布情况。其中,每一列的含义如下:
- No:序号
- 5Sec:每一行表示的任务最近5秒钟内的CPU利用率
- 1Min:每一行表示的任务最近1分钟内的CPU利用率
- 5Min:每一行表示的任务最近5分钟内的CPU利用率
- Process:任务名称
在显示的任务信息中,需要关注的是一分钟和5分钟的CPU利用率,5秒钟的CPU利用率可能由于瞬间CPU处理报文过多导致升高,以此数据判断问题不太准确。
在CPU进程中,其中有个idle任务比较特殊,是CPU的空闲任务,越高表明CPU越空闲。其他任务如果比率太高,说明该任务运行可能不正常。
检查标准:
- 检查输出结果中是否存在5Sec内CPU利用率较高的进程,且在连续3次的收集过程中均发现此进程利用率较高。(某进程CPU利用率达到15%及以上时,通常可定义为较高)
解决方法:
由于CPU进程在执行过程中耗费大量CPU资源且无法释放,将导致CPU利用率增高。查找到CPU高的进程,参考对应进程的处理办法执行,常见的CPU高进程有:
- LISR/HISR
- tnet/tnet6
- ktimer
- printk_task
- rl_con
- vty_connect
- nsmd/ripd/ospfd/bgpd
- snmpd
router#show cpu
=======================================
CPU Using Rate Information
CPU utilization in five seconds: 60%
CPU utilization in one minute : 73%
CPU utilization in five minutes: 63%
NO 5Sec 1Min 5Min Process
0 15% 17% 15% LISR INT
1 0% 1% 1% HISR INT
进程解释:
HISR:高级中断服务程序;
LISR:中断处理程序;
处理步骤:
中断程序用于任务间的中断交替处理,具体作用不必深究。HISR/LISR与后面的进程不同,HISR/LISR服务于所有程序中断,因此这里表示所有LISR的CPU利用率和所有HISR的CPU利用率。
LISR/HISR 占用CPU利用率高,说明系统中断频繁,任务调度处在繁忙状态,但这不能直接说明问题,需要结合其他进程来看。
最常见情况,tnet/tnel6 CPU利用率高时,LISR CPU利用率也高。可以参考”tnet/tnet6进程排查“。
router#show cpu
=======================================
CPU Using Rate Information
CPU utilization in five seconds: 54%
CPU utilization in one minute : 57%
CPU utilization in five minutes: 56%
NO 5Sec 1Min 5Min Process
0 14% 15% 15% LISR INT
1 1% 1% 1% HISR INT
2 0% 0% 0% ktimer
3 0% 0% 0% atimer
.......
25 0% 0% 0% tnet6
26 39% 41% 40% tnet
进程解释:
tnet:IPv4进程转发进程,有别于锐捷快速转发(IP REF)。
tnet6:即IPv6进程转发进程,和tnet类似,只是用于处理IPv6报文。
进程转发与快速转发的区别:
- 锐捷快速转发是一系列促进报文快速转发提升设备性能的机制集合,比如流机制、多线程、V-CPU等等。而进程转发是传统的、单纯靠CPU按照既定逻辑处理报文的机制,其大量消耗CPU资源,转发性能低下。
- 接口通过命令ip ref启用快速转发机制,没有启用快转的,设备就工作在进程转发模式。
- 接口启用快速转发功能(IP REF)后,还是有部分工作需要由进程转发完成:
1) 所有送往设备本身,或从设备发起的数据流,比如:ftp,telnet,snmp,arp,icmp (对于穿越设备的数据走快转)
2) 目的地址不可达的报文:目的地址不可达,那么快转层面会把报文交给进程处理,发送ICMP不可达等消息,也消耗CPU
3) 分片报文重组:设备对于分片报文,需要重组后再转发,重组需要送CPU处理
处理步骤:
1、 确认是否所有在使用的三层接口都开启快速转发功能(IP REF)。
判断接口是否开启快转,由于未开启快转所有报文需要上送设备CPU处理,导致CPU利用率升高。可以通过设备所有接口ip ref,等待一段时间后确认CPU利用率是否下降。该点可进一步结合tnet/tnet6线程判断。如果未开启快转,在实际环境中如果报文流量很大,那么tnet/tnet6的线程CPU利用率肯定高。
接口没有开启快转(IP REF)是最常见的CPU高现象。所有设备必须开启快转功能!
哪些设备需要配置REF:
RSR10、RSR20、RSR30、NPE50、RSR50、RSR50E系列路由器。
哪些设备不需要配置REF:
RSR10-02E、RSR20-14E/F、RSR77系列及后续将推出的新产品在所有三层接口下已默认启用ip ref功能,无需手动配置
如何开启REF:
1:在项目测试与工程实施时,确保在路由器所有三层接口下已经配置了ip ref功能。
2:在网络巡检时,关注路由器三层接口的ref的配置情况;若末正确配置ref功能,需及时增加ip ref配置。
注意:配置ip ref时有可能导致业务的瞬间中断,请在非业务高峰期进行配置。
3:路由器上需要配置ip ref功能的接口如下:
以太网接口:
interface FastEthernet
ip ref
interface GigabitEthernet
ip ref
虚接口:
interface Dialer
ip ref
interface Group-Async
ip ref
interface Multilink
ip ref
interface Tunnel
ip ref
interface Virtual-ppp
ip ref
interface Virtual-template
ip ref
interface Vlan
ip ref
广域网接口:
interface Async
ip ref
interface ATM
ip ref
interface Pos
ip ref
interface Serial
ip ref
Controller e1
ip ref
Controller sonet
ip ref
注意:老版本在某些接口下可能无法配置ip ref功能,但你不需要去记忆,只要记住配置ref的原则:在进入接口配置模式时,建议习惯性敲ip ref;只要该接口下有ip ref命令,就必须配置;
确认所有三层接口都开启快转后,如果tnet/tnet6进程CPU仍然高,那么请继续排查。
2、 判断网络中是否存在过多分片报文。
由于分片报文需要消耗CPU对报文进行重组或者丢弃,如果未布置防火墙的网络中经常会遭受分片攻击,攻击者会发送大量未能无法重组成功的分片报文耗尽CPU处理资源。可以通过show ip fpm statics中的数字判断(如下红色字体部分)。按照一般网络主机数量判断如果超过1000就必须特别注意,需要分析网络架构是否合理,网络中是否存在攻击源。
show信息举例:
1 Router#show ip fpm sta
The capacity of the flow table:2080000
Number of active flows:517222
Number of the defragment contexts:1705
Number of the buffers hold by FPM:1800
分片报文多,比较难定位,但可以通过配置本地防攻击来对CPU进行保护:
control-plane data
acpp bw-rate 300 bw-burst-rate 600
注意:这是对送CPU的数据报文进行限速,正常的送CPU报文也会被限制。因此这个值需要根据网络进行调整。(以上是一个推荐值)
3、 判断网络中是否存在对设备的流量攻击攻击。
1)通过show interface对应接口,查看接口流量。
Ruijie#sho int gi2/1/0
Index(dec):10 (hex):a
GigabitEthernet 2/1/0 is DOWN , line protocol is DOWN
Hardware is GIGABIT ETHERNET CONTROLLER GigabitEthernet, address is 001a.a93c.1429 (bia 001a.a93c.1429)
Interface address is: no ip address
ARP type: ARPA, ARP Timeout: 3600 seconds
MTU 1500 bytes, BW 1000000 Kbit
Encapsulation protocol is Ethernet-II, loopback not set
Keepalive interval is 10 sec , set
Carrier delay is 2 sec
Rxload is 1/255, Txload is 1/255
Queueing strategy: FIFO
Output queue 0/40, 0 drops;
Input queue 0/75, 0 drops
5 minutes input rate 0 bits/sec, 0 packets/sec //该接口in方向速率
5 minutes output rate 0 bits/sec, 0 packets/sec //该接口out方向速率
2)比较所有接口in方向速率总和与out方向速率总和的关系,确认是否存在攻击
以图为例,该路由器有两个内网口,一个外网口。
(所有接口in方向速率相加的总和)等于或略大于(所有接口out方向速率的总和)表示整体流量平衡,没有对设备的流量攻击
(所有接口in方向速率相加的总和)如果明显大于(所有接口out方向速率的总和),标明有很大的流量被设备吞了,这部分数据就很可能是对设备的攻击。需要根据接口流量,找出攻击源。
4、判断是否存在过多的到达本机的协议报文,
到达本机的报文主要是telnet/icmp/路由不可达报文需送CPU丢弃处理/arp报文。
1)防攻击 ACL配置
现在的网络中存在大量的攻击,外网的TCP 半开放连接攻击,碎片攻击,还有一些迅雷,P2P 的流量虽然内网已经断开了连接,但是外网还是会发大量的数据包过来,占用大量的带宽和浪费路由器的资源。所以在用 NPE 路由器做出口的时候必须要加上防攻击的ACL。放通需要放通的,再 deny所有外网始发的数据,内网到设备的数据。
(1)针对外网口的 ACL
配置阻止所有外网主动访问内网和路由器的流量,放通从外网访问内网服务器的流量.
ip access-list extended 101 绑定在外网口的 ACL
10 permit tcp any any eq telnet 开放从外网来的 telnet 数据
20 permit icmp any any 开放 ping
30 permit ip any host 60.12.27.181 eq 80 开放内网的相关服务器
40 permit tcp any host 61.153.10.249 eq ftp 开放内网的相关服务器
50 permit tcp any host 61.153.18.28 eq 8080 开放内网的相关服务器
60 deny ip any any 在外网口拒绝所有的流量
(2)针对内网口的 ACL
ip access-list extended 100 绑定在内网口的 ACL
10 permit tcp any host 192.168.199.1 eq telnet 放通从内网到本机的 telnet
20 permit icmp any host 192.168.199.1 放通从内网到本机的 ping
30 deny ip any host 192.168.199.1 deny 其它所有内网到本机的数据
40 permit ip any any 放通所有从内网到外网去的数据
注意:192.168.199.1是 NPE内网接口的 IP
(3)在接口下绑定ACL
ip access-group 100 in 在内网口配置
ip access-group 101 in 在外网口配置
2)配置黑洞路由
为了防止外网的扫描,内网的变换源地址攻击,造成路由循环,浪费路由器的资源,我们需要配置黑洞路由。还有一种情况就是,有时候NAT地址池的网段和出接口 IP 地址在同一个网段时,内网用户直接访问地址池的公网地址,路由发现是直连网段就会去查ARP 表,当然这是查找不到,所以此数据就一直送CPU 处理,造成路由器CPU 升高. 如果NAT地址池的地址为202.56.32.1-202.56.32.127黑洞路由如下配置
ip route 202.56.32.0 255.255.255.128 null0
3)开启半连接防护
开启半连接防护可以防止一部分 tcp syn 攻击:
ip session track-state-strictly
4)在接口下配置 no ip directed-broadcast、no ip mask-reply
可以防止一些攻击报文。
no ip mask-reply
no ip directed-broadcast
5)开启路由器的本地防攻击
如果故障出现,以上优化配置 CPU 都无法降下来,建意开启设备防攻击功能,设备防攻击模块就是对需要进入控制层面处理的数据报文进行分类,过滤,限速,从而达到保护控制层面的关键资源的目的。
我们可以通过限止送 CPU的报文,来防止 CPU资源被耗尽。一般过路数据是不需要送CPU 处理的,所以防攻击策略配置恰当一般不会影响正常业务和用户对设备的管理。
ip access-list extended 111
10 deny ip host 192.168.1.111 any //管理主机 IP
20 permit ip any any
control-plane
control-plane protocol
scpp list 111 bw-rate 500 bw-burst-rate 600
no acpp //针对所有送往本地的协议控制流。例如链路层协议的协议报文,路由协议报文等。
control-plane manage
port-filter log
arp-car 10 log
scpp list 111 bw-rate 500 bw-burst-rate 600
no acpp //针对所有送往本地的管理协议流。例如 web 管理,telnet,snmp 等,另外 arp 也属于这一类。
control-plane data
no glean-car
scpp list 111 bw-rate 300 bw-burst-rate 600 log
no acpp //针对所有快转平面无法处理的数据流都属于这一类,如分片报文,另外 icmp 的一些诊断报文也属于这一类。
5、如果无法恢复正常,请跳转到信息收集章节,收集信息,拨打4008111000寻求支持。