网络trouble-shooting

一、突然其来的卡顿

现象

十一国庆假期过后,生产说访问图纸突然很卡顿,期间收到过PLM服务器磁盘满的警报。远程登录研发图纸服务器,发现备份不成功,而且访问是比较卡顿,初步怀疑是存储的问题。连到备份服务器,果然通过ISCSI发起映射的磁盘访问及其卡顿,马上连到存储,并没看到有异常警报,但是PING存储的ISCSI接口,延迟很严重。其他有ISCSI映射盘的服务器全部都有这种现象。

因为是工作时间,故要先尽快恢复访问,先断掉ISCSI映射盘,只用本地磁盘。后面发现服务器网段的网络都有一定延迟,登录进核心交换机(CISCO C4503E),发现核心交换机输入输出非常卡顿,估计问题就是出现在这里。

排查

一:CPU超载原因:
导致CISCO4500系列交换CPU超载的原因很多。最常见的原因为网络中异常包过多,使核心交换机CPU疲于控制,转发异常包,CPU超载运作。在我们公司有出现过下列三种方式导致异常包过多现象:
1:病毒(ARP,DHCP协议包过多);
2:二层网络串接成回路(广播风暴);
3:测试软件使用不当(该软件能持续发送广播包或者多包);

二:Troubleshooting过程可参考的命令:
1: show processes cpu
2: show platform health
3: show platform cpu packet statistics
4: debug platform packet all receive buffer
5: show platform cpu packet buffered
6: show interfaces | include L2 |line |broadcast
7: show interfaces interface counters
8: show interface | include line |\/sec
9: monitor session 1 source cpu
10:monitor session 2 destination interface interfaces

三:一般处理办法:
针对上述导致CPU超载原因,在现实中稍有不同的处理步骤。病毒以及测软件产生异常包,我们需要找到源头并封挡它;网络串接成环,我们需要定位哪个端口下或哪些端口串接成环并做出处理。
最近5厂出现测试软件使用不当,导致核心45 CPU超载的异常事件,现结合案子大概讲述下处理过程:
1:收到核心45超载报警信息后,登入45,show processes cpu 查看各个进程占用率情况,发现Cat4k Mgmt进程占用率过大,此为核心进程。

这次使用如下命令,直接过滤掉没负载的进程:
show processes cpu | exclude 0.00

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CPU utilization for five seconds: 18%/0%; one minute: 76%; five minutes: 94%  
PID Runtime(ms) Invoked uSecs 5Sec 1Min 5Min TTY Process
18 643334722 2859143991 225 70.11% 72.11% 75.57% 0 ARP Input
50 2130938 37699887 56 0.07% 0.07% 0.07% 0 IDB Work
78 1295771747 3328977192 389 5.91% 15.44% 18.29% 0 Cat4k Mgmt HiPri
79 1568485493 1102455511 1422 2.15% 6.16% 7.42% 0 Cat4k Mgmt LoPri
105 3708758 683073180 5 0.15% 0.09% 0.08% 0 Ethernet Msec Ti
119 1217177 376915709 3 0.07% 0.05% 0.07% 0 UDLD
142 6151235 60788415 101 0.07% 0.07% 0.07% 0 CDP Protocol
150 233100791 1571560759 148 0.39% 0.33% 0.32% 0 IP Input
157 1196 1274 938 5.83% 0.64% 0.22% 1 SSH Process
159 55886334 803159062 69 1.67% 1.55% 1.55% 0 Spanning Tree
196 34326058 43858690 782 0.15% 0.10% 0.08% 0 ADJ background
339 6819568 94793998 71 0.07% 0.04% 0.05% 0 LLDP Protocol

很明显,是ARP请求导致的,再运行抓包进一步查出发送ARP包的源,利用cisco设备本身具有的命令来获取异常包信息。

开启debug:
debug platform packet all receive buffer

查看数据包:
show platform cpu packet buffered

1
2
3
4
5
6
7
8
9
10
Index 94:  
Oct 8 18:48:42.568 Beijing - RxVlan: 101, RxPort: Gi3/1
Priority: Normal, Tag: Dot1Q Tag, Event: L2 Router, Flags: 0x40, Size: 64
Eth: Src 00:14:C0:A8:01:44 Dst FF:FF:FF:FF:FF:FF Type/Len 0x0806
Remaining data:
0: 0x0 0x1 0x8 0x0 0x6 0x4 0x0 0x1 0x0 0x14
10: 0xC0 0xA8 0x1 0x44 0xC0 0xA8 0x1 0x44 0x0 0x0
20: 0x0 0x0 0x0 0x0 0xC0 0xA8 0x1 0x1 0x0 0x0
30: 0x0 0x0 0x9D 0x11 0x0 0x0 0x0 0x0 0x0 0x0
40: 0x15 0x12 0x0 0x0 0xB4 0x8A 0xCE 0x98 0x8B 0x62

可以看到全部都是这种ARP包,可以看到源MAC地址是00:14:C0:A8:01:44,从Gi3/1端口接收,查出源MAC这下就好办了,进一步查找Gi3/1连接的是哪个交换机,使用show lldp ne查看连接的邻居交换机信息,找到后,连接到该交换机,发现下接的是华为S5735交换机,远程登录到该交换机,使用dis mac-address | include 0144,可以查出是哪个端口,直接把该端口shutdown掉,再回去核心交换机看看负载,明显的已经降下来了,问题得到解决。

最后发现该设备是一个考勤设备,可能有故障不断发送ARP包,但又不能影响使用,故在交换机上配置ARP包限制即可。

相关安全命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
[Huawei]arp speed-limit source-mac maximum 10  //配置根据任意源MAC地址进行ARP报文限速的限速值
[Huawei]arp speed-limit source-mac 1000-0000-0000 maximum 10 //配置对指定MAC地址用户的ARP报文进行限速的限速值
[Huawei]arp speed-limit source-ip 10.1.1.1 maximum 30 //配置对指定IP地址用户的ARP报文进行限速的限速值, 缺省30个
[Huawei-GigabitEthernet0/0/1]arp anti-attack rate-limit 10 //配置ARP报文的限速值
[Huawei-GigabitEthernet0/0/1]arp anti-attack rate-limit enable //使能ARP报文限速功能
[Huawei-GigabitEthernet0/0/1]arp anti-attack rate-limit alarm enable //使能ARP报文限速丢弃告警功能
[Huawei-GigabitEthernet0/0/1]arp anti-attack rate-limit alarm threshold 100 //配置ARP报文限速丢弃告警阈值,缺省为100
[Huawei-vlan10]arp anti-attack rate-limit 10
[Huawei-vlan10]arp anti-attack rate-limit enable
[Huawei-vlan10]arp anti-attack rate-limit alarm enable
[Huawei-vlan10]arp anti-attack rate-limit alarm threshold 100
[Huawei]arp-miss speed-limit source-ip maximum 10 //配置根据源IP地址进行ARP Miss消息限速的限速值
[Huawei]arp-miss speed-limit source-ip 10.1.1.1 maximum 10 //配置对指定IP地址用户的ARP Miss消息进行限速的限速值
[Huawei-GigabitEthernet0/0/1]arp-miss anti-attack rate-limit enable //使能ARP Miss消息限速功能
[Huawei-GigabitEthernet0/0/1]arp-miss anti-attack rate-limit alarm enable //使能ARP Miss消息限速丢弃告警功能
[Huawei-GigabitEthernet0/0/1]arp-miss anti-attack rate-limit alarm threshold 100 //配置ARP Miss消息限速丢弃告警阈值,缺省为100
[Huawei-vlan10]arp-miss anti-attack rate-limit enable
[Huawei-vlan10]arp-miss anti-attack rate-limit alarm enable
[Huawei-vlan10]arp-miss anti-attack rate-limit alarm threshold 100
[Huawei]arp learning strict //配置全局ARP表项严格学习功能
[Huawei-GigabitEthernet0/0/1]arp-limit vlan 10 maximum 10 //配置基于二层接口的ARP表项限制
[Huawei]display arp anti-attack configuration all //查看ARP防攻击配置
[Huawei]display arp-limit //查看接口可以学习到的动态ARP表项数目的最大值
[Huawei]display arp learning strict //查看全局和所有VLANIF接口上的ARP表项严格学习情况
[Huawei]arp anti-attack entry-check fixed-mac enable //配置ARP表项固化功能
[Huawei]arp anti-attack entry-check fixed-all enable
[Huawei]arp anti-attack entry-check send-ack enable
[Huawei-Vlanif10]arp anti-attack entry-check fixed-mac enable //接口使能ARP表项固化功能
[Huawei-Vlanif10]arp anti-attack entry-check fixed-all enable
[Huawei-Vlanif10]arp anti-attack entry-check send-ack enable
[Huawei-GigabitEthernet0/0/1]arp anti-attack check user-bind enable //使能动态ARP检测功能
[Huawei-GigabitEthernet0/0/1]arp anti-attack check user-bind check-item ip-address //配置对ARP报文进行绑定表匹配检查的检查项
[Huawei-GigabitEthernet0/0/1]arp anti-attack check user-bind check-item mac-address
[Huawei-GigabitEthernet0/0/1]arp anti-attack check user-bind check-item vlan
[Huawei-GigabitEthernet0/0/1]arp anti-attack check user-bind alarm enable //使能动态ARP检测丢弃报文告警功能
[Huawei-GigabitEthernet0/0/1]arp anti-attack check user-bind alarm threshold 100 //配置动态ARP检测丢弃报文告警阈值, 缺省为100
[Huawei]dhcp enable //全局使能DHCP功能
[Huawei]dhcp snooping enable //全局使能DHCP Snooping功能
[Huawei-GigabitEthernet0/0/1]dhcp snooping enable //使能接口的DHCP Snooping功能
[Huawei-GigabitEthernet0/0/1]dhcp snooping trusted //配置接口为信任状态
[Huawei-vlan10]dhcp snooping enable
[Huawei-vlan10]dhcp snooping trusted interface GigabitEthernet 0/0/1
[Huawei]arp anti-attack gateway-duplicate enable //使能ARP防网关冲突攻击功能
[Huawei-Vlanif10]arp gratuitous-arp send enable //使能发送免费ARP报文的功能
[Huawei-Vlanif10]arp gratuitous-arp send interval 60 //配置发送免费ARP报文的时间间隔,缺省为60秒
[Huawei]arp anti-attack packet-check sender-mac //使能ARP报文合法性检查功能,并指定ARP报文合法性检查项
[Huawei-Vlanif10]arp learning dhcp-trigger //使能DHCP触发ARP学习功能
[Huawei]display arp anti-attack configuration check user-bind interface GigabitEthernet 0/0/1 //查看VLAN或接口下动态ARP检测的相关配置
[Huawei]display arp anti-attack gateway-duplicate item //查看ARP防网关冲突攻击表项
[Huawei]display arp packet statistics //查看ARP处理的报文统计数据
[Huawei]display arp anti-attack statistics check user-bind interface g0/0/1 //查看接口下进行ARP报文绑定表匹配检查的ARP报文丢弃计数
[Huawei]display arp anti-attack arpmiss-record-info //查看ARP Miss消息限速触发时的相关信息
<Huawei>reset arp packet statistics //清除ARP报文的统计信息
<Huawei>reset arp anti-attack statistics check user-bind interface g0/0/1 //清除由于不匹配绑定表而丢弃的ARP报文计数
<Huawei>reset arp anti-attack statistics rate-limit //清除由于ARP报文超过速率限制阈值而被丢弃的计数
[Huawei]arp anti-attack log-trap-timer 1 //配置对潜在的ARP攻击行为发送告警的时间间隔

这里只配置了指定MAC地址用户的ARP报文进行限速的限速值:
arp speed-limit source-mac 0014-c0a8-0144 maximum 10

再次开启端口后观察一切正常。

结论

这次通过多个命令排查根源,但是发生故障的根本原因是规划问题,因为设备跟服务器在同一个VLAN,所以大量发送ARP请求会影响到该VLAN的网络访问。

二、设备无故获取异常地址

现象

某设备停机维护,然后重新启动后发现怎么都连不了内网,过去查看网卡获取到异常的地址,很明显是有人私接路由器,并开启了DHCP服务,导致设备都获取到这个路由器分配的地址。

排查

现在的交换机都有DHCP spooning的功能,就是防私接路由。开启该功能后客户端发送的dhcp请求只能从指定端口回应,其他端口会丢弃请求,从而达到阻止私接路由器获取非法DHCP的功能。但是较旧的交换机没有这个功能,但又找不到私接的路由器设备放到哪里,是不是就没辙了?答案是可以通过MAC的ACL来控制啦。

1、通过获取到非法DHCP的客户端或者使用它的网线接笔记本,获取到非法地址,打开命令提示符,通过arp -a命令获取到路由器地址的MAC地址。

2、直接进入该网络区域的汇聚交换机,通过show mac address-table | include xxxx(MAC最后四位即可)就可以查到该MAC地址对应的端口,如果该端口是trunk口,下面还接有一个可管理交换机,则再进入该交换机重复上述操作。

3、确定最后非法路由器的接口,可以通过建立基于MAC的ACL,进入全局配置模式:

1
2
3
4
5
6
C2960S(config)#mac access-list extended deny_hub_dhcp          # 创建ACL
C2960S(config-ext-macl)#deny host 0018.0515.3049 any # 添加规则
C2960S(config-ext-macl)#permit any any
C2960S(config-ext-macl)#exit
C2960S(config)#inter gigabitEthernet 1/0/13
C2960S(config-if)#mac access-group deny_hub_dhcp in # 进入端口应用ACL

配置后再测试能获取正常的DHCP地址了。

分享到