RG CPU-tnet/tnet6 进程高

一、故障现象

路由器CPU tnet/tnet6进程利用率高

二、组网拓扑

三、可能原因

1、设备接口没有开启REF;
2、设备收到大量异常报文或设备受到攻击 ;

四、排查步骤

步骤一:通过命令show cpu查看哪些进程cpu利用率高

Ruijie#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
.......
25 0% 0% 0% tnet6
26 39% 41% 40% tnet
进程解释:
tnet:IPv4进程转发进程,有别于锐捷快速转发(IP REF)。
tnet6:即IPv6进程转发进程,和tnet类似,只是用于处理IPv6报文。
进程转发与快速转发的区别:
1、锐捷快速转发是一系列促进报文快速转发提升设备性能的机制集合,比如流机制、多线程、V-CPU等等。而进程转发是传统的、单纯靠CPU按照既定逻辑处理报文的机制,其大量消耗CPU资源,转发性能低下。
2、接口通过命令ip ref启用快速转发机制,没有启用快转的,设备就工作在进程转发模式。
3、接口启用快速转发功能(IP REF)后,还是有部分工作需要由进程转发完成:
1)所有送往设备本身,或从设备发起的数据流,比如:ftp,telnet,snmp,arp,icmp (对于穿越设备的数据走快转)
2)目的地址不可达的报文:目的地址不可达,那么快转层面会把报文交给进程处理,发送ICMP不可达等消息,也消耗CPU
3)分片报文重组:设备对于分片报文,需要重组后再转发,重组需要送CPU处理

步骤二:确认是否所有在使用的三层接口都开启快速转发功能(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、RSR10-X、RSR20-X、RSR30-X、RSR50-X、RSR77、RSR77-X系列及后续将推出的新产品在所有三层接口下已默认启用ip ref功能,无需手动配置
如何开启REF
interface GigabitEthernet x/x //根据实际使用的接口进入对应接口
ip ref //开启ref
确认所有三层接口都开启快转后,如果tnet/tnet6进程CPU仍然高,那么请继续排查
注意:配置ip ref时有可能导致业务的瞬间中断,请在非业务高峰期进行配置。老版本在某些接口下可能无法配置ip ref功能,目前新设备默认也开启了ref、也可能无法配置ip ref 功能,只要记住配置ref的原则:在进入接口配置模式时,建议习惯性敲ip ref;只要该接口下有ip ref命令,就必须配置;

步骤三:判断网络中是否存在对设备的流量攻击攻击

1、通过2次show interface(间隔建议在2~5s左右),查看两次show间隔时的所有接口流量。
Ruijie#show interfaces gigabitEthernet 0/0
Index(dec):5 (hex):5
GigabitEthernet 0/0 is UP , line protocol is UP
Hardware is OCTEN GE CONTROLLER GigabitEthernet, address is 5869.6ce2.d751 (bia 5869.6ce2.d751)
Interface address is: 1.1.1.254/24
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
media-type is twisted-pair.
5 minutes input rate 7389 bits/sec, 10 packets/sec
5 minutes output rate 3575 bits/sec, 5 packets/sec
851825 packets input, 67326127 bytes, 0 no buffer, 0 dropped //该接口in方向的总报文字节数
Received 95930 broadcasts, 0 runts, 0 giants
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 abort
400255 packets output, 32464224 bytes, 0 underruns , 0 dropped //该接口out方向的总报文字节数
0 output errors, 0 collisions, 0 interface resets
2)对两次show interface的参数相减得出在两次show interface间隔内各个接口的input和output的字节数
3)比较前后两次show的所有接口in方向字节数与out方向字节的关系,确认是否存在攻击,方法如下:
以图为例,该路由器有两个内网口,一个外网口。
通过两次show interface得出不同接口下在这个间隔时间内接口的报文收发数字,假设:
Gi0/0:input方向字节数是IN0,output方向字节数是OUT0;
Gi0/1:input方向字节数是IN1,output方向字节数是OUT1;
Gi0/2:input方向字节数是IN2,output方向字节数是OUT2;
那么如果:
①IN0与(OUT1+OUT2)的值相差不大 并且OUT0与(IN1+IN2)也相差不大,那么说明设备没有攻击,即:内网进设备和设备出外网的流量一致,外网进设备和设备进内网的流量一致,说明数据都是转发数据,发给路由器处理的报文很少。
②IN0>(OUT1+OUT2),说明外网一直发报文给设备处理,外网存在攻击;
OUT0>(IN1+IN2),说明设备一直发报文给外网,外网存在攻击,路由器在回应报文。
③OUT0<(IN1+IN2),说明内网一直发报文给设备处理,内网存在攻击;
IN0<(OUT1+OUT2),说明设备一直给内网终端,内网存在攻击,路由器在回应报文。
判断标准:正常情况路由器都是转发报文,即同一个数据走向(上传或下载)进设备多少就出设备多少,

步骤四:判断是否存在过多的到达本机的协议报文

1、通过show ef-rnfp all命令来查看是否受到攻击,间隔10s进程查看drop是否有增加,如果设备没有配置,按照如下方式配置后进行查看
CPU资源保护配置:
方法一:推荐对所有上送主管理板CPU的报文做限速处理(下列配置命令参数为最佳推荐值,可根据实际情况调整)
注:功能调整可能会导致设备数据传输震荡引发断网,因此该操作建议在非业务高峰期或可允许短暂断网的情况下实施
Ruijie(config)#control-plane protocol
Ruijie(config-cp)#acpp bw-rate 8000 bw-burst-rate 8000 --->针对所有送往本地的协议报文限速8000pps(包每秒),突发8000pps。该类报文包括链路层协议的协议报文,路由协议报文等。
Ruijie(config-cp)#control-plane manage
Ruijie(config-cp)#acpp bw-rate 100 bw-burst-rate 200 --->针对所有送往本地的管理协议报文限速100pps(包每秒),突发200pps。该类报文包括WEB管理,TELNET,SNMP等,另外ARP也属于这一类
Ruijie(config-cp)#control-plane data
Ruijie(config-cp)#acpp bw-rate 300 bw-burst-rate 600 --->针对所有快转平面无法处理的数据报文限速300pps(包每秒),突发600pps。该类报文包括分片报文,另外ICMP的一些诊断报文也属于这一类。
Ruijie(config-cp)#end
Ruijie#write --->保存配置
方法二:自定义,针对特定协议结合ACL的配置 (参数根据实际情况制定,没有推荐值)
(建议直接使用方法一,如果有特殊情况可以进行自定义配置,比如有100路以上的OSPF邻居,有大量的DLDP或者BFD链路(100路以上),或者web认证场景)
Ruijie(config)#ip access-list extended 111 --->配置ACL,定义要配置ACPP的数据流
Ruijie(config-ext-nacl)#10 deny ip host 192.168.1.111 ---> 排除管理IP,不对该地址上送的报文做限速
Ruijie(config-ext-nacl)#20 deny ospf any any --->在开启OSPF的情况下排除过滤OSPF协议报文
Ruijie(config-ext-nacl)#30 permit ip any any --->匹配所有协议
Ruijie(config)#control-plane protocol
Ruijie(config-cp)#scpp list 111 bw-rate 500 bw-burst-rate 600--->针对ACL 111匹配到的送往本地的管理协议报文限速500pps(包每秒),突发600pps
Ruijie(config-cp)#no acpp --->关闭ACPP
Ruijie(config-cp)#control-plane manage
Ruijie(config-cp)#scpp list 111 bw-rate 100 bw-burst-rate 200
Ruijie(config-cp)#no acpp
Ruijie(config-cp)#control-plane data
Ruijie(config-cp)#scpp list 111 bw-rate 500 bw-burst-rate 600
Ruijie(config-cp)#no acpp
Ruijie(config-cp)#end
Ruijie#write --->保存配置
参数说明
·SCPP( Segregate Control Plane Protection)
分类控制平面保护。根据用户定制的策略,针对三个子接口内的流量,进行更细粒度的限速和保护。
·Glean-CAR
针对快转平面匹配到 REF Glean 邻接的流量(匹配到直连路由,但没有找到匹配目的 IP 的主机路由,需要上送控制平面来进行目的 ip 的解析)进行限速。
·ARP-CAR
因为快转平面无法完成 ARP 报文的处理,需要上到控制平面来处理; ARP-CAR可以限制每个邻居的 ARP 报文速率。
·Port-Filter
针对到本地的 TCP 和 UDP 报文,检查本地应用是否打开了对应的端口,在进入控制平面前就过滤掉发送到本地而本地又未启用的网络服务的流量。
·MPP( Management Plane Protection)
管理平面保护。允许管理员指定一个或多个接口为带内管理接口(既允许接收管理报文,又能转发正常业务的接口)。启用了 MPP 功能以后,只有指定的带内管理接口才允许接收指定协议的管理报文。但业务报文,协议报文,以及 ARP 等报文不受影响。
·ACPP( Aggregate Control Plane Protection)
集中控制平面保护,针对 classify 的分类结果,应用缺省的或用户定制的速率来分别对 protocol sub-interface, manage sub-interface 和 datasub-interface 上的流量进行限速,确保其流量不会超出控制平面的处理能力,从而保护控制平面。
Ruijie#show ef-rnfp all
Aggregate control plane protection information:
Data subinterface: enable --->确定管理子接口是enable
RULE:
bandwidth rate limit: 4000(pps), burst: 8000(pps)
STATISTIC:
dropped 44065 packets --->丢弃44065个报文
Manage subinterface: enable --->确定管理子接口是enable
RULE:
bandwidth rate limit: 300(pps), burst: 600(pps)
STATISTIC:
dropped 4 packets
Protocol subinterface: enable
RULE:
bandwidth rate limit: 300(pps), burst: 600(pps)
STATISTIC:
dropped 181 packets --->丢弃181个报文
2、配置黑洞路由
为了防止外网的扫描,内网的变换源地址攻击,造成路由循环,浪费路由器的资源,我们需要配置黑洞路由。还有一种情况就是,有时候NAT地址池的网段和出接口 IP 地址在同一个网段时,内网用户直接访问地址池的公网地址,路由发现是直连网段就会去查ARP 表,当然这是查找不到,所以此数据就一直送CPU 处理,造成路由器CPU 升高。如果NAT地址池的地址为202.56.32.1-202.56.32.127黑洞路由如下配置
Ruijie(config)#ip route 202.56.32.0 255.255.255.128 null0
3、查看设备流表使用情况及用户建立的会话数数量、可通过开启流攻击保护进行限制
1)查看设备表使用情况
RSR7708-X#sh ip f st
Flow table capacity: 57344 //主控流表容量
FRQ capacity: 1024
Flow number: 58 //当前流表条目数
Nat-flow number: 0 //当前NAT流表条目数
User number: 6 //当前用户数
Defragment context number: 0 //分片待重组IP报文个数
Defragment packet number: 0 //分片待重组的分片包个数
Event count: 0
Slot-2/1 : FNM-8GE
Flow table capacity: 2097152 //线卡流表容量
FRQ capacity: 4096
Flow number: 13876 //当前流表条目数
Nat-flow number: 11657 //当前NAT流表条目数
User number: 136 //当前用户数
Defragment context number: 0 //分片待重组IP报文个数
Defragment packet number: 0 //分片待重组的分片包个数
Event count: 259
RSR7708-X#
2)查看是否存在部分用户会话数多的情况,正常的用户一般会话数是200-300,如果出现用户会话数超出的可以查看下对应的终端是否异常(服务器会话数一般会比较大),可以通过限制终端会话数
RSR7708-X#sh ip fpm users
IP-address Active-time(s) Active-Conns Max-Config-Conns
172.16.1.3 2343 201 10000
172.16.1.6 203 602 10000 //用户172.16.1.6存在602条数据流
<end>
3)攻击保护
ip fpm session filter的原理就是,在建立流表前匹配调用的ACL,如果被ACL拒绝就不会再去建流。ip fpm session filter 是全局生效的,开启此功能后不管从那个接口进入的数据,都会匹配到被调用的ACL,全局的ACL是基于状态表,能出去就能回来,类似于防火墙的功能,实现只放通合法的流量,拒绝其它流量
实施前准备
①确认设备开启了哪些服务,用到了哪些端口。
②确认哪些接口会使用这些服务。
风险注意
①ip fpm session filter启用后,没有被调用的ACL允许的数据流量都无法经过路由器转发,因此在启用前必须对ACL的配置进行仔细核对,避免出现调用功能后出现设备转发异常或无法登陆设备管理。
②该操作属于高风险,可能会导致设备数据传输震荡引发断网,因此建议在非业务高峰期或可允许短暂断网的情况下实施。
配置方法
1.确定内网需要被放通的数据流,定义在同一个扩展ACL中(ACL编号越小越优先执行),以下是配置方法(都需要操作):
①用于设备管理的数据流量,比如telnet、ssh和web等
比如只允许192.168.10.1~192.168.10.7 telnet设备,那么配置如下;
Ruijie(config)#ip access-list extended 199 --->创建编号为199的acl
Ruijie(config-ext-nacl)#10 permit tcp 192.168.10.0 0.0.0.248 any eq 23 --->编号10:匹配源地址为192.168.10.0/24网段的tcp协议,目的地址为任意的telnet端口。如果设备有固定IP用于telnet管理,那么可以把any 换成host x.x.x.x
Ruijie(config-ext-nacl)#11 deny tcp any any eq 23 --->编号11:不允许其他的telnet流量,防止ACL后面的列表放通了该数据流
②设备始发流量,比如icmp、snmp和运行使用的协议(OSPF、RIP等)流量等。
比如与核心交换机运行的OSPF协议报文需要被放通
Ruijie(config)#ip access-list extended 199 --->进入编号为199的acl
Ruijie(config-ext-nacl)#200 permit ospf any any --->编号200:匹配ip协议号为89(OSPF)的数据通过。
③需要经过RSR路由器转发的内网地址,包括普通用户地址和服务器地址 ------防止内网伪造非规划IP用于攻击
比如内网用户和服务器地址段为192.168.10.0/24,那么配置如下;
Ruijie(config)#ip access-list extended 199 --->进入编号为199的acl
Ruijie(config-ext-nacl)#100 permit ip 192.168.10.0 0.0.0.255 any --->编号100:匹配源地址为192.168.10.0/24网段,目的地址为任意的数据流
④放通用于端口映射的公网地址和端口号 ------放通外网访问映射的服务器
比如内网服务器为192.168.10.100,映射的公网地址为202.1.1.1,协议为tcp,源目端口都是80,那么配置如下:
Ruijie(config)#ip access-list extended 199 --->进入编号为199的acl
Ruijie(config-ext-nacl)#110 permit tcp any host 202.1.1.1 eq 80--->编号110:匹配源地址为任意,目的地址为202.1.1.1,目的端口为80的tcp 数据流
⑤确保需要放通的数据流配置完整后,在ACL的最后一条加上一条deny any的ace
Ruijie(config)#ip access-list extended 199 --->进入编号为199的acl
Ruijie(config-ext-nacl)#1000 deny ip any any --->没有被放通的流量全部拒绝
⑥【可选】为ACL添加标签,方便阅读和识别
Ruijie(config)#ip access-list extended 199 --->进入编号为199的acl
Ruijie(config-ext-nacl)#remark session-filter --->标识这个ACL是 用于session-filter
Ruijie(config-ext-nacl)#exit
2.调用ACL,开启流攻击保护功能
Ruijie(config)#ip fpm session filter 199 --->只有ACL 199 permit的数据才允许路由器转发
3.测试业务正常后,保存设备配置
Ruijie(config)#end
Ruijie#wirte --->保存配置
4)会话数限制
注:调整只对新建流生效,因此需要将整机/线卡重启或者流表老化(清除流表属于高危操作,会造成网络闪断)。建议在非业务高峰期或可允许短暂断网的情况下实施。服务器网段,内部DNS服务器的会话数会特别多需要注意,还有SAM等相关服务器,可排除这些设备地址。
1.定义需要被限制会话数的数据
Ruijie(config)#ip access-list extended 2001 --->创建编号为2001的acl
Ruijie(config-ext-nacl)#10 permit ip 192.168.10.0 0.0.0.255 any --->匹配源地址为192.168.10.0/24网段,目的地址为任意的数据流
Ruijie(config)#ip access-list extended 2002 --->创建编号为2002的acl
Ruijie(config-ext-nacl)#10 permit ip 192.168.20.0 0.0.0.255 any --->匹配源地址为192.168.20.0/24网段,目的地址为任意的数据流
Ruijie(config-ext-nacl)#exit
2.对相应的数据流配置会话限制(不同ACL地址不能重叠)
Ruijie(config)#ip fpm session filter 2001 session-num 500 --->对ACL 2001匹配到的每个源IP限制会话500个
Ruijie(config)#ip fpm session filter 2002 session-num 1000 --->对ACL 2002匹配到的每个源IP限制会话1000个
3.保存配置
Ruijie(config)#end
Ruijie#wirte --->保存配置
4.择机重启设备或线卡,保证所有流老化

五、信息收集

show run
show memory
show version
show cpu
show log
show memory
show arp
show ef-rnfp all //间隔10S,收集3次
Show ip fpm statistics
sh ip fpm users
show ip rou summary
show ip ref route statistic
sho ip ref adjacency
show ip fpm st
show ip fpm count
show core | b Buff
debug support
show except
pcie show
show skb
show task
show efb

六、总结与建议

CPU tnet/tnet6进程占用高一般是以下情况出现的概率高
1、设备接口没有开启REF;
2、设备收到大量异常报文或设备受到攻击 。
阅读剩余
THE END